Raspberry Pi Pico가 100 Mbit/s 이더넷을 소프트웨어로 구현
(elektormagazine.com)- Raspberry Pi Pico가 전용 하드웨어 없이 100 Mbit/s 이더넷 송신을 소프트웨어로 구현한 사례
- 개발자 Steve Markgraf가 PIO와 DMA를 이용해 MLT-3 인코딩, 4B5B 라인 코딩, 스크램블링을 수행
- 이 구현은 125 MHz 심볼 속도로 동작하며, UDP를 통해 약 11MB/s 전송을 실현
- 예제에는 ADC 스트리머, 카운터, PCM1802 기반 오디오 데모가 포함되어 있으며, RP2040과 RP2350 모두 지원
- 저가 마이크로컨트롤러로 고속 데이터 스트리밍과 계측 응용 가능성을 보여주는 기술적 진전
RP2040 및 RP2350에서의 100 Mbit/s 비트뱅 이더넷 구현
-
Steve Markgraf가 Pico-100BASE-TX 프로젝트를 통해 100 Mbit/s Fast Ethernet 송신기를 완전한 소프트웨어 방식으로 구현
- RP2040 및 RP2350(Pico 2) 모두 지원
- PIO(Programmable I/O) 와 DMA를 사용하여 MLT-3 인코딩, 4B5B 라인 코딩, 스크램블링을 처리
- 결과적으로 UDP를 통한 약 11MB/s 스트리밍이 가능하며, 실시간 오디오 및 ADC 데이터 전송이 시연됨
- 이 구현은 송신 전용(proof of concept) 형태이며, PoE 장비와 직접 연결 금지
- 펄스 트랜스포머 또는 이더넷 스위치를 통한 절연 권장
프로젝트 배경
- 3년 전 kingyoPiyo의 Pico-10BASE-T 프로젝트가 10 Mbit/s 이더넷을 단 몇 개의 저항으로 구현해 주목받음
- 2023년에는 비트뱅 USB 구현으로 RP2040의 PIO 성능 한계를 확장
- 이번 프로젝트는 그 연장선으로, 100 Mbit/s 속도 달성을 통해 소프트웨어 정의 하드웨어의 가능성을 탐색
GitHub 저장소 및 예제
- GitHub 저장소: Pico-100BASE-TX
- 포함된 예제:
- 카운터
- 내장 ADC 스트리머
- PCM1802(75 kHz) 오디오 데모
- 표준 Pico SDK로 빌드 가능하며, RP2040과 RP2350 모두 호환
기술적 의의
- 전용 PHY 칩 없이 마이크로컨트롤러만으로 100 Mbit/s 이더넷 송신을 구현한 점이 핵심
- 저비용 고속 데이터 수집 및 스트리밍 장치 개발 가능성 제시
- 소프트웨어 정의 하드웨어(Software-defined hardware) 접근의 확장 가능성 제기
Hacker News 의견
-
이건 전형적인 컴퓨팅의 순환 구조 이야기임
처음엔 CPU에서 처리하고, 그다음엔 버스 외부의 전용 카드로 옮기고, 그 카드가 느리면 다시 카드 안에 CPU를 넣고, 결국엔 CPU 내부에 특수 로직을 넣어 버스 간 통신을 최적화하게 됨
10년쯤 뒤엔 RPi 코어를 축소해 칩렛 안에 넣고, 테라비트 네트워크 드라이버를 범용 CPU 모델로 프로그래밍하는 시대가 올 것 같음- 맞음, 이건 ‘Wheel of Reincarnation’ 개념임. 다만 그걸 처음 정리한 건 Bell이 아니라 Sutherland와 Myer였고, 1968년에 발표된 논문임
Design of Display Processors (1968) - 솔직히 말하면, 저 단어들 중 절반만 이해했음
- 맞음, 이건 ‘Wheel of Reincarnation’ 개념임. 다만 그걸 처음 정리한 건 Bell이 아니라 Sutherland와 Myer였고, 1968년에 발표된 논문임
-
요즘 MCU는 진짜 대단함. 몇 달러면 강력한 마이크로컨트롤러를 살 수 있음
예전엔 TCP Offload Engine(TOE) 같은 전용 카드가 필요했는데, 이제는 그 기능 대부분을 작은 칩이 해냄- 이제는 몇 센트짜리 MCU도 가능함. 다만 대만 전쟁이나 짝퉁 부품 문제로 이런 시대가 오래가진 않을 수도 있음
- 하드웨어에 익숙하지 않은 사람에게 추천할 만한 입문 프로젝트가 있을까 궁금함. 뭔가 만들어보고 싶은데 아이디어가 부족함
- 여전히 놀라움. 예전엔 PIC 수준의 일만 하던 칩이 이제는 WiFi 내장 MCU로 몇 달러면 가능함. 특히 Pico의 IO 코프로세싱은 정말 강력함
- 요즘 NIC도 비슷한 역할을 많이 하지 않음?
-
PDM 마이크를 PIO로 직접 읽는 프로젝트가 정말 멋짐
microphone-library-for-pico
이건 ‘bit-banging’이라기보단 PIO를 이용한 고속 제어에 가까움- 그래도 넓은 의미로는 bit-banging임. 단지 PIO가 그걸 더 빠르고 안정적으로 해주는 것뿐임
-
이건 송신(TX)만 다루는 것 같음. 수신(RX)은 훨씬 어려운 부분일 텐데?
- 맞음, TX 전용임. 글 중간에 명시되어 있음. 나도 처음엔 그걸 놓쳤음
-
이걸 기반으로 USB 이더넷 NIC를 만드는 것도 흥미로울 것 같음
특히 Nintendo Switch가 지원하는 기가비트 NIC를 흉내 내서, 협상 실패 시 100Mbps로 동작하게 만드는 식으로 응용 가능함 -
참고로, 초기 RPi (rev B) 는 SSH로 약 6MB/s 정도 속도를 냈음. 비교 기준으로 보면 흥미로움
-
Steve Markgraf의 작품은 정말 인상적임.
그는 High Speed Data Acquisition over HDMI 프로젝트로 유명하고, Pico2를 송신기로 써서 175MB/s까지 달성했음
hsdaoh-rp2350 버전도 있음
다만 bit-banging으로는 100Mbit이 한계일 듯함. 1Gbit은 125MHz 클럭을 쓰지만 full duplex라서 에코 캔슬링이 필요함.
다음 도전은 $1짜리 RTL8211 PHY를 이용해 RGMII PHY를 구현하는 것일 듯함- RGMII는 4비트 버스를 쓰기 때문에 초당 2.5억 번의 상태 전환이 필요함.
클럭은 125MHz지만 DDR 방식이라 PIO는 250MHz로 동작해야 함. 약간의 오버클럭으로도 가능할 듯함 - 멋진 프로젝트임. 고마움!
- RGMII는 4비트 버스를 쓰기 때문에 초당 2.5억 번의 상태 전환이 필요함.
-
PIO 없이 이게 가능했을까?
- Pico에서는 불가능함. PIO가 없으면 GPIO 핀을 3~4 CPU 클럭마다 바꾸는 건 현실적으로 어려움
PIO는 사실상 ‘최강의 주변장치’라서 bit-banging이라 부르긴 애매함.
100Mbit/s를 CPU만으로 처리하려면 약 500MHz급 MCU가 필요하고, 그땐 버스 특성이나 캐시 지연 같은 문제가 생김 - SPI 같은 일반 프로토콜도 보통 10MHz 수준이라, 이건 비교 자체가 어려움
- Pico에서는 불가능함. PIO가 없으면 GPIO 핀을 3~4 CPU 클럭마다 바꾸는 건 현실적으로 어려움
-
“Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet”이라니, Siemens 단위보단 Ohm이 더 좋겠음
-
화면에 GNU Radio가 떠 있어서 헷갈렸음. RPi는 전원, TX선 두 개, 그리고 세 번째 선이 있는데 그건 뭐임?
- 그건 이더넷으로 변환 중인 신호 입력선임. 내부 ADC로 WBFM IF 신호를 디지털화하는 부분인데, 정확히 어떤 신호인지는 나도 모름