Skip to content

seed the radio's noise per node, and say what the chip binned - #17

Merged
A13xB0 merged 1 commit into
mainfrom
radio-noise-and-diagnostics
Sep 3, 2026
Merged

A13xB0 merged 1 commit into
mainfrom
radio-noise-and-diagnostics

Conversation

@A13xB0

@A13xB0 A13xB0 commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Firmware takes its entropy from the radio: RadioLib reads REG_RANDOM_NUMBER_0
eight times for a random byte, MeshCore seeds its PRNG with it and derives its
identity from the PRNG. The model's random-number registers were backed by
storage, so the byte was always zero and every emulated node came up with the
same keypair
- two different nRF52 boards reported one public key.

  • MESHBENCH_NOISE_SEED seeds this chip's receiver noise, per node. Seeded
    rather than sampled so a run stays reproducible.
  • Frames binned into a deaf receiver are counted and reported at exit. That
    accuses this side rather than the firmware, and the two look identical from
    outside.
  • Traced SPI transactions carry a timestamp, so a command stream can be lined
    up against DIO1 and the engine's events.

Picks up the model's matching fixes via the submodule.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6

Three things the chip model needed a host for.

A seed for its receiver noise, from MESHBENCH_NOISE_SEED. Firmware takes its
entropy from the radio and derives its identity from it, so a chip that answers
the same numbers to every node hands every node the same keypair - two nRF52
boards really did report one public key. Seeded rather than sampled so a run
stays reproducible.

A count of frames handed to a chip that was not listening and binned. It
accuses this side rather than the firmware, and a node that hears everything and
forwards nothing looks identical either way, so it is worth a line at exit.

And a timestamp on each traced SPI transaction. The question a trace gets asked
is almost always "what did the firmware do after DIO1 went high", and an
unstamped list of commands cannot be lined up against the pin, the chip's own
state, or the engine's events.

Also picks up the model's noise fixes, which is what the seed is for.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6
@A13xB0
A13xB0 merged commit d270f07 into main Sep 3, 2026
2 checks passed
@A13xB0
A13xB0 deleted the radio-noise-and-diagnostics branch September 3, 2026 21:54
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.

2 participants