ESP32 CSI Node firmware v0.6.9
Tag: v0.6.9-esp32
Date: 2026-05-23
Branch: adr-110-esp32c6 (PR #764)
ADR: ADR-110 §A0.11 + §A0.12 — sync-packet wired
What's new vs v0.6.8
Sync packet now emits from every CSI node. New 32-byte UDP packet
(magic 0xC511A110) carries the mesh-aligned epoch + sequence
high-water for the host aggregator to pair against incoming CSI
frames. Closes the §A0.11 wiring gap so downstream ADR-029/030
multistatic CSI fusion can recover mesh time for every frame.
Field layout (LE little-endian, total 32 bytes):
| Offset | Field |
|---|---|
[0..3]
| magic 0xC511A110 (distinct from CSI frame magic 0xC5110001)
|
[4]
| node_id |
[5]
| proto_ver 0x01
|
[6]
| flags (bit 0 = leader, bit 1 = sync valid, bit 2 = smoothed_used) |
[7]
| reserved |
[8..15]
| local esp_timer_get_time() (u64)
|
[16..23]
| mesh-aligned epoch = local + EMA-smoothed offset (u64) |
[24..27]
| high-water CSI sequence (u32) — pairing key |
[28..31]
| reserved |
Live verified in WITNESS-LOG-110 §A0.12: both C6 boards on the
bench emit at the design cadence, follower's local − epoch matches
the §A0.10 measured offset within 285 µs.
New operator knob
CONFIG_C6_SYNC_EVERY_N_FRAMES (default 20). At the bench's observed
10 fps CSI rate that's ~2 s between sync packets. Raise to 50 for
~5 s (less wire overhead, slower convergence); lower to 5 for ~0.5 s
(heavier wire, tighter multistatic alignment window).
Build artifacts
| Target | Binary | Size | Partition slack |
|---|---|---|---|
esp32s3 (8 MB)
| esp32-csi-node-s3-8mb.bin
| 1094 KB | 47 % |
esp32c6 (4 MB)
| esp32-csi-node-c6-4mb.bin
| 1019 KB | 45 % |
SHA-256 sums in SHA256SUMS.txt. Backwards-compatible at the wire
level: old aggregators that don't know about magic 0xC511A110 drop
the new packets on the magic-mismatch path that already exists for
the CSI parser.
What's still on the table
- Host-side parser for the new sync packet in
wifi-densepose-sensing-server— pairs(node_id, sequence)
across the two UDP streams to recover mesh-aligned timestamps per
CSI frame. Outside the firmware tree, future release. - IDF v5.4 soft-AP HE/TWT-Responder advertise (WITNESS-LOG-110 §A0.6) —
no public API on C6 in this IDF release. Blocked on upstream. - 5 µA LP-core hibernation measurement (§B4) — code path complete,
needs INA226/Joulescope on the bench.