steve-m/Pico-100BASE-TX
Bit-banged 100 MBit/s Fast Ethernet transmitter and UDP framer for Raspberry Pi RP2040/RP2350
Thành tựu nổi bật
Những danh hiệu mới nhất của dự án
#1 Repository Của Tháng
#1 Repository Của Tháng
#1 Repository Của Tháng
🔌 Bit-bang Ethernet 100 MBit/s trên RP2040/RP2350
Thư viện biến hai GPIO thông thường thành cổng Ethernet Fast 100 MBit/s bằng PIO — không cần chip Ethernet chuyên dụng.
Pico-100BASE-TX là thư viện cho phép RP2040 và RP2350 truyền dữ liệu ở tốc độ ~11 MB/s qua kết nối 100BASE-TX Fast Ethernet, sử dụng PIO (Programmable I/O) để bit-bang toàn bộ giao thức. Đây là phiên bản nâng cấp từ Pico-10BASE-T (chỉ 10 MBit/s, TX-only).
✨ Điểm nổi bật
- 100BASE-TX qua PIO: Sử dụng hai GPIO và PIO để tạo tín hiệu Ethernet 125 MHz symbol rate — không cần PHY chip ngoài.
- MLT-3 encoding: Ba mức điện áp (-1, 0, +1) được mã hóa trên cặp xoắn thông qua hai GPIO xuất lần lượt 0b01, 0b00, 0b10.
- Scrambling với LFSR: Bộ lọc nhiễu dùng Linear Feedback Shift Register 11 bit (taps x^11 + x^9 + 1), lặp sau 2047 bit, dùng lookup table chiếm ~10 KB RAM.
- 4B5B line code: Mỗi nibble 4 bit được mã thành 5 bit, với các ký hiệu đặc biệt J, K, T, R để đánh dấu start/end frame và idle.
- DMA CRC32: Tính Ethernet FCS (Frame Check Sequence) bằng DMA CRC sniffer, UDP checksum cũng dùng DMA ở chế độ sum mode.
- Idle stream qua DMA: Pre-inversion scrambling cho phép gửi liên tục idle symbols qua DMA mà không tốn CPU — chỉ dùng CPU khi thực sự cần truyền frame.
- UDP framing: Dữ liệu đầu ra được đóng gói thành các datagram UDP, đọc từ ringbuffer.
💡 Vì sao đáng chú ý
Việc triển khai 100BASE-TX bằng phần mềm là bài toán rất khó — MLT-3 encoding, scrambling, 4B5B line code ở 125 MHz symbol rate đòi hỏi timing chính xác tuyệt đối. PIO trên RP2040/RP2350 giải quyết được điều này bằng hardware-level bit-banging, giải phóng CPU cho tác vụ khác. Thư viện này biến một chiếc Pico giá vài đô la thành một node Ethernet thật sự, mở ra khả năng thu thập dữ liệu thời gian thực (ADC, audio) và truyền đi qua mạng mà không cần bộ phận Ethernet đắt tiền.
Điểm thú vị là cách tiếp cận "DMA-first" — khi gửi dữ liệu liên tục (ví dụ streaming ADC), CPU gần như không tham gia. Thư viện kèm theo ba ví dụ thực tế: counter (counter 16-bit), internal_adc (ADC nội bộ), và pcm1802_audio (stream audio 75 kHz từ board PCM1802).
#RP2040 #RP2350 #Ethernet #Bitbanging #PIO #OpenSource #TiniX
Similar Projects
Discover other similar projects and AI models.
Open-source custom firmware for PicoCalc, Cardputer ADV, Flipper Zero, POOM, and other ESP32/Raspberry Pi Pico devices
Arduino library for easy, interrupt driven speech, MP3, AAC, and WAV playback on the Raspberry Pi Pico RP2040, Pico 2 RP2350, and ESP32