統計・起動情報・イベント

対象: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でもセンサーの飽和がなかったとは判断できません。

  1. 先にcrc_err/spi_timeout、次に1個か3個かを確認。共通発生なら振動、運動、電源、温度を確認します。
  2. OUT,rawでstatusを確認。16飽和、32初期化、8/12センサーエラー。初期化は一時的であるべきです。
  3. 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

原ページを読む · 3資料の章対応と相違点

このカテゴリの概要 · 設定ガイド一覧