統計、開機資訊與事件訊息

適用於 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 次獨立故障,也不代表資料沒有飽和。

  1. 先看 crc_err/spi_timeout,再看三顆一起增加或只有一顆;共同發生先查振動、運動、供電及溫度。
  2. 用 OUT,raw 讀 status:16 為飽和,32 為初始化,8/12 為感測器錯誤;初始化只應短暫出現。
  3. 三顆都帶錯誤旗標時,韌體會退回使用三顆產生合併結果。接收端不能只看到 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

原文件逐頁閱讀 · 三份文件逐章對照與差異說明

回到本分類總覽 · 全部設定指南