Files
wadamesh/tdisplay_p4
Kaj SchittecatandClaude Opus 4.8 099ccd8e3c p4: core-0 storage dispatcher + the completed #167 experiment matrix
Follow-up to 3bf56cd, driven by the (correct) challenge that "SD writes upset
the panel electrically" could not be the whole story when tile writes never
flash and other P4 firmwares use their cards freely. The completed on-device
matrix now separates two distinct mechanisms:

  M1  An SD write EXECUTING on core 1 (where display.begin() allocated the DSI
      frame-restart ISR, and where the Arduino loop task runs) masks that
      core's interrupts inside the SDMMC/FATFS critical sections long enough
      to drop a display frame. Proven: 80 contact saves to SD from core 1
      flash every time; the identical 80 saves hopped to core 0 never flash.
      NOT electrical -- the challenge was right.

  M2  An SD write CONCURRENT with live UI rendering still flashes even from
      core 0 (manual add/delete flows pump LVGL while the hopped write runs;
      the write-open trace shows those runs performed only correct core-0
      writes and flashed anyway). The same manual flow with the card mounted
      but ZERO SD writes (internal LittleFS store) is clean.

Shipped design therefore stays: hot store on internal LittleFS (immune to both
mechanisms, verified across every flow), SD for tiles/bulk. Tiles' long-standing
immunity is consistent: brief core-0 writes vs the store's long ones.

New in this commit, kept for good:
- p4StorageCall (DataStore.cpp): a core-0 storage task; every hot write entry
  (saveContacts/saveChannels/savePrefs/blobs, history segs, threads file) hops
  onto it, blocking the caller -- semantics unchanged, execution core moved.
  With the internal store this is still wanted hygiene: no storage write ever
  runs on the render core again.
- WADA_SD_STORE_TEST build gate: puts the store back on the SD card for future
  M2 investigation (known to still flash on manual flows; do not ship).
- TDP4_POKE_TRACE now also logs every write-open with its issuing core ([SDW]),
  which is what pinned M2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 15:37:05 +02:00
..