- Raspberry Pi Pico đã triển khai truyền Ethernet 100 Mbit/s bằng phần mềm mà không cần phần cứng chuyên dụng
- Nhà phát triển Steve Markgraf sử dụng PIO và DMA để thực hiện mã hóa MLT-3, mã đường truyền 4B5B, và scrambling
- Cách triển khai này hoạt động ở tốc độ ký hiệu 125 MHz và đạt truyền khoảng 11MB/s qua UDP
- Ví dụ đi kèm gồm ADC streamer, counter, và demo âm thanh dựa trên PCM1802, đồng thời hỗ trợ cả RP2040 và RP2350
- Đây là một bước tiến kỹ thuật cho thấy tiềm năng của streaming dữ liệu tốc độ cao và các ứng dụng đo lường trên vi điều khiển giá rẻ
Triển khai Ethernet bit-bang 100 Mbit/s trên RP2040 và RP2350
- Steve Markgraf đã triển khai bộ phát Fast Ethernet 100 Mbit/s hoàn toàn bằng phần mềm thông qua dự án Pico-100BASE-TX
- Hỗ trợ cả RP2040 và RP2350 (Pico 2)
- Sử dụng PIO (Programmable I/O) và DMA để xử lý mã hóa MLT-3, mã đường truyền 4B5B, và scrambling
- Kết quả là có thể stream khoảng 11MB/s qua UDP, đồng thời trình diễn truyền âm thanh thời gian thực và dữ liệu ADC
- Cách triển khai này là dạng chỉ truyền (proof of concept) và không được kết nối trực tiếp với thiết bị PoE
- Khuyến nghị cách ly thông qua pulse transformer hoặc switch Ethernet
Bối cảnh dự án
- Ba năm trước, dự án Pico-10BASE-T của kingyoPiyo đã thu hút sự chú ý khi triển khai Ethernet 10 Mbit/s chỉ với vài điện trở
- Đến năm 2023, việc triển khai bit-bang USB đã mở rộng giới hạn hiệu năng PIO của RP2040
- Dự án lần này tiếp nối hướng đi đó, khám phá khả năng của phần cứng định nghĩa bằng phần mềm bằng cách đạt tốc độ 100 Mbit/s
Kho lưu trữ GitHub và ví dụ
- Kho lưu trữ GitHub: Pico-100BASE-TX
- Các ví dụ đi kèm:
- counter
- built-in ADC streamer
- demo âm thanh PCM1802 (75 kHz)
- Có thể build bằng Pico SDK tiêu chuẩn và tương thích với cả RP2040 và RP2350
Ý nghĩa kỹ thuật
- Điểm cốt lõi là đã triển khai truyền Ethernet 100 Mbit/s chỉ bằng vi điều khiển, không cần chip PHY chuyên dụng
- Mở ra khả năng phát triển các thiết bị thu thập dữ liệu tốc độ cao và streaming chi phí thấp
- Cho thấy tiềm năng mở rộng của cách tiếp cận phần cứng định nghĩa bằng phần mềm (Software-defined hardware)
1 bình luận
Ý kiến trên Hacker News
Đây là một câu chuyện điển hình về cấu trúc tuần hoàn của điện toán
Ban đầu xử lý bằng CPU, rồi chuyển sang card chuyên dụng bên ngoài bus, khi card đó chậm thì lại nhét CPU vào trong card, và cuối cùng lại đưa logic chuyên biệt vào bên trong CPU để tối ưu giao tiếp giữa các bus
Có lẽ khoảng 10 năm nữa sẽ tới thời kỳ thu nhỏ lõi RPi để nhét vào chiplet, rồi lập trình driver mạng terabit theo mô hình CPU đa dụng
Design of Display Processors (1968)
MCU ngày nay thật sự rất ấn tượng. Chỉ với vài đô la là đã có thể mua được vi điều khiển mạnh mẽ
Trước đây phải cần card chuyên dụng như TCP Offload Engine (TOE), còn giờ thì một con chip nhỏ đã làm được phần lớn việc đó
Dự án đọc trực tiếp micro PDM bằng PIO thật sự rất ngầu
microphone-library-for-pico
Cái này đúng ra gần với điều khiển tốc độ cao bằng PIO hơn là “bit-banging”
Có vẻ cái này chỉ xử lý truyền (TX). Phần nhận (RX) chắc sẽ khó hơn nhiều?
Làm một NIC Ethernet qua USB dựa trên cái này cũng có vẻ thú vị
Đặc biệt có thể ứng dụng theo kiểu giả lập NIC gigabit mà Nintendo Switch hỗ trợ, rồi nếu thương lượng thất bại thì chạy ở 100Mbps
Tham khảo thêm thì RPi đời đầu (rev B) từng đạt khoảng 6MB/s qua SSH. Lấy làm mốc so sánh cũng khá thú vị
Tác phẩm của Steve Markgraf thực sự rất ấn tượng.
Anh ấy nổi tiếng với dự án High Speed Data Acquisition over HDMI, và đã dùng Pico2 làm bộ phát để đạt tới 175MB/s
Cũng có phiên bản hsdaoh-rp2350
Tuy vậy, với bit-banging thì 100Mbit có lẽ là giới hạn. 1Gbit dùng xung nhịp 125MHz nhưng là full duplex, nên cần echo cancellation.
Thử thách tiếp theo có lẽ là hiện thực hóa RGMII PHY bằng RTL8211 PHY giá 1 USD
Xung nhịp là 125MHz nhưng vì dùng DDR, nên PIO phải chạy ở 250MHz. Có vẻ chỉ cần ép xung nhẹ là làm được
Nếu không có PIO thì liệu chuyện này có khả thi không?
PIO thực chất gần như là một ngoại vi tối thượng, nên gọi nó là bit-banging cũng hơi gượng.
Để xử lý 100Mbit/s chỉ bằng CPU thì sẽ cần MCU cỡ 500MHz, mà lúc đó lại phát sinh các vấn đề như đặc tính bus hay độ trễ cache
“Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet” à, dùng đơn vị Siemens thì thà Ohm còn hợp hơn
Tôi bị rối vì trên màn hình có GNU Radio. RPi có nguồn, hai dây TX, và còn dây thứ ba nữa, đó là gì?