Statistics, Boot Information & Events¶
For IMU600-V2 / firmware 0.11.2 / GUI v1.6.1.
Complete protocol chapters: 2. Data output (2.1–2.5) · 3. Status and statistics (3.1–3.4), with full formats and field definitions.
With STAT=1, counters are captured at one common instant each second, then sent as STAT1, STAT2, STAT3, FUS and SYS, with HB when enabled. Different transmission times do not imply different snapshot times. Use STAT,now for an immediate set.
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]
| # | Field | Definition / Interpretation |
|---|---|---|
| 1 | id | IMU number 1–3 |
| 2 | dry | Cumulative DRY interrupts, about +1470/s; raw sampling count |
| 3 | out | Output count; per-second increase should approach RATE |
| 4 | crc_err | Internal SPI response CRC errors; normally 0 |
| 5 | frame_err | SPI responses carrying S / CE / IDS sensor flags; not communication errors |
| 6 | spi_timeout | Internal SPI timeouts; normally 0; 100 µs timeout from fw 0.10.6 |
| 7 | dropped | Sampling/output queue drops; normally 0 |
| 8 | dcnt_skip | Discontinuous sensor sample counter: possible missed / repeated reads; normally 0 |
| 9 | dry_timeout | No DRY for >100 ms: 0 no, 1 yes |
| 10 | dry_kicks | Extra reads to clear DRY held high; manual normal example stays at 1 after boot |
| 11 | dry_pin | Current DRY level 0 / 1, usually 0 |
| 12–13 | isr_us_max / isr_us_last | Maximum / latest ISR duration in µs; manual reference about ≤100 µs |
| 14 | isr_cpu | Last-second ISR CPU percentage for this IMU; reference about 13% |
| 15 | resync | Output-boundary resynchronizations; normally 0 |
| 16 | read_retry | fw 0.10.6+, ASCII only; immediate retries after initial CRC failure |
| 17 | read_bad | fw 0.10.6+, ASCII only; raw samples discarded after failed retry |
frame_err Is Not a Link-Error Counter¶
Each raw sample requires seven sensor SPI responses; one condition can flag all seven. In the manual’s fw 0.4.3 bench test, about 5 ms of violent motion increased frame_err by 52 on each IMU while crc_err / spi_timeout stayed zero. The count does not mean there were 52 separate failures. Zero communication errors also do not rule out sensor saturation.
- Check crc_err / spi_timeout first, then whether one or all three sensors are affected. For shared effects, inspect vibration, motion, power and temperature.
- Use OUT,raw to inspect status: 16 saturation, 32 initialization, 8 / 12 sensor error. Initialization should be transient.
- If all three carry error flags, firmware falls back to using all three for fusion. Continued FUSED output is not proof of health; inspect RAW status and fusion flags.
SPNVFUS¶
outputs,rej1,rej2,rej3,incomplete,degraded,gth,ath
| # | Field | Definition |
|---|---|---|
| 1 | outputs | Total fused outputs |
| 2–4 | rej1 / rej2 / rej3 | Rejected windows per IMU; error or persistent deviation, excluding PPS markers |
| 5 | incomplete | Outputs produced before all three arrived |
| 6 | degraded | Fewer than two usable IMUs |
| 7–8 | gth / ath | Current base thresholds, °/s / m/s², ASCII 3 decimals |
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
| # | Field | Definition |
|---|---|---|
| 1 | uart_drop | Whole messages dropped when UART1 transmit queue is full |
| 2 | loops_per_s | Main-loop iterations in last second; manual reference about 77000 |
| 3 | isr_cpu_total | Combined ISR CPU percentage, reference about 40% |
| 4 | rate_hz | Current IMU rate |
| 5 | out_mode | none / raw / fused / both |
| 6 | uart_resets | Automatic resets after UART TX stalls; normally 0 |
| 7 | pps_cnt | Raw PPS captures, including noise; accepted count is SPNVPPS edges |
| 8 | baro_samples | Successful barometer samples; increase per second about BRATE |
| 9 | baro_i2c_err | I2C NACK / collision count; normally 0 |
| 10 | baro_timeouts | Reinitializations after I2C timeout; normally 0 |
| 11 | baro_stale | No new barometer data for >200 ms: 1 yes, 0 no |
| 12 | baro_hz | Barometer rate |
| 13 | proto_mode | ascii / binary |
| 14 | baud | Current UART1 baud |
| 15 | pps_state | 0 OFF / 1 NO_SIGNAL / 2 ACQUIRING / 3 LOCKED / 4 HOLDOVER |
| 16 | u2_drop | Whole messages dropped by full UART2 queue |
| 17 | trig_cnt | Accepted rising edges in trigger mode; not counted in continuous mode |
| 18 | trig_rej | Rejected edges from <0.5 ms glitches or trigger-event queue overflow while the main loop is busy |
This is ASCII order. Binary SYS has a different layout and no baud field; use the binary offsets. HB is an optional vendor diagnostic key=value message; ordinary parsers may ignore it, controlled by HB,0 / HB,1.
Boot & Configuration Reports¶
Factory startup does not emit an information banner; INFO,1 requests concise reports and DBG,1 full reports. Authentication / initialization failures or a nondefault BAUD / MODE rescue prompt may be emitted automatically. Split key=value fields at the first equals sign only: build=rel=1 has value rel=1.
| Message | Contents |
|---|---|
| SPNVBOOT | Product, fw, imus, frame, proto, baud, build; rel / bl / auth / halt / bind describe build and validation |
| SPNVRESET | rcon plus POR, BOR, WDTO, SWR, EXTR(MCLR), CM; power-on commonly POR,BOR |
| SPNVAUTH / SPNVBIND / SPNVPUB | auth=1 / ok=1 is normal; sn is an 18-hex-digit device serial; other fields are diagnostic |
| SPNVINIT,1 / 2 / 3 | Per-IMU OK / FAIL; DBG may include individual sensor serials |
| SPNVINIT,B | Barometer mode, odr, osr_p / osr_t, iir, conv_us and overruns. conv_us gives estimated / last measured / maximum measured values; measured values include 1 ms polling effects |
| SPNVNVM | saved, stored parameters, nvm_err or backend=none; persistent configuration |
| SPNVCFG | Active RAM settings; saved=1 does not mean all active values are saved. out 0 / 1 / 2 / 3 = none / raw / fused / both |
| SPNVCAL | Three ab / ak records plus W with g / a weights, saved and lever; lever=1 means fixed lever-arm compensation is active |
| SPNVU2 | out, mode, baud, drop, pps, pps_state, pps_err_ppm; available through CFG / INFO |
| SPNVSPI | SPI mode and transaction / delivery / short-read / drop counters; see SPI chapter |
| SPNVNVM,boot | For saved nondefault BAUD / MODE, starts at 460800 ASCII with factory_window_ms=500 for FACTORY,1 before applying saved values |
| SPNVDBG / SPNVHB | Vendor diagnostics / key=value; may be ignored by ordinary hosts |
Initialization Error Codes¶
| Source | rc | Reason |
|---|---|---|
| IMU | −2 | No response, MISO all 0 / 1 |
| IMU | −3 | CRC |
| IMU | −4 | Response address mismatch |
| IMU | −5 | Write verification failed |
| IMU | −6 | Abnormal post-start status |
| IMU | −7 | Other error |
| BARO | −1 | I2C NACK |
| BARO | −2 | I2C timeout |
| BARO | −3 | Chip ID mismatch |
| BARO | −4 | NVM error |
| BARO | −5 | OSR / ODR invalid |
BARO overruns counts a new trigger arriving before the previous conversion finished; that conversion is skipped. Normally zero.
Fault Events¶
| Message | Condition / Action |
|---|---|
| SPNVHALT | Validation failed; reports about every 2–3 s, stops measurement but accepts INFO / BOOT / FACTORY. Temporary IMU access failures retry about every 3 s; contact support if persistent |
| SPNVHEAL | imu_reinit, mask, n. Reinitializes all three after CRC+timeout errors ≥100/s for three consecutive seconds, or initialization failure; at least 30 s between recoveries |
| SPNVSTALL | Main loop stalled >300 ms; includes where / name. Retain report for diagnosis |
| SPNVTRAP | CPU address, stack or arithmetic exception; reports code / name / INTCON3–5 then halts. Contact support |
For support, include INFO,1, DBG,1, CFG,1 and raw recordings. Contact ethan@robotlab.com.tw.
4. Complete Boot and Event Formats¶
The following follows protocol section 4. <...>, ... and XX are placeholders; [...] is optional, and actual lines end in CRLF. Split key=value only at the first equals sign and allow unknown trailing fields.
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 marks release, bl includes bootloader; listed factory-build flags are all 1. build=rel=1 has value rel=1.
SPNVRESET¶
$SPNVRESET,rcon=0x<8hex>[,POR][,BOR][,WDTO][,SWR][,EXTR(MCLR)][,CM(config mismatch)]...*XX
RCON decoding; multiple reasons can coexist. Normal power-on often reports POR,BOR.
SPNVDBG¶
$SPNVDBG,<free_text>*XX
DBG contains vendor diagnostic text. Its fields do not have a published fixed layout.
SPNVAUTH / SPNVBIND / SPNVPUB¶
$SPNVAUTH,auth=<0/1>,sn=<18hex>*XX
$SPNVBIND,<key>=<value>[,...]*XX
$SPNVPUB,<key>=<value>[,...]*XX
AUTH uses the format shown above. For BIND/PUB, only the key=value style is published; the lines above illustrate that structure. auth=1 and ok=1 indicate normal status; sn is an 18-digit hexadecimal device serial.
SPNVINIT (IMU)¶
$SPNVINIT,<id>,OK*XX
$SPNVINIT,<id>,OK,sn=<str>,...*XX
$SPNVINIT,<id>,FAIL,rc=<rc>,crc_err=<n>*XX
The formats above show a concise INFO success report, a detailed DBG success report, and a failure report that is always sent. sn identifies each IMU. See the rc table on this page.
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 is estimate / last measured / maximum measured, including 1 ms polling in measured values. overruns counts skipped conversions when the previous one is unfinished; normally zero.
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 reports NVM presence and stored settings; these are alternative forms, not one fixed record.
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
The device sends the first format once per IMU, followed by the W line. ab is m/s² with 5 decimals; ak has 6 decimals. saved marks NVM calibration, lever=1 active lever-arm compensation.
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 means 3/4 decimals. trig appended in fw 0.9.0, azb in 0.9.1. saved=1 does not mean all RAM values are saved.
SPNVNVM,boot¶
$SPNVNVM,boot,baud=<n>,mode=<m>,factory_window_ms=500*XX
When saved BAUD/MODE settings differ from the defaults, the device accepts FACTORY for 500 ms at 460800 in ASCII before switching to the saved settings. It skips this wait when no settings are saved or when they match the defaults.
SPNVHALT¶
$SPNVHALT,<reason>*XX
Repeats about every 2–3 s; measurement stays off but INFO/BOOT/FACTORY remain available. Temporary IMU access failures retry about every 3 s.
SPNVHEAL¶
$SPNVHEAL,imu_reinit,mask=<bitmask>,n=<count>*XX
mask bits 0–2 identify IMU1–3; n is recovery count. Any sensor with CRC+timeouts ≥100/s for 3 s, or failed init, reinitializes all three; minimum interval 30 s.
SPNVSTALL¶
$SPNVSTALL,main stuck at where=<w>(<name>) for >300ms*XX
Main-loop stall over 300 ms.
SPNVTRAP¶
$SPNVTRAP,code=<n>,<name>,INTCON3=0x<hex>,INTCON4=0x<hex>,INTCON5=0x<hex>,halted*XX
CPU exception followed by halt; retain code, name and registers for diagnostics.
SPNVU2¶
$SPNVU2,out=<combination>,mode=ascii|binary,baud=<n>,drop=<n>,pps=<0/1>,pps_state=<n>,pps_err_ppm=<x>*XX
UART2 and PPS report accompanying CFG/INFO; trailing fields may be added.
Source document:IMU600-V2 Communication Protocol v1.1 · PDF pages 10–16