- O Raspberry Pi Pico implementa transmissão Ethernet de 100 Mbit/s por software, sem hardware dedicado
- O desenvolvedor Steve Markgraf usa PIO e DMA para realizar codificação MLT-3, codificação de linha 4B5B e scrambling
- A implementação opera com taxa de símbolos de 125 MHz e alcança cerca de 11 MB/s de transmissão via UDP
- Os exemplos incluem streamer de ADC, contador e demo de áudio baseada em PCM1802, com suporte a RP2040 e RP2350
- Um avanço técnico que mostra o potencial de streaming de dados em alta velocidade e aplicações de instrumentação com microcontroladores de baixo custo
Implementação de Ethernet bit-bang de 100 Mbit/s no RP2040 e RP2350
- Steve Markgraf implementou um transmissor Fast Ethernet de 100 Mbit/s inteiramente por software por meio do projeto Pico-100BASE-TX
- Suporte a RP2040 e RP2350 (Pico 2)
- Usa PIO (Programmable I/O) e DMA para processar codificação MLT-3, codificação de linha 4B5B e scrambling
- Como resultado, é possível fazer streaming de cerca de 11 MB/s via UDP, com demonstrações de transmissão de áudio em tempo real e dados de ADC
- Esta implementação é apenas de transmissão (proof of concept), e não deve ser conectada diretamente a equipamentos PoE
- Recomenda-se isolamento por meio de um transformador de pulso ou switch Ethernet
Contexto do projeto
- Há 3 anos, o projeto Pico-10BASE-T de kingyoPiyo chamou atenção ao implementar Ethernet de 10 Mbit/s com apenas alguns resistores
- Em 2023, uma implementação de USB bit-bang ampliou os limites de desempenho do PIO no RP2040
- Este projeto segue essa linha e explora as possibilidades de hardware definido por software ao alcançar 100 Mbit/s
Repositório GitHub e exemplos
- Repositório GitHub: Pico-100BASE-TX
- Exemplos incluídos:
- Contador
- Streamer de ADC integrado
- Demo de áudio PCM1802 (75 kHz)
- Pode ser compilado com o Pico SDK padrão e é compatível com RP2040 e RP2350
Importância técnica
- O ponto principal é a implementação de transmissão Ethernet de 100 Mbit/s usando apenas o microcontrolador, sem chip PHY dedicado
- Aponta a possibilidade de desenvolver dispositivos de aquisição de dados de alta velocidade e streaming de baixo custo
- Levanta o potencial de expansão da abordagem de hardware definido por software (Software-defined hardware)
1 comentários
Comentários no Hacker News
Isso é uma história clássica da estrutura cíclica da computação
Primeiro se processa na CPU, depois isso vai para uma placa dedicada fora do barramento, quando a placa fica lenta colocam uma CPU dentro dela e, no fim, adicionam lógica especializada dentro da própria CPU para otimizar a comunicação entre barramentos
Daqui a uns 10 anos, parece bem possível que encolham um núcleo de RPi e o coloquem dentro de um chiplet, e passem a programar drivers de rede em terabits em um modelo de CPU de uso geral
Design of Display Processors (1968)
Os MCUs de hoje em dia são realmente incríveis. Por alguns dólares, dá para comprar um microcontrolador poderoso
Antes era preciso uma placa dedicada como um TCP Offload Engine (TOE), mas agora um chip pequeno faz a maior parte disso
O projeto de ler diretamente um microfone PDM com PIO é realmente muito legal
microphone-library-for-pico
Isso está mais para controle em alta velocidade com PIO do que para ‘bit-banging’
Parece que isso lida só com transmissão (TX). A recepção (RX) deve ser a parte bem mais difícil, não?
Também parece interessante usar isso como base para criar uma NIC Ethernet via USB
Principalmente para imitar uma NIC gigabit suportada pelo Nintendo Switch e fazer com que, se a negociação falhar, ela opere a 100 Mbps
Só como referência, os RPi iniciais (rev B) faziam algo em torno de 6 MB/s via SSH. É uma comparação interessante
O trabalho do Steve Markgraf é realmente impressionante.
Ele é conhecido pelo projeto High Speed Data Acquisition over HDMI, e usou um Pico2 como transmissor para chegar a 175 MB/s
Também existe a versão hsdaoh-rp2350
Mas 100 Mbit provavelmente é o limite com bit-banging. 1 Gbit usa clock de 125 MHz, mas como é full duplex, exige cancelamento de eco.
O próximo desafio provavelmente seria implementar um PHY RGMII usando um PHY RTL8211 de US$ 1
O clock é de 125 MHz, mas como funciona em DDR, o PIO teria de rodar a 250 MHz. Parece viável com um pouco de overclock
Isso seria possível sem PIO?
O PIO é praticamente um ‘periférico supremo’, então fica até estranho chamar isso de bit-banging.
Para lidar com 100 Mbit/s só com CPU, seria preciso um MCU na faixa dos 500 MHz, e aí apareceriam problemas como características do barramento e latência de cache
“Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet”: em vez da unidade Siemens, Ohm seria melhor
Fiquei confuso porque GNU Radio estava aparecendo na tela. O RPi tem alimentação, dois fios de TX e um terceiro fio; o que é aquilo?