Live data from Hacker News

Raspberry Pi Pico does line rate 100M Ethernet

github.com

1–10 of 67 posts

Re: Raspberry Pi Pico does line rate 100M Ethernet

#4
> receive side uses a per-packet interrupt to finalize a received packet

This has made much faster systems not being able to process packets at line speed. A classic was that standard Gigabit network cards and contemporary CPUs were not able to process VoIP packets (which are tiny) at line speed, while they could easily download files (which are basically MTU-sized packets) at line speed.

Re: Raspberry Pi Pico does line rate 100M Ethernet

#5
I just started playing around with PIO and DMA on a Pico, and it’s really fun just how much you can do on the chip without invoking the main CPU. For context, PIO is a mini-language you can program at the edge of the chip that can directly respond to and write to external IO. DMA allows you to tell the chip to send a signal based on data in memory, and can be programmed to loop or interrupt to limit re-invoking. The linked repo uses these heavily for its fast Ethernet communication.

Re: Raspberry Pi Pico does line rate 100M Ethernet

#8
post #5

I just started playing around with PIO and DMA on a Pico, and it’s really fun just how much you can do on the chip without invoking the main CPU. For context, PIO is a mini-language you can program at the edge of the chip that can directly respond to and write to external IO. DMA allows you to tell the chip to send a signal based on data in memory, and can be programmed to loop or interrupt to limit re-invoking. The…

For added clarity, the Pico includes an RP2040 which is where the PIO runs.

Re: Raspberry Pi Pico does line rate 100M Ethernet

#9

Why is the transfer rate non-linear with respect to the system clock? At 100 MHz the rate is 1.38 Mbit/s and at 200 Mhz it is 65.4 Mbit/s.

Wish I could answer that! All I can guess is that the slower processing speed creates a bottleneck in the LWIP stack somewhere...

Re: Raspberry Pi Pico does line rate 100M Ethernet

#10

> receive side uses a per-packet interrupt to finalize a received packet This has made much faster systems not being able to process packets at line speed. A classic was that standard Gigabit network cards and contemporary CPUs were not able to process VoIP packets (which are tiny) at line speed, while they could easily download files (which are basically MTU-sized packets) at line speed.

Luckily the RP2040 has a dualcore CPU so one core can be dedicated entirely to receiving the interrupts, passing it to user code on the other core via a FIFO or whatever else you fancy.
Post reply on HN