Docs: record E0-threshold bench PASS (E0000105) + corrected counter semantics
The display observation recalibrates the counters: $3184 = give-up cycles (once per exhausted retry sequence, not per retransmit), $3185 = teardowns of any reply cycle needing at least one retransmission — the counter behind a lone E0000001. Also recorded in the error-handling inventory: 5 retransmits per cycle, reply-await arms only after the complete frame, NAK forces exactly one counted retransmit, late ACKs cannot rescue a cycle. (Previous commit's doc edits had silently missed their anchors; applied properly this time.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,15 +7,22 @@ namespace RioSerialMonitor;
|
||||
/// E0-threshold firmware verification (rio-firmware `--e0thresh` images).
|
||||
///
|
||||
/// Two phases against a DTR-reset board (counters zeroed, display F0000000):
|
||||
/// - Phase A (gate hold): analog requests whose reply we ACK only after the
|
||||
/// first retransmit — each event increments the board's retransmit
|
||||
/// counter ($3184) by a small sub-threshold amount, calling the display
|
||||
/// renderer every time. The _e0t5 gate must keep the display F0000000;
|
||||
/// stock firmware paints E0... at the first retry.
|
||||
/// - Phase B (flip): analog requests we never ACK — the board runs the full
|
||||
/// retry cycle (observed: 5 retransmits) and gives up ($3185++, RESTART
|
||||
/// $FE). The counters cross the threshold and the display must flip to
|
||||
/// the E0 readout, which the tool predicts from observed traffic.
|
||||
/// - Phase A (gate hold): analog requests answered NAK-then-ACK — NAKing
|
||||
/// the COMPLETED reply frame forces exactly one immediate retransmit,
|
||||
/// ACKing that retransmit ends the cycle. Each event increments the
|
||||
/// teardown counter $3185, invoking the display renderer sub-threshold.
|
||||
/// The _e0t5 gate must keep the display F0000000; stock firmware paints
|
||||
/// E0... at the first event. (Responses must follow the complete frame:
|
||||
/// the board arms its reply-await only when the frame finishes sending,
|
||||
/// and once the first retry timeout lapses the cycle runs blind.)
|
||||
/// - Phase B (flip): analog requests we never ACK — the board runs the
|
||||
/// full retry cycle (5 retransmits), gives up ($3184++, RESTART $FE)
|
||||
/// and tears down ($3185++). $3185 crosses the threshold; the display
|
||||
/// must flip to the E0 readout the tool predicts from observed traffic.
|
||||
///
|
||||
/// Bench 2026-07-19 (9600 e0t5 chip): PASS — display held F0000000 through
|
||||
/// the handshake and all four phase-A teardowns, flipped exactly at the
|
||||
/// 5th teardown to E0000105 ($3187=00, $3184=01, $3185=05).
|
||||
///
|
||||
/// dotnet run --project tools/RioSerialMonitor -- --e0test [port]
|
||||
/// [--baud rate] [--hold n] [--flip n]
|
||||
@@ -111,7 +118,7 @@ internal static class E0Test
|
||||
{
|
||||
buffer.Add(tmp[i]);
|
||||
// Frame tracking: respond only once the FULL reply
|
||||
// frame is on the wire — the board arms its
|
||||
// frame is on the wire � the board arms its
|
||||
// reply-await when the frame finishes sending; a
|
||||
// response mid-frame is ignored.
|
||||
if (frameCountdown > 0)
|
||||
|
||||
Reference in New Issue
Block a user