3. Status and Statistics

For IMU600-V2 / firmware 0.11.2 / GUI v1.6.1.

Follows chapter 3, pages 10–14 of Protocol v1.1. Defaults provide three STAT lines, one FUS and one SYS per second. Since fw 0.4.3, all counters are captured together, then sent in later loop iterations as STAT1 → STAT2 → STAT3 → FUS → SYS → HB (when enabled). Different transmission times still represent one snapshot.

Numbering starts after the message name. <...> and XX are placeholders; [...] marks optional fields and is not transmitted. Lines end in CRLF; XOR covers ASCII bytes between $ and *. Request an immediate set with $SPNVCMD,STAT,now.

3.1 $SPNVSTAT — Individual IMU Statistics (One Line per IMU)

$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>]*XX
# Field Description Normal / Reference
1 id IMU number 1–3 1–3
2 dry Cumulative DRY interrupts, about +1470/s; raw sampling count ≈1470/s
3 out Output count; per-second increase should approach RATE RATE/s
4 crc_err Internal SPI response CRC errors; normally 0 0
5 frame_err SPI responses carrying S / CE / IDS sensor flags; not communication errors 0
6 spi_timeout Internal SPI timeouts; normally 0; 100 µs timeout from fw 0.10.6 0
7 dropped Sampling/output queue drops; normally 0 0
8 dcnt_skip Discontinuous sensor sample counter: possible missed / repeated reads; normally 0 0
9 dry_timeout No DRY for >100 ms: 0 no, 1 yes 0
10 dry_kicks Extra reads to clear DRY held high; manual normal example stays at 1 after boot 1 after startup
11 dry_pin Current DRY level 0 / 1, usually 0 Usually 0
12 isr_us_max Maximum DRY ISR execution time (µs). ≈≤100 µs
13 isr_us_last Latest DRY ISR execution time (µs). ≈≤100 µs
14 isr_cpu Last-second ISR CPU percentage for this IMU; reference about 13% ≈13%
15 resync Output-boundary resynchronizations; normally 0 0
16 read_retry fw 0.10.6+, ASCII only; immediate retries after initial CRC failure 0
17 read_bad fw 0.10.6+, ASCII only; raw samples discarded after failed retry 0

dry and out accumulate since boot; use differences between snapshots for per-second values. dry_timeout is a current state, not a cumulative count. In fw 0.10.6 the internal SPI timeout is 100 µs, with interrupts briefly masked during transfer. read_retry / read_bad were appended to ASCII in fw 0.10.6 and are absent from Binary STAT; allow omitted or future trailing fields.

3.1.1 Investigating Increasing frame_err

The GUI’s “sensor flags” is frame_err: SPI response frames carrying S1:S0≠00, CE or IDS, not independent fault events or a direct link-quality metric. Seven responses form a raw sample, so one condition may add seven. A roughly 5 ms violent motion adding 52 is not 52 independent events. Check crc_err / spi_timeout (GUI “SPI errors”) for communication faults.

PDF Bench Test: fw 0.4.3, 2026-10-08 crc_err / spi_timeout frame_err
Stationary 0 0, no increase
Gentle motion within range 0 0, no increase
Violent motion, peak >300 °/s 0 +52 on each IMU (saturation)
Cause / status All Three? Interpretation / Action
S_SAT / 16 Usually; shared motion Limits are ±300 °/s / ±156.9 m/s² including prefilter peaks, so averages within range can still hide saturation. Δθ / Δv may be too small. For repeated normal-operation flags, inspect motor/propeller/engine vibration and isolation; frequent exceedance calls for a higher-range gyro.
S_INIT / 32 Yes About 250 ms after power-on/REINIT. A short initial increase then stable count is usually normal. Recurrence during operation suggests checking reset from supply dips. Data is unreliable.
S_ERROR / 8 + IDS / 4 All three: shared conditions; one: local sensor Self-test fault, unreliable data. Inspect 3.3 V / VDDIO noise, dips and temperature. If persistent after REINIT, inspect soldering and sensor hardware.
CE / 2 — Invalid sensor command; data itself remains valid but fusion rejects by error mask. Unexpected in normal use; report to the vendor.
  1. First check for rising crc_err / spi_timeout; if present, inspect communication and timing.
  2. Determine whether all three or only one are affected; shared symptoms suggest motion, vibration, shared power or temperature.
  3. Send $SPNVCMD,OUT,raw and distinguish 16, 32 and 8 / 12 using 2.1.1 status.
  4. Fusion normally excludes (status & 0x7F) ≠ 0; PPS is not an error. If all three are bad, it falls back to all three. Continued FUSED output does not prove health; inspect RAW status too.

3.2 $SPNVFUS — Fusion Statistics

$SPNVFUS,<outputs>,<rej1>,<rej2>,<rej3>,<incomplete>,<degraded>,<gth>,<ath>*XX
# Field Type / Decimal Places Unit Description
1 outputs Integer — Cumulative fused output count.
2–4 rej1 / rej2 / rej3 Integer — Cumulative rejected intervals per IMU due to error flags or persistent deviation; excludes PPS. Should not increase during normal use or ordinary handheld motion.
5 incomplete Integer — Cumulative outputs generated before all three IMUs arrived.
6 degraded Integer — Cumulative instances with fewer than two usable IMUs.
7 gth Float, 3 decimals °/s Configured gyro rejection threshold.
8 ath Float, 3 decimals m/s² Configured acceleration rejection threshold.

3.3 $SPNVSYS — System Statistics

$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>*XX
# Field Description
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

Sustained uart_drop increases usually mean UART1 traffic exceeds bandwidth; reduce RATE/content or use binary/higher baud. baro_samples defaults to about +50/s; baro_stale is a current state, not a cumulative count. pps_state / u2_drop are available from fw 0.8.0 and trig_cnt / trig_rej from fw 0.9.0.

This is the ASCII field order. Binary SYS differs, uses numeric out_mode / proto_mode and has no baud field; follow the binary packet tables.

3.4 $SPNVHB — Diagnostic Heartbeat

Provides vendor diagnostics as key=value pairs. Ordinary applications may ignore it; when enabled, it is emitted once per second. The protocol PDF does not publish fixed key names, ordering or per-field types, so it is not a fixed-column packet like STAT / SYS.

The following is structural notation only: <key>, <value> and [...] are not literal device output and do not imply a published diagnostic-key list.

$SPNVHB,<key>=<value>[,<key>=<value>...]*XX
Command Description
$SPNVCMD,HB,0 Disable diagnostic heartbeat.
$SPNVCMD,HB,1 Enable diagnostic heartbeat.

Document discrepancy: protocol section 3.4 says “once per second by default,” while the user manual parameter table lists HB default 0. The defaults conflict; set HB,0 or HB,1 explicitly and do not use heartbeat presence to determine whether measurement output is working.

If retaining diagnostics, validate line XOR first and retain key=value content. Preserve or ignore unknown keys rather than assigning fixed indices. See host parsing and integration for ASCII parsing.


Source document:IMU600-V2 Communication Protocol v1.1 · PDF pages 10–14

Read Source Pages · Document Crosswalk and Differences

Category overview · All setup guides