ESP32-S3 CSI Firmware v0.6.1
Critical fix: node_id clobber on multi-node deployments
Closes #232, #375, #385, #386, #390.
Users on multi-node deployments reported that every ESP32 node transmitted node_id=1 in UDP frames, despite NVS provisioning showing the correct value. This made multi-node setups indistinguishable downstream.
What changed
Defense-in-depth fix — the firmware now captures node_id into a module-local static at init time, isolating the UDP frame header from any memory corruption of g_nvs_config:
csi_collector_init()capturesg_nvs_config.node_idintostatic uint8_t s_node_idonce at initcsi_serialize_frame()writesbuf[4] = s_node_id— bypasses the global entirely- All other consumers (
edge_processing.c,wasm_runtime.c,display_ui.c,swarm_bridge_init) use the newcsi_collector_get_node_id()accessor - Clobber canary logs
WARNifg_nvs_config.node_iddiverges from the captured value at init — helps isolate the upstream corruption path
Hardware validation (ESP32-S3 on COM8)
| Check | Result |
|---|---|
NVS node_id
| 2 (provisioned)
|
Boot log main:
| Node ID: 2
|
| Defensive capture log | Captured node_id=2 at init
|
csi_collector init log
| node_id=2, channel=5
|
| UDP packets (15/15) | byte[4] = 2
|
| Clobber canary | Quiet (no WARN) |
| App version | 0.6.1
|
| Binary size | 865 KB (54% flash free) |
Binaries
| File | Flash size | Description |
|---|---|---|
esp32-csi-node.bin
| 8MB | Main firmware |
bootloader.bin
| 8MB | Bootloader |
partition-table.bin
| 8MB | Partition table (dual OTA) |
ota_data_initial.bin
| 8MB | OTA data |
esp32-csi-node-4mb.bin
| 4MB | Main firmware (SuperMini) |
partition-table-4mb.bin
| 4MB | Partition table (SuperMini) |
Flash command
python -m esptool --chip esp32s3 -p COM8 -b 460800 \
--before default_reset --after hard_reset \
write_flash --flash_mode dio --flash_size 8MB --flash_freq 80m \
0x0 bootloader.bin \
0x8000 partition-table.bin \
0xf000 ota_data_initial.bin \
0x20000 esp32-csi-node.binFor 4MB SuperMini boards, use esp32-csi-node-4mb.bin and partition-table-4mb.bin with --flash_size 4MB.
SHA-256 hashes
7f943b26...88197f7 bootloader.bin
9e650bf1...54bd43 esp32-csi-node.bin
15c263f6...02b32 esp32-csi-node-4mb.bin
7d2c7ac4...82c62f ota_data_initial.bin
4c2cc4ff...d81f0 partition-table.bin
4c2cc4ff...d81f0 partition-table-4mb.bin
Who should upgrade
All users running multi-node ESP32-S3 deployments. Single-node users are unaffected but the upgrade is safe.