pico-10base-t-rs is a software 10BASE-T Ethernet NIC and wireless router for the Raspberry Pi Pico 2 W, on the RP2350's dual Hazard3 RISC-V cores in pure no_std Rust (no embassy-rp).
What's new since v0.2.0
RX bulk throughput: 96 → ~310 KB/s at stock MTU (~3×)
Two findings, three commits:
- ACK pacing (
31f538d,df9d067) — the baseline's 27–33 % "FCS fail" under inbound bulk was largely delayed-ACK × tail-loss-probe collisions on the half-duplex link, not decode error. Immediate ACKs (set_ack_delay(None)) + a 2-segment advertised window lifted RX-of-bulk 96 → ~200 KB/s. - The "decode cliff" root cause (
212662d) — what looked like a decoder quality ceiling above ~1 kB on-wire was DMA-starved sample loss: running the full Manchester decode inside theDMA_IRQ_0handler could overrun the 2.18 ms half-buffer period, leaving the DMA un-rearmed → PIO FIFO overflow → silently truncated frames. The pipeline is now split: the IRQ only captures each filled half into a 6-slot image ring and re-arms in bounded time; core 1 decodes in thread context. Full-MTU inbound now decodes at ~0.2 % fail, themss-clampworkaround is obsolete, and the old sustained-full-MTU wedge stopped reproducing (the hardware watchdog stays as a backstop).
The transport is now a library crate
The package is lib + bin (03e2e47): src/lib.rs exposes the 10BASE-T transport core (eth_tx/eth_rx/eth_rx_dpll/eth_mac, manchester, crc, plus the Hazard3 core-1 launch, the picotool USB reset interface, and PIO helpers) so other projects can take it as a Cargo dependency instead of vendoring files. The router application in src/main.rs is the in-tree consumer; pico-remote-probe (a network-attached SWD debug probe) is the first external one.
- New narrow
cyw43-phyfeature: the smoltcpphy::Deviceadapter over the cyw43 radio (cyw43 + embassy-net-driver only — no executor stack) for consumers that bring their own runtime. - All experiment/feature flags unchanged; the default, NIC, and router binaries build as before.
Docs
README + docs/performance.md updated for the 2026-06 RX results; README repo layout reflects the lib/bin split.
Highlights
- Bit-bang 10BASE-T TX and RX (PIO + DMA + an edge-tracking DPLL Manchester decoder) exposed as a smoltcp
phy::Device. --features router: cyw43 Wi-Fi AP + L3 forwarding + NAPT between a Wi-Fi LAN and the 10BASE-T WAN.- Measured performance, limitations, and a full engineering log in the README +
docs/.
License: MIT OR Apache-2.0.