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!

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

    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).

      1. Yes, I don’t understand why. I thought I would bring people together to help me develop the idea, make a small test program, write bindings for MicroPython, transfer everything to RP2350…
        I ended up telling myself that it was easier to buy a Wiznet module, as there was a lot of advertising for them at the time.
        It’s a bit of a regret, as it’s an interesting project that uses the PIO and has the same IP stack as the W version of the Picos. (What’s developed for the Picos W can be used with this Ethernet implementation without too many modifications). The whole thing only used 3 pins.
        I don’t publish my Pico-based assemblies and software much anymore. I thought it was a pretty good idea, but no one was interested.

          1. I wasn’t looking for acclaim, I just wanted to do something useful that people would find a use for and participate in developing. The Pico is a really great platform, and I thought it was awesome to be able to get Ethernet connectivity for the price of an external transformer (which you can unsolder from an old motherboard or network card). A hack, eh?

  1. Hey this one is from Steve Markgraf! He got us https://hackaday.com/2024/06/01/use-that-one-port-for-high-speed-fpga-data-export/ 180MB/s data capture using $12 Ms2130 USB 3.0 HDMI dongle and recently (start of 2025) added 175MB/s pico2 support https://github.com/steve-m/hsdaoh-rp2350

    And now this lovely hack! Sadly 100Mbit might be the limit for bitbanging ethernet. While 1Gbit uses easily reachable 125MHz clock it also does full duplex requiring echo cancellation and I dont see an easy way around external PHY. The next challenge is implementing pico GRMII PHY support for that sweet $1 RTL8211 1Gbit. I havent seen that done yet.

  2. Since this is TX only I think the real use for such an amazing device was not mentioned. It can be used for logging only to a secure central log server. If there is no way to RX packets from a logging server, there is no easy way to own that server remotely :)

Leave a Reply to Mike RCancel 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.