[HN Gopher] Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet
___________________________________________________________________
Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet
Author : chaosprint
Score : 251 points
Date : 2025-10-29 23:21 UTC (23 hours ago)
(HTM) web link (www.elektormagazine.com)
(TXT) w3m dump (www.elektormagazine.com)
| ChuckMcM wrote:
| Fun stuff. You kids don't know how lucky you are to have really
| capable MCU's for just a few bucks. :-)
|
| It is kind of the ultimate "not a TOE[1]" example yet.
|
| [1] TOE or TCP Offload Engine was a dedicated peripheral card
| that implements both the layer 1 (MAC), layer 2 (Ethernet), and
| layer 3 (IP) functions as a co-processing element to relieve the
| 'main' CPU the burden of doing all that.
| nine_k wrote:
| Don't modern NICs do a lot of the same, too?
| tyingq wrote:
| Sometimes it goes the other direction. PCI SSL accelerator
| cards were a thing for a long time before CPUs got faster,
| got various crypto acceleration opcodes, web servers rewrote
| SSL logic in ASM, etc.
| carlhjerpe wrote:
| The fancy Mellanox NVIDIA Connect-X cards have kTLS support
| which offloads encryption to the NIC, Netflix has blogged
| about how they use it to send 100 Gbps encrypted traffic of
| a single box (Their OpenConnect infrastructure is really
| cool).
|
| Old is new again :)
| kragen wrote:
| Or just a few cents! Possibly that will only last until war in
| Taiwan, though, or until it becomes impossible to find anything
| but counterfeits.
| 4gotunameagain wrote:
| Uncertain. The cheap, mass produced commodity ICs are built
| with "ancient" nodes with high yields.
| kragen wrote:
| I think that's probably true for Padauk's PFS150 and
| similar, but I think the 14C/ https://www.lcsc.com/product-
| detail/Microcontrollers-MCU-MPU... and the 9C/
| https://www.lcsc.com/product-detail/Microcontrollers-MCU-
| MPU... are probably fabbed in more recent nodes.
|
| And of course the counterfeit problem has very little to do
| with what node is used to produce the chips; it's a
| question of how effective your society's institutions are
| at keeping fraud under control.
| Dylan16807 wrote:
| https://zeptobars.com/en/read/wch-ch32v003-risc-v-riscv-
| micr...
|
| This page estimates 90nm for the CH32V003, and I found
| another post very roughly estimating 130nm. And a pi pico
| isn't all that fancy either at 40nm.
|
| And should I be very worried about counterfeit
| microcontrollers? It seems like a lot of effort, and like
| it would probably still work.
| kragen wrote:
| There are different levels of "counterfeit".
|
| There's the clearly labeled and advertised GD32F103 style
| clone which is pin-compatible, supports higher clock
| speeds than the original STM32F103, but takes much longer
| to power on and has different analog characteristics,
| maybe some worse; not a problem.
|
| There's the potential case where somebody sells you a
| GD32 telling you it's an STM32, either with the proper
| markings, with the markings sanded off, or with actually
| fake markings. This still might cause no problems, or
| might result in a problem that takes you a long time to
| track down. (Maybe you're unknowingly relying on, say,
| the hypothetical lower power consumption of a clone, so
| when you fab a batch with real STM32s, the product's
| battery life goes to shit.) You can detect this in
| firmware and may be able to come up with workarounds. Or,
| if your vendor is FTDI, they may sneak malware into their
| Microsoft Windows driver and brick your products months
| or years after you've sold them. They've done it twice.
|
| There's the case where the clone is designed to act as
| much like the original as possible, so maybe you can't
| detect the substitution in firmware and can't work around
| whatever problems the counterfeit is causing.
|
| Then there's the case where you ordered 10,000 STM32s in
| a QFN-32 and got 10,000 QFN-32s that say "STM32" on them
| but are actually PICs with a totally different pinout, or
| SRAM, or something else. These will not probably still
| work.
| hunta2097 wrote:
| I can't get my head around it sometimes. I know most end up
| doing duties that a PIC-chip could do but the fact you can get
| a WiFi enabled microcontroller few a few bucks blows my mind.
|
| The IO co-processing on the Pico is so powerful, I hope they
| expand on this.
| nerdsniper wrote:
| It's also not really clear that using some of the more
| powerful chips for simple things is really a "waste" in any
| reasonable sense of the word. The packaging of a PIC/CH32 is
| probably the majority of its cost and environmental
| "footprint".
|
| An RP2040 is not much more physical material.
|
| An ESP8266/ESP32 is rather bit more material, but still not
| egregious.
| HeyLaughingBoy wrote:
| Right? Especially when I remember paying $20 each for an
| 8-bit microcontroller with less than 1k EPROM.
| kace91 wrote:
| >Fun stuff. You kids don't know how lucky you are to have
| really capable MCU's for just a few bucks. :-)
|
| Any suggestions for people not used to tinkering with hardware?
| I would like to play I think, but I have a lack of imagination
| regarding potential projects/goals.
| bux93 wrote:
| I have plenty of ideas, I'm just super lazy!
|
| I'd like to hook up a rain sensor to a skylight to close it
| when it rains (needs a little motor, too), and then also hook
| it up to weather forecasts.
|
| I currently have to switch on my TV, surround set and a
| laptop, and then push multiple buttons to switch to/from a
| firestick. I'd like to automate that, so I can just switch it
| on/off and switch the source easily. Also if the system is in
| an unknown state (tv on, but using the incorrect HDMI input
| and the surround set if switched off, etc.), which is what
| the naive solution using a "fingerbot" and a IR blaster
| hooked up to godawful tuya stuff doesn't do.
|
| Build a GPS-synchronized flip clock.
|
| Add remote control door opening without destroying my flat's
| intercom system.
|
| Mostly kinda boring home automation stuff, but would be worth
| it for tinkering.
| ficklepickle wrote:
| > Add remote control door opening without destroying my
| flat's intercom system.
|
| Oh hey, I made that[0] at a previous apartment! It sat on
| my LAN and I'd VPN in if I was out of wifi range.
|
| I struggle to find time/motivation for stuff like that
| these days. I was contracting back then and had downtime
| between jobs.
|
| [0] https://github.com/jeremy21212121/doorman-building-
| arduino
| ChuckMcM wrote:
| I can recommend a 'Hacker Boxes'[1] subscription. It's
| $44/month currently, every month you'll get all the parts to
| build some gizmo or project and a full list of instructions.
| The prerequisites are that you know how to solder and have a
| soldering iron, and have a computer you can run the Arduino
| IDE on (even a Raspberry Pi can do that these days).
|
| If you don't know how to solder the Hacker Boxes folks have a
| soldering workshop kit that includes an iron[2], but many
| maker spaces will do soldering clinics. Soldering irons are
| available as cheap[3] and more expensive[4] (and
| ludicrous[5]). The Arduino IDE runs on pretty much anything
| (Linux, MacOS, Windows).
|
| [1] https://hackerboxes.com/
|
| [2] Soldering Workshop --- https://hackerboxes.com/collection
| s/subscriptions/products/s...
|
| [3] $13 iron from Amazon ---
| https://www.amazon.com/dp/B09DY7CCW5
|
| [4] ~$150 soldering station ---
| https://www.amazon.com/dp/B077JDGY1J?th=1
|
| [5] $1000+ Metcal station ---
| https://www.qsource.com/itemdetail/?itemCode=MX-5210-M020
| ssl-3 wrote:
| "Play" implies a lack of seriousness.
|
| To that end:
|
| 1. Blink an LED (this is more rewarding than it seems it
| should be, because it proves that the toolchain works)
|
| 2. Learn to fade that LED on and off instead of blink
|
| 3. Learn to make an RGB pixel using red, green, and blue LEDs
| and some tissue paper
|
| 4. Realize that's kind of limiting, and use a WS2812B LED
| pixel instead
|
| 5. Notice that there's whole panels of WS2812B available
|
| 6. Buy one. Make it display dumb memes or emojis or dickbutts
| or whatever.
|
| 7. Add a web interface.
|
| 8. Give it a domain name.
|
| 9. Aim a camera at it, fire up a twitch stream, send the link
| to HN, and we'll spend a few hours or days shitposting on
| your little video wall
|
| 10. ???
|
| 11. (there is no profit. it's supposed to be fun, right?)
| ChuckMcM wrote:
| I just have to add that this is a fucking brilliant plan.
| The number of useful things you will learn doing this is
| very high.
| Teknoman117 wrote:
| One of my friends got a Pimoroni InkyFrame and was trying
| to figure out what to do with it. Ended up learning a
| substantial amount about how dithering works to convert
| images into the 7 colors the eInk display can produce. It
| just sits there playing the original Shrek at 1 minute per
| frame over and over again XD.
|
| When he messed up the color conversion "Green Farquaad" was
| a recurring meme in our group chat.
| unixfg wrote:
| Would this have been possible without PIO?
| tylerflick wrote:
| Not at that transfer rate. SPI which is the next fastest
| (common) protocol you find on micros typically operates around
| 10 Mhz, but this isn't an apples to apples comparison.
| codebje wrote:
| On a Pico? No - the PIOs replace other peripherals a uC might
| be able to use to achieve this sort of bitrate, so you'd not
| really have the tools you'd need to change GPIO pin states once
| every 3-4 CPU clock cycles.
|
| In a sense the PIO is a bit 'cheaty' when claiming "bit-
| banging", because the PIO is the ultimate peripheral,
| programmable to be whatever you need. It's no mean feat to make
| the PIO do the sorts of things happening here, by any stretch,
| but "bit-banging" typically means using the CPU to work around
| the lack of a particular peripheral.
|
| From that perspective, there's precious few uCs out there that
| could bit-bang 100MBit/s Ethernet - I'm no expert, but I
| _think_ that's a 125MHz IO clock, so if you want 4 CPU cycles
| per transition to load data and push it onto pins, you're
| looking for a 500MHz uC, and at those speeds you definitely
| have to worry about the bus characteristics, stalls, caching,
| and all those fun bits; it's not your old 8-bit CPU bit-banging
| a slow serial protocol over the parallel port any more.
| kfterrg67 wrote:
| >"bit-banging" typically means using the CPU
|
| This is significant. It's using a hardware peripheral that is
| designed and intended for high frequency IO manipulation
| without CPU intervention. This isn't bit-banging, lest we
| start calling it "bit-banging" any time an FPGA or ASIC or
| even a microcontroller peripheral handles any kind of
| signalling.
| ssl-3 wrote:
| It's a _programmable_ hardware peripheral runs compiled
| software to toggle pins in a way that is entirely defined
| by that software.
|
| Here, it runs software that allows it to talk 100mbps
| Ethernet.
|
| Someone else might use that same hardware peripheral to
| drive a display, or produce a PWM output, or whatever.
|
| The RP PIOs just run software. That software can bang bits.
| picture wrote:
| Yeah but like FPGA fabric can also be programmed
| (sometimes by actual software like on Zynq or Stratix
| SoCs), would you call those bit banging too?
| ssl-3 wrote:
| I don't have any hands-on experience with FPGAs. I only
| know about as much about FPGAs as I do about red herring.
| KeplerBoy wrote:
| I feel most people would unless you use some Hard IP for
| the interface. Like you don't bit-bang PCIe when you feed
| a wide AXI stream at a few MHz into the PCIe block where
| it get's serialized and put onto the lanes at the
| signalling rate (multiple Gigahertz, depending on
| generation).
| Dylan16807 wrote:
| Technically it's running software on the programmable
| I/O, but that software is just a loop of four outputs
| that advances when it gets a 1 bit and doesn't advance
| when it gets a 0 bit. It feels like the hardware that
| manages the buffer and turns it into a high speed serial
| stream is doing the more important work here.
|
| And the CPU that's actually deciding on the bits doesn't
| have to bang them with precise timing, it just has to put
| them into that buffer.
| Neywiny wrote:
| Ehhhhh the picture shows a very short cable. You can most
| certainly find micros that can run 100Mb/s communication
| interfaces, though sure maybe not bitbanged. However, you
| really need a PHY and magnetics. MII is 25MHz which seems
| fine. GMII is 125 MHz SDR which is something. Honestly that
| would've been a cooler demo IMO than running 2 inches
| rasz wrote:
| >On a Pico? No
|
| but Yes on pico2 because RP2350 has separate fast serializer
| (HSTX) hardware block able to clock out at 2x the global
| clock (DDR). 320MHz OC results in 600Mbit output. Here
| example pumping out 175 MByte/s of data encoded as HDMI
| signal (3 lanes) without touching PIOs
| https://github.com/steve-m/hsdaoh-rp2350 to be used with $6
| MS2130 USB 3.0 4k HDMI Video Capture dongle.
| codebje wrote:
| They really are pretty awesome little ICs. Thanks for the
| interesting link!
| bitwize wrote:
| It's why I call the Pico a "headless Amiga"--the PIOs are
| basically Coppers but for general I/O instead of tied to a
| display.
|
| I just wish the toolchain weren't so janky...
| pflanze wrote:
| There's an independent reimplementation of the PIO
| assembler here: https://crates.io/crates/pio -- I haven't
| tried it so don't know how good.
| bitwize wrote:
| Intriguing, but I'm referring to the toolchain as a
| whole. Everything is done with CMake mumbo jumbo that is
| a pain to set up. For a computer this small and simple
| there should be a straightforward "compile .c to .o, link
| .o to flashable binary, flash binary" that any user can
| type in at the shell or put into a Makefile.
| hackingonempty wrote:
| PIO is great but the competition has working silicon and SDK for
| all of the common peripherals while RP gives you crappy example
| code. Want to connect to an audio codec with I2S? Almost every
| MCU has this built in but for RP2040/RP2350 you'll have to roll
| your own production quality version from a demo that only shows
| how to send. Years after release.
| bschwindHN wrote:
| Here you go, I2S output:
|
| https://github.com/bschwind/rp2040-i2s/blob/e1d5647704b03ad1...
|
| And I2S input:
|
| https://github.com/bschwind/rp2040-i2s/blob/e1d5647704b03ad1...
|
| The RP2040 has great documentation and the PIO is an amazing
| swiss army knife of a peripheral. I've had no trouble learning
| from their datasheet and docs and making plenty of PIO
| programs.
| yuserx wrote:
| https://github.com/malacalypse/rp2040_i2s_example
| feisty0630 wrote:
| It's almost as if different equipment can serve different
| purposes...
| einsteinx2 wrote:
| Maybe totally my fault for being dumb, but the ESP32 has an I2S
| peripheral and after days combing through docs and web searches
| I never actually got it working, mostly because it seems to
| have been barely documented and its usage was by twiddling
| magic registers etc. I'd say personally some nice example PIO
| code that I can actually read through, understand, and modify
| for my needs is actually better...
| hackingonempty wrote:
| > I'd say personally some nice example PIO code that I can
| actually read through, understand, and modify for my needs is
| actually better...
|
| I agree and that's why its disappointing RP still provides
| half-baked examples instead of real working implementations
| of the common peripherals other manufacturers are supporting.
| ggm wrote:
| this is classic computing wheel of life stuff (Bell, Mudge,
| MacNamara wrote that up in the 70s)
|
| * first you do it in the cpu * then you do it in a dedicated card
| off the bus * then you find the FPGA or whatever too slow, so you
| make the card have it's own CPU * then you wind up recursing over
| the problem, implementing some logic in a special area of the
| cpu, to optimise its bus to the other bus to ...
|
| I expect to come back in 10years and find there is a chiplet
| which took the rpi core, and implements a shrunk version which
| can be reprogrammed, into the chiplet on the offload card, so we
| can program terabit network drivers with a general purpose CPU
| model.
| kragen wrote:
| Yeah, this is the Wheel of Reincarnation, but wasn't it
| Sutherland who wrote that up? And Myer? And in 01968?
| https://www2.cs.arizona.edu/~cscheid/reading/myer-sutherland...
| ggm wrote:
| Maybe it was. Bell/mudge/macnamara was the textbook I
| recalled it from 1979 vintage. I can believe 68 is the
| original.
| TZubiri wrote:
| I understood some of these words
| Twirrim wrote:
| We start out doing things in the CPU, create dedicated
| hardware for it externally, then slowly but surely bring it
| closer and closer to the CPU until we end up integrating the
| specialist capabilities into it. Often these capabilities
| enable other workloads to be done in the CPU, that we then
| build dedicated hardware for and the cycle continues.
|
| An easy example is the 8087 maths coprocessor, from the early
| 80s. They were floating point accelerators, a separate chip
| you could plug into your motherboard, until eventually it was
| integrated into the CPU (386 and 486 processors had SX and DX
| variants, DX had the coprocessor integrated)
| brcmthrowaway wrote:
| How does PIO compare to Cypress PSoC?
| deckar01 wrote:
| PIO is a set of coprocessors designed to offload signal
| processing. They have to be programmed. PSoC has FPGA like
| configuration capabilities, but rather than just logic gates it
| includes larger analog and digital ICs. You can route analog
| signal processing in and out without hitting a CPU and perform
| some FPGA like DSP driven by an arbitrary clock signal (also
| without any CPU usage).
| brcmthrowaway wrote:
| That sounds similar
| deckar01 wrote:
| A coprocessor sounds similar to an FPGA?
| sitzkrieg wrote:
| stick with psoc for anything professional
| lukeinator42 wrote:
| Something related to this that is really cool is directly reading
| from PDM microphones using PIO:
| https://github.com/ArmDeveloperEcosystem/microphone-library-....
| This shouldn't be called bit-banging though if it's using PIO.
| wvenable wrote:
| I think it still counts as bit-banging -- the PIO just lets you
| bit-bang faster and in a more limited way.
| userbinator wrote:
| _and must not be connected to PoE-enabled hardware._
|
| I assume passive PoE; or does it also happen to look like a real
| PoE PD and trick the PSE into turning on?
| moffkalast wrote:
| Pico's reaction as it sees 48V signals on its 3.3V pins:
| _perfectly cut scream that transitions into an explosion_
| Dwedit wrote:
| People have bit-banged out analog NTSC and PAL video signals
| before.
| karlgkk wrote:
| I mean, that's basically what a DAC is, half the time
| Dwedit wrote:
| Just usually not driven by timed code by a program running on
| a CPU. That's when it becomes bit banging.
| rasz wrote:
| Great hack from very talented hacker. Steve Markgraf is the
| author of High Speed Data Acquisition over HDMI
| https://github.com/steve-m/hsdaoh Capturing raw data using super
| cheap USB3 HDMI Video Capture dongles. Up to 175MB/s with Pico2
| as the sender https://github.com/steve-m/hsdaoh-rp2350
|
| 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 PICO challenge is implementing GRMII PHY
| support for that sweet $1 RTL8211 1Gbit. I havent seen that done
| yet.
| kragen wrote:
| Hey, this is fantastic! Thanks!
| kees99 wrote:
| > 1Gbit uses easily reachable 125MHz clock
|
| RGMII uses 4-bit bus, so that would be 250M state transitions
| per second.
|
| Clock signal is 125MHz, yes. But data is sent/sampled at both
| edges (DDR), so PIO state machine has to be clocked at 250MHz.
|
| That's still reachable with mild overclocking, I guess?
| eqvinox wrote:
| This is only talking about TX, presumably it can't receive?
| That'd be the hard part...
| matthiasl wrote:
| Right, it's TX-only. The article says so explicitly halfway
| through:
|
| "As before, this is a transmit-only proof of concept"
|
| I didn't notice that on my first reading.
| moffkalast wrote:
| And here I was thinking I could use a Pico as a USB ethernet
| dongle in a pinch /s
| eqvinox wrote:
| > "As before, this is a transmit-only proof of concept"
|
| I didn't spot that at all. Oops/Thanks!
| karlkloss wrote:
| Or you could just buy an ESP32 board at about the same price,
| which already has an integrated Ethernet MAC (besides WiFi).
|
| But where would be the fun in that?
| rowanG077 wrote:
| You'd still need a Ethernet phy with the esp32 this does that
| too.
| BertoldVdb wrote:
| To make a compliant ethernet signal from this you would need
| at least some sort of line driver/receiver as well.
| imtringued wrote:
| That's the best part though.
|
| With an external PHY you can use single pair ethernet, which
| is much more suitable for use in embedded devices. Single
| pair ethernet directly competes against I2C and CAN, because
| you only need 2 wires for full duplex 100mbit/1000mbit
| connectivity.
|
| Single pair ethernet also has the massive advantage that it
| isn't restricted to the garbage RJ45 plugs, which are
| basically a nightmare in embedded devices.
| amelius wrote:
| But how much juice is left to do useful stuff?
| sherinjosephroy wrote:
| Pretty wild that they got 100 Mbps Ethernet working on a Pico.
| Total overkill, but that's what makes it fun -- pure hacker
| energy.
| inferiorhuman wrote:
| Not quite the same but I was looking at PowerBook G4 specs last
| night. Apple was doing gigabit ethernet in a mid-priced laptop
| ($2200 in 2001 dollars) 25 years ago. Meanwhile I'm pretty sure
| I have some 10baseT gear kicking around.
| dd_xplore wrote:
| It's not the same thing! Pico is a microcontroller, it's also
| not a native ethernet implementation.
| MBCook wrote:
| That would have had a dedicated chip doing the work.
| majke wrote:
| I'm confused. Why is there gnuradio on the screen? The RPI seems
| to have power (micro usb), TX (two wires to the ethernet port on
| the laptop), and ... what is the third thing?
| tecleandor wrote:
| I think it's the signal they're "converting" to ethernet.
| That'd be the "digitizing some WBFM IF signal with the internal
| ADC" part. What I don't know is what's in the signal :P
| junga wrote:
| > Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet
|
| Per Siemens? I'd prefer Ohm!
| varispeed wrote:
| I wish something like Pi Pico existed but with 1GHz clock, DDR3
| memory interface and PCIe and few dozens of GPIO.
| thijson wrote:
| Xilinx Zync have PL for FPGA programmable logic, and PS with a
| few different ARM cores. They aren't as cheap as a Pi Pico
| though.
___________________________________________________________________
(page generated 2025-10-30 23:01 UTC)