Bit-banged 100 MBit/s Ethernet Transmission On Raspberry Pi Pico

The Raspberry Pi Pico is a very capable board, but it’s still a surprise to see bit-banged 100 MBit/s Fast Ethernet implemented on one. [Steve]’s Pico-100BASE-TX library allows an RP2040 (or RP2350) microcontroller to stream data at roughly 11 Mbyte/s, enough to implement 100 MBit/s Fast Ethernet transmission.

We’ve seen 10BASE-T implemented on a Pico, but it takes a lot more than just shoveling bits faster to get 100BASE-T working. 10BASE-T uses two voltage levels and Manchester encoding, but 100BASE-T uses three voltage levels, which [Steve] cleverly implemented on the Pico with two GPIOs, and far more complex encoding. Check out the repository’s README for details as well as a couple example applications.

[Steve] tells us that to the best of his knowledge, this is the first bit-banged 100 MBit/s Ethernet implementation using a microcontroller. It’s transmit-only — reception being an entirely different beast — but it’s possible some enterprising soul might find a solution. If you do, be sure to let us know all about it!

5 thoughts on “Bit-banged 100 MBit/s Ethernet Transmission On Raspberry Pi Pico

    1. It says “transmission” in the title, but “transmit” in the body? Where’s the issue, exactly?

      No, it’s not send/receive, but it’s still quite an accomplishment (worthy of HaD I’d say), and not being misrepresented here.

    1. MByte/s is correct, you indeed can hit full 100BASE-TX wirespeed by transmitting maximum-MTU Ethernet frames back to back with only the requireed 12 byte interframe gap in-between. (Okay, because the way the 4b5b symbols are packed in 32-bit words, the interframe gap is currently 3 bytes longer than it needs to be, but that doesn’t make much of a difference).

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.