統計・起動情報・イベント¶
対象:IMU600-V2/FW 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/s;生サンプリング数 |
| 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 High継続解除用追加読み出し。資料の正常例は起動後1固定 |
| 11 | dry_pin | 現在DRY電位0/1、通常0 |
| 12–13 | isr_us_max / isr_us_last | 最長/直近ISR時間µs;資料の目安は約100 µs以内 |
| 14 | isr_cpu | 直近1秒の当該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は配線エラー数ではない¶
1生標本に7個のセンサーSPI応答があり、1事象で7個すべてにフラグが立ち得ます。資料のfw 0.4.3基板試験では約5 msの激しい動作で各frame_errが52増え、crc_err/spi_timeoutは0でした。この値は52件の独立した故障を意味しません。また、通信エラーが0でもセンサーの飽和がなかったとは判断できません。
- 先にcrc_err/spi_timeout、次に1個か3個かを確認。共通発生なら振動、運動、電源、温度を確認します。
- OUT,rawでstatusを確認。16飽和、32初期化、8/12センサーエラー。初期化は一時的であるべきです。
- 3個すべてにエラーフラグがあると3個での合成へ戻ります。FUSED出力継続だけで正常判定せず、RAW statusと合成flagsを確認します。
SPNVFUS¶
outputs,rej1,rej2,rej3,incomplete,degraded,gth,ath
| # | フィールド | 定義 |
|---|---|---|
| 1 | outputs | 合成出力総数 |
| 2–4 | rej1 / rej2 / rej3 | 各IMU除外区間数。エラー/継続偏差、PPSは含まない |
| 5 | incomplete | 3個が揃う前に出力した累計 |
| 6 | degraded | 使用可能IMUが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秒主ループ回数、資料の目安約77000 |
| 3 | isr_cpu_total | 3個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の値は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桁16進装置シリアル、他は診断用 |
| 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 | 3個の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 | チップID不一致 |
| BARO | −4 | NVM error |
| BARO | −5 | OSR / ODR invalid |
BARO overrunsは前回変換完了前に次トリガーが来てスキップした回数です。通常0です。
異常イベント¶
| メッセージ | 条件と対処 |
|---|---|
| SPNVHALT | 検証失敗、約2–3秒ごとに通知。計測停止中もINFO/BOOT/FACTORY可。一時的IMU読取不可は約3秒ごと再試行、継続時はINFOを添えて連絡 |
| SPNVHEAL | imu_reinit・mask・n。CRC+timeoutが3秒連続で毎秒100以上、または初期化失敗で3個を再初期化。回復間隔は30秒以上 |
| 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桁の16進数の装置番号です。
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に設定が保存されているか、その内容は何かを確認できます。上記の3種類はそれぞれ別の形式です。
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
最初の形式を各IMUについて1行ずつ、合計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は使用できます。一時的な読み取り失敗の場合は、約3秒ごとに再試行します。
SPNVHEAL¶
$SPNVHEAL,imu_reinit,mask=<bitmask>,n=<count>*XX
maskのbit0–2はIMU1–3、nは復旧回数の累計です。いずれか1個のCRC+timeoutが3秒連続で100/s以上となるか、初期化に失敗すると、3個すべてを再初期化します。再初期化の間隔は最低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