統計、開機資訊與事件訊息¶
適用於 IMU600-V2/韌體 0.11.2/GUI v1.6.1。
通訊格式完整章節:2. 資料輸出(2.1–2.5) · 3. 狀態與統計資料(3.1–3.4)。各訊息均附完整格式與逐欄說明。
STAT=1 時,每秒擷取一組共同時間點的統計,再依序傳送 STAT1、STAT2、STAT3、FUS、SYS,HB 則依開關設定。傳送時間不同,不代表統計採樣時間不同。可用 STAT,now 立即讀取。
SPNVSTAT¶
id,dry,out,crc_err,frame_err,spi_timeout,dropped,dcnt_skip,dry_timeout,dry_kicks,dry_pin,isr_us_max,isr_us_last,isr_cpu,resync[,read_retry,read_bad]
| # | 欄位 | 定義與判讀 |
|---|---|---|
| 1 | id | IMU 編號 1–3 |
| 2 | dry | DRY 中斷累計,約每秒 +1470;反映原始取樣數 |
| 3 | out | 輸出累計,每秒增加量應接近 RATE |
| 4 | crc_err | 內部 SPI 回應 CRC 錯誤,正常 0 |
| 5 | frame_err | 帶 S/CE/IDS 感測器旗標的 SPI 回應數;不是通訊錯誤次數 |
| 6 | spi_timeout | 內部 SPI 逾時累計,正常 0;fw 0.10.6 設 100 µs |
| 7 | dropped | 取樣/輸出佇列滿而丟棄的累計,正常 0 |
| 8 | dcnt_skip | 感測器樣本計數不連續,可能漏讀或重讀,正常 0 |
| 9 | dry_timeout | 目前是否超過 100 ms 無 DRY:0 否、1 是 |
| 10 | dry_kicks | 解除 DRY 持續高態的額外讀取,手冊正常範例開機後固定 1 |
| 11 | dry_pin | DRY 現在電位 0/1,多為 0 |
| 12–13 | isr_us_max / isr_us_last | 最長/最近 ISR 執行時間,µs;手冊參考約 100 µs 內 |
| 14 | isr_cpu | 最近 1 s 該顆 ISR 占 CPU 整數百分比,參考約 13% |
| 15 | resync | 輸出時間邊界重新對齊累計,正常 0 |
| 16 | read_retry | fw 0.10.6 起、僅 ASCII;首次 CRC 錯後立即重讀次數 |
| 17 | read_bad | fw 0.10.6 起、僅 ASCII;重讀仍失敗而丟棄的原始樣本數 |
frame_err 增加不等於線路出錯¶
每個原始樣本要讀 7 個感測器 SPI 回應;同一次異常可能讓 7 個回應都帶旗標。手冊在 fw 0.4.3 的板上測試中,約 5 ms 劇烈甩動造成三顆 frame_err 各 +52,而 crc_err/spi_timeout 都為 0。這不代表 52 次獨立故障,也不代表資料沒有飽和。
- 先看 crc_err/spi_timeout,再看三顆一起增加或只有一顆;共同發生先查振動、運動、供電及溫度。
- 用 OUT,raw 讀 status:16 為飽和,32 為初始化,8/12 為感測器錯誤;初始化只應短暫出現。
- 三顆都帶錯誤旗標時,韌體會退回使用三顆產生合併結果。接收端不能只看到 FUSED 持續輸出就判為正常,必須檢查 RAW status 與合併 flags。
SPNVFUS¶
outputs,rej1,rej2,rej3,incomplete,degraded,gth,ath
| # | 欄位 | 定義 |
|---|---|---|
| 1 | outputs | 合併輸出總數 |
| 2–4 | rej1 / rej2 / rej3 | 各顆被排除的輸出週期數;錯誤或持續偏差,PPS 不列入 |
| 5 | incomplete | 未收齊三顆就產生結果的累計 |
| 6 | degraded | 可用顆數少於 2 的累計 |
| 7–8 | gth / ath | 目前基本門檻,°/s/m/s²,ASCII 3 位小數 |
SPNVSYS¶
uart_drop,loops_per_s,isr_cpu_total,rate_hz,out_mode,uart_resets,pps_cnt,baro_samples,baro_i2c_err,baro_timeouts,baro_stale,baro_hz,proto_mode,baud,pps_state,u2_drop,trig_cnt,trig_rej
| # | 欄位 | 定義 |
|---|---|---|
| 1 | uart_drop | UART1 傳送佇列滿時整行/整幀丟棄數 |
| 2 | loops_per_s | 最近 1 s 主迴圈次數,手冊參考約 77000 |
| 3 | isr_cpu_total | 三顆 ISR 合計 CPU 百分比,參考約 40% |
| 4 | rate_hz | 目前 IMU 輸出率 |
| 5 | out_mode | none / raw / fused / both |
| 6 | uart_resets | UART 傳送停止回應後自動重置數,正常 0 |
| 7 | pps_cnt | PPS 原始擷取數,含雜訊;合格數看 SPNVPPS edges |
| 8 | baro_samples | 成功氣壓樣本累計,每秒約增加 BRATE |
| 9 | baro_i2c_err | I2C NACK/衝突累計,正常 0 |
| 10 | baro_timeouts | I2C 逾時後重初始化累計,正常 0 |
| 11 | baro_stale | 超過 200 ms 無新氣壓資料:1 是、0 否 |
| 12 | baro_hz | 氣壓輸出率 |
| 13 | proto_mode | ascii / binary |
| 14 | baud | 目前 UART1 鮑率 |
| 15 | pps_state | 0 OFF / 1 NO_SIGNAL / 2 ACQUIRING / 3 LOCKED / 4 HOLDOVER |
| 16 | u2_drop | UART2 佇列滿而丟棄整筆資料數 |
| 17 | trig_cnt | 觸發模式接受的上升緣數;連續模式不累加 |
| 18 | trig_rej | 小於 0.5 ms 的毛刺,或主迴圈忙碌使觸發事件佇列溢位而被排除的邊緣數 |
以上順序是 ASCII;Binary SYS 的排列不同,且沒有 baud 欄位,請用Binary 偏移表。HB 為可選的原廠診斷 key=value 訊息,一般解析器可略過,以 HB,0/HB,1 控制。
開機資訊與設定回讀¶
出廠設定不會主動送出開機資訊。可用 INFO,1 讀取精簡資訊,或用 DBG,1 讀取完整資訊。裝置驗證或初始化失敗時,韌體可能主動回報;若已儲存的 BAUD/MODE 不是預設值,開機時也可能出現救援提示。解析 key=value 時,只用第一個等號分開名稱與值。例如 build=rel=1 的名稱是 build,值是 rel=1。
| 訊息 | 內容 |
|---|---|
| SPNVBOOT | 產品、fw、imus、frame、proto、baud、build;rel/bl/auth/halt/bind 是版本與驗證旗標 |
| SPNVRESET | rcon 與 POR、BOR、WDTO、SWR、EXTR(MCLR)、CM;正常上電常見 POR,BOR |
| SPNVAUTH / SPNVBIND / SPNVPUB | auth=1/ok=1 正常;sn 為 18 位十六進位裝置序號,其餘欄位供診斷 |
| SPNVINIT,1 / 2 / 3 | 各 IMU OK/FAIL;DBG 版可含單顆序號等完整資訊 |
| SPNVINIT,B | 氣壓計 mode、odr、osr_p/osr_t、iir、conv_us、overruns;conv_us 含估計/前筆實測/實測最大,實測含 1 ms 輪詢影響 |
| SPNVNVM | saved、保存的參數、nvm_err 或 backend=none;反映永久儲存內容 |
| SPNVCFG | 目前 RAM 參數;saved=1 不代表所有目前值都已保存。out 0/1/2/3 = none/raw/fused/both |
| SPNVCAL | 三顆 ab、ak 與 W 行 g/a 權重、saved、lever;lever=1 代表固定安裝位置差補償生效 |
| SPNVU2 | out、mode、baud、drop、pps、pps_state、pps_err_ppm;CFG/INFO 可讀 |
| SPNVSPI | SPI 模式與交易/交付/短讀/丟棄計數,詳見 SPI 章節 |
| SPNVNVM,boot | 非預設已存 BAUD/MODE 時,先以 460800 ASCII 提供 factory_window_ms=500;可送 FACTORY,1,之後才切到已存值 |
| SPNVDBG / SPNVHB | 原廠診斷文字/key=value,一般主機可略過 |
初始化錯誤碼¶
| 來源 | rc | 原因 |
|---|---|---|
| IMU | −2 | 無回應,MISO 全 0/1 |
| IMU | −3 | CRC |
| IMU | −4 | 回應位址錯誤 |
| IMU | −5 | 寫入驗證失敗 |
| IMU | −6 | 啟動後狀態異常 |
| IMU | −7 | 其他錯誤 |
| BARO | −1 | I2C NACK |
| BARO | −2 | I2C timeout |
| BARO | −3 | 晶片識別不符 |
| BARO | −4 | NVM error |
| BARO | −5 | OSR / ODR invalid |
BARO overruns 表示前次量測尚未完成就到下一個觸發點,該次會跳過,正常應為 0。
異常事件¶
| 訊息 | 條件與處理 |
|---|---|
| SPNVHALT | 裝置驗證未通過,約每 2–3 s 回報,停止量測但仍接受 INFO/BOOT/FACTORY。暫時讀不到 IMU 時約每 3 s 重試;持續則附 INFO 聯絡原廠 |
| SPNVHEAL | imu_reinit、mask、n。CRC+逾時連續 3 s 每秒 ≥100 次,或初始化失敗時,重新初始化三顆;兩次至少間隔 30 s |
| SPNVSTALL | 主迴圈超過 300 ms 未前進,含 where/名稱;保留訊息供診斷 |
| SPNVTRAP | CPU 位址、堆疊、數學等例外,回報 code/name/INTCON3–5 後停止;聯絡原廠 |
回報問題時附上 INFO,1、DBG,1、CFG,1 與原始記錄。聯繫 ethan@robotlab.com.tw。
4. 開機與事件訊息:完整格式¶
下列逐項對照通訊協定第 4 節。<...>、...、XX 是格式佔位符,[...] 表示可選,實際每行以 CRLF 結尾。key=value 只在第一個等號切分,若尾端多出不認識的欄位,仍應能讀取前面的既有欄位。
SPNVBOOT¶
$SPNVBOOT,SparkNavi-IMU600-V2,fw=<ver>,imus=3,frame=body-FRD,proto=ascii-xor8|d644-crc16,baud=<n>,build=rel=<0/1>,bl=<0/1>,auth=<0/1>,halt=<0/1>,bind=<0/1>*XX
rel 為出貨版、bl 為含 bootloader;出貨版所列建置旗標均為 1。build=rel=1 的值是 rel=1。
SPNVRESET¶
$SPNVRESET,rcon=0x<8hex>[,POR][,BOR][,WDTO][,SWR][,EXTR(MCLR)][,CM(config mismatch)]...*XX
顯示 RCON 暫存器的解碼結果;一次重置可能同時列出多個原因。正常上電常見 POR,BOR。
SPNVDBG¶
$SPNVDBG,<free_text>*XX
DBG 原廠診斷文字;未公開固定欄位。
SPNVAUTH / SPNVBIND / SPNVPUB¶
$SPNVAUTH,auth=<0/1>,sn=<18hex>*XX
$SPNVBIND,<key>=<value>[,...]*XX
$SPNVPUB,<key>=<value>[,...]*XX
AUTH 格式如上。BIND/PUB 僅公布 key=value 類型,上列為示意。auth=1、ok=1 為正常,sn 為 18 位十六進位裝置序號。
SPNVINIT (IMU)¶
$SPNVINIT,<id>,OK*XX
$SPNVINIT,<id>,OK,sn=<str>,...*XX
$SPNVINIT,<id>,FAIL,rc=<rc>,crc_err=<n>*XX
上方依序列出 INFO 的精簡成功回覆、DBG 的完整成功回覆,以及初始化失敗時一定會送出的回覆。sn 是各顆 IMU 的序號。rc 見本頁錯誤碼表。
SPNVINIT,B¶
$SPNVINIT,B,OK,odr=<hz>,mode=forced|normal*XX
$SPNVINIT,B,OK,chip=0x<hex>,rev=0x<hex>,odr=<hz>,osr_p=<n>,osr_t=<n>,iir=3,i2c_err=0,bus_recover=0,heals=0,mode=forced,conv_us=<estimated>/<last>/<max>,overruns=<n>*XX
$SPNVINIT,B,FAIL,rc=<rc>,chip=0x<hex>,i2c_err=<n>,timeouts=<n>*XX
conv_us 依序是估計轉換時間、上次實測時間與實測最大值。實測值包含 1 ms 輪詢造成的影響。overruns 記錄前次量測尚未完成、因而跳過新量測的次數;正常為 0。
SPNVNVM¶
$SPNVNVM,saved=1,baud=<n>,mode=<m>,rate=<hz>,out=<n>,stat=<n>,hb=<n>,baro=<n>,brate=<hz>,ahrs=<n>,nvm_err=<n>*XX
$SPNVNVM,saved=0 (factory defaults),nvm_err=<n>*XX
$SPNVNVM,backend=none*XX
INFO/DBG 會回報 NVM 是否存有設定及其內容。上方列出三種可能的回覆,解析時請分別處理,不能假設每次都收到同一種格式。
SPNVCAL¶
$SPNVCAL,<imu>,ab=<bx>/<by>/<bz>,ak=<kx>/<ky>/<kz>*XX
$SPNVCAL,W,g=<w1>/<w2>/<w3>,a=<w1>/<w2>/<w3>,saved=<0/1>,lever=<0/1>*XX
第一種格式會對 IMU1/2/3 各送一行,最後再送一行 W 權重資料。ab 單位 m/s²、小數 5 位;ak 小數 6 位;saved 表示校正已存 NVM,lever=1 為位置差補償生效。
SPNVCFG¶
$SPNVCFG,baud=<n>,mode=ascii|binary,rate=<hz>,out=<0-3>,stat=<0/1>,hb=<0/1>,baro=<0/1>,brate=<hz>,ahrs=<0/1>,gth=<f3>,ath=<f3>,akp=<f3>,aki=<f4>,saved=<0/1>,fw=<ver>[,trig=<0/1>][,azb=<0/1>]*XX
out 0/1/2/3 = none/raw/fused/both;f3/f4 表示小數 3/4 位。trig 自 fw 0.9.0、azb 自 0.9.1 附加。saved=1 只表示曾經儲存過設定,不代表 RAM 中的每個目前值都已儲存。
SPNVNVM,boot¶
$SPNVNVM,boot,baud=<n>,mode=<m>,factory_window_ms=500*XX
僅當已存 BAUD/MODE 不同於出廠值時,以 460800 ASCII 提供 500 ms FACTORY 救援窗,之後切換;未存或與預設相同則無此等待。
SPNVHALT¶
$SPNVHALT,<reason>*XX
約每 2–3 秒回報;量測不啟動,仍接受 INFO/BOOT/FACTORY。暫時讀不到 IMU 時約每 3 秒重試。
SPNVHEAL¶
$SPNVHEAL,imu_reinit,mask=<bitmask>,n=<count>*XX
mask bit0–2 = IMU1–3;n 為恢復累計。任一顆 CRC+逾時連續 3 秒每秒 ≥100,或初始化失敗,重初始化三顆;兩次至少隔 30 秒。
SPNVSTALL¶
$SPNVSTALL,main stuck at where=<w>(<name>) for >300ms*XX
主迴圈超過 300 ms 沒有繼續執行時,會送出這項診斷訊息。
SPNVTRAP¶
$SPNVTRAP,code=<n>,<name>,INTCON3=0x<hex>,INTCON4=0x<hex>,INTCON5=0x<hex>,halted*XX
CPU 例外回報後停止;保留 code、名稱及暫存器供原廠診斷。
SPNVU2¶
$SPNVU2,out=<combination>,mode=ascii|binary,baud=<n>,drop=<n>,pps=<0/1>,pps_state=<n>,pps_err_ppm=<x>*XX
CFG/INFO 附帶回報的 UART2 與 PPS 狀態;尾端可新增欄位。
原始文件:IMU600-V2 Communication Protocol v1.1 · PDF 頁 10–16