Skip to content

Document MMS NAND logging semantics: LENGTH's three moods, async GC, consuming readouts#12

Open
lkasso wants to merge 1 commit into
mainfrom
mms-logging-semantics
Open

Document MMS NAND logging semantics: LENGTH's three moods, async GC, consuming readouts#12
lkasso wants to merge 1 commit into
mainfrom
mms-logging-semantics

Conversation

@lkasso

@lkasso lkasso commented Jul 20, 2026

Copy link
Copy Markdown
Member

Writes down what eight hardware debugging sessions proved about MMS (logging revision 3) NAND behavior — knowledge that previously existed nowhere in the spec and bit even the canonical apps (which were merely human-paced enough to hide it):

  • LENGTH's three moods: flash+RAM while logging is enabled · flash-only after stop (the final-page commit takes seconds, silently) · sentinel/stale for up to ~60 s after a clear — including the trap that a stable zero can mean "empty but dirty."
  • Drop Entries is asynchronous and triggers GC; the documented 0x0D completion notification is not reliably delivered on 1.7.x.
  • A session started during GC records nothing — loggers arm with valid IDs, sensors run, no error, no data. The critical machine-paced-host trap.
  • Readout page confirms permanently null entries — a completed drain is the only copy.
  • The verified host pattern that sidesteps everything: poll LENGTH rising while logging is enabled after arming (healthy boards confirm in one or two 2 s polls; ~90 s bound for GC-bound boards), and flush + settle before download reads.

Placed at the end of the Logging module section, before the Timer module. Merging auto-deploys to docs.mbientlab.com.

🤖 Generated with Claude Code

…consuming readouts

Field-verified on MMS firmware 1.7.x during multi-device host development:
byte-identical command sequences succeed or fail purely on timing and
prior flash state, because the NAND write page and background garbage
collector are invisible to the wire protocol. Human-paced hosts never
noticed — navigation delays provided the settling time by accident;
machine-paced hosts hit every mechanic. Documents the three LENGTH
states, the asynchronous Drop Entries + unreliable 0x0D completion, the
records-nothing-during-GC trap, entry consumption by readout confirms,
and the verified host pattern (poll LENGTH rising while enabled) that
sidesteps all of it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant