Files
micheleandClaude Sonnet 5 77e7623280 BLE provisioning: drop PoP (Security0); bump nvs partition 24 KiB -> 64 KiB
BLE provisioning used protocomm Security1 with the device serial
number as proof-of-possession, on the reasoning that pairing should
require reading something off the physical unit. In practice the
companion app has no easy way to read that serial without a manual
step, so it was deriving the PoP from the BLE advertising name
instead (DigiRadio-XXXX -> XXXX) -- but that name is broadcast openly
to any scanner, so it was never actually secret. The PoP added
app/firmware coupling (an exact-match string derived independently on
both sides) without adding real secrecy, and a mismatch there was
silently blocking provisioning entirely. Switched to Security0 (no
PoP, no encryption) -- the same trust level as the SoftAP setup path
this runs alongside, which is already an open network.

Separately, bumped the nvs partition from 24 KiB to 64 KiB. The small
original size was a suspected contributor to intermittent
NvsAudioProfileStore::saveProfile() store_failed under this project's
accumulated write traffic (wifi creds, station_list,
audio_profile_json, last_preset) -- flagged but not applied in an
earlier commit today. otadata/nvs_keys/phy_init shift forward to make
room; they still fit before ota_0's existing 64 KiB alignment
boundary, so ota_0/ota_1/dsp stay at their original offsets. Applied
via idf.py erase-flash flash (required whenever partition offsets
move) and verified: fresh boot enters SoftAP + BLE setup mode with no
partition-table warnings, and the previously-saved FM ANTCAP
calibration (stored in the 24AA025E48 EEPROM, unaffected by the NVS
partition change) still applies automatically after re-provisioning
Wi-Fi.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178rASQ6ZETPMUamvpoR2KR
2026-08-19 17:41:44 +02:00

1.1 KiB

1# DigiRadio partition table (16 MB flash — ESP32-S3-WROOM-1)
2# ota_0 + ota_1: dual OTA app slots (equal size, 64 KiB aligned).
3# dsp: updatable ADAU1701 program blob (task 3.1).
4# nvs_keys: NVS encryption keys (secure-store slice).
5# First flash after this layout: idf.py erase-flash flash (wired), not OTA.
6# nvs: bumped 24 KiB -> 64 KiB (2026-08-19) — the small original size was a
7# suspected contributor to intermittent NvsAudioProfileStore::saveProfile()
8# store_failed under this project's accumulated write traffic (wifi creds,
9# station_list, audio_profile_json, last_preset). otadata/nvs_keys/phy_init
10# shift forward to make room; they still fit before ota_0's existing 64 KiB
11# alignment boundary (0x20000), so ota_0/ota_1/dsp offsets are unchanged.
12# Name, Type, SubType, Offset, Size, Flags
13nvs, data, nvs, 0x9000, 0x10000,
14otadata, data, ota, 0x19000, 0x2000,
15nvs_keys, data, nvs_keys, 0x1b000, 0x1000,
16phy_init, data, phy, 0x1c000, 0x1000,
17ota_0, app, ota_0, 0x20000, 0x400000,
18ota_1, app, ota_1, 0x420000, 0x400000,
19dsp, data, 0x40, 0x820000, 0x40000,