- Raspberry Pi Pico แสดงตัวอย่างการทำ การส่งอีเทอร์เน็ต 100 Mbit/s ด้วยซอฟต์แวร์โดยไม่ใช้ฮาร์ดแวร์เฉพาะทาง
- นักพัฒนา Steve Markgraf ใช้ PIO และ DMA เพื่อทำ การเข้ารหัส MLT-3, 4B5B line coding, และ การสแครมเบิล
- การติดตั้งใช้งานนี้ทำงานที่ อัตราสัญลักษณ์ 125 MHz และทำ การส่งผ่าน UDP ได้ราว 11MB/s
- ตัวอย่างประกอบมี ADC streamer, counter, และ เดโมเสียงบนพื้นฐาน PCM1802 พร้อมรองรับทั้ง RP2040 และ RP2350
- เป็นความก้าวหน้าทางเทคนิคที่แสดงให้เห็นถึงความเป็นไปได้ของ การสตรีมข้อมูลความเร็วสูงและงานวัดค่าต่าง ๆ บนไมโครคอนโทรลเลอร์ราคาประหยัด
การทำ Bit-bang Ethernet 100 Mbit/s บน RP2040 และ RP2350
- Steve Markgraf สร้าง ตัวส่ง Fast Ethernet 100 Mbit/s แบบซอฟต์แวร์ทั้งหมดผ่านโปรเจ็กต์ Pico-100BASE-TX
- รองรับทั้ง RP2040 และ RP2350(Pico 2)
- ใช้ PIO(Programmable I/O) และ DMA เพื่อจัดการ การเข้ารหัส MLT-3, 4B5B line coding, และ การสแครมเบิล
- ผลลัพธ์คือสามารถ สตรีมผ่าน UDP ได้ราว 11MB/s และมีการสาธิต การส่งข้อมูลเสียงแบบเรียลไทม์และข้อมูล ADC
- การติดตั้งใช้งานนี้เป็นแบบ ส่งอย่างเดียว(proof of concept) และ ห้ามเชื่อมต่อกับอุปกรณ์ PoE โดยตรง
- แนะนำให้แยกวงจรด้วย pulse transformer หรือผ่าน Ethernet switch
ที่มาของโปรเจ็กต์
- เมื่อ 3 ปีก่อน โปรเจ็กต์ Pico-10BASE-T ของ kingyoPiyo ได้รับความสนใจจากการทำ อีเทอร์เน็ต 10 Mbit/s ด้วยตัวต้านทานเพียงไม่กี่ตัว
- ในปี 2023 มีการทำ bit-bang USB ซึ่งผลักขีดจำกัดด้านประสิทธิภาพของ PIO บน RP2040 ให้ไกลขึ้น
- โปรเจ็กต์นี้จึงเป็นส่วนต่อเนื่องของแนวทางดังกล่าว โดยสำรวจ ความเป็นไปได้ของฮาร์ดแวร์ที่นิยามด้วยซอฟต์แวร์ ผ่านการทำความเร็วระดับ 100 Mbit/s
ที่เก็บ GitHub และตัวอย่าง
- ที่เก็บ GitHub: Pico-100BASE-TX
- ตัวอย่างที่รวมมา:
- counter
- built-in ADC streamer
- เดโมเสียง PCM1802(75 kHz)
- สามารถบิลด์ได้ด้วย Pico SDK มาตรฐาน และเข้ากันได้กับทั้ง RP2040 และ RP2350
นัยสำคัญทางเทคนิค
- จุดสำคัญคือการทำ การส่งอีเทอร์เน็ต 100 Mbit/s ด้วยไมโครคอนโทรลเลอร์เพียงอย่างเดียว โดย ไม่ใช้ชิป PHY เฉพาะทาง
- ชี้ให้เห็นความเป็นไปได้ในการพัฒนาอุปกรณ์ เก็บข้อมูลและสตรีมข้อมูลความเร็วสูงต้นทุนต่ำ
- สะท้อนศักยภาพที่ขยายต่อได้ของแนวทาง Software-defined hardware
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นี่เป็นเรื่องราวแบบฉบับของ วงจรซ้ำของการประมวลผล
ตอนแรกก็ให้ CPU จัดการ จากนั้นก็ย้ายไปเป็นการ์ดเฉพาะทางที่อยู่นอกบัส พอการ์ดนั้นช้าก็ใส่ CPU กลับเข้าไปในการ์ดอีก สุดท้ายก็ลงเอยด้วยการใส่ลอจิกเฉพาะเข้าไปในตัว CPU เพื่อเพิ่มประสิทธิภาพการสื่อสารระหว่างบัส
อีกสัก 10 ปีน่าจะได้เห็นยุคที่ย่อคอร์ RPi ลงไปใส่ในชิปเล็ต แล้วเขียนโปรแกรม ไดรเวอร์เครือข่ายระดับเทราบิต ด้วยโมเดล CPU ทั่วไป
Design of Display Processors (1968)
ทุกวันนี้ MCU น่าทึ่งจริง ๆ แค่ไม่กี่ดอลลาร์ก็ซื้อ ไมโครคอนโทรลเลอร์ประสิทธิภาพสูง ได้แล้ว
แต่ก่อนต้องใช้การ์ดเฉพาะอย่าง TCP Offload Engine (TOE) เดี๋ยวนี้ชิปตัวเล็ก ๆ ตัวเดียวทำงานพวกนั้นได้เกือบหมด
โปรเจ็กต์ที่อ่านไมค์ PDM ด้วย PIO โดยตรงนี่เจ๋งมาก
microphone-library-for-pico
นี่ใกล้เคียงกับการควบคุมความเร็วสูงด้วย PIO มากกว่าจะเรียกว่า ‘bit-banging’
ดูเหมือนว่านี่จะพูดถึงเฉพาะฝั่งส่ง (TX) เท่านั้น ส่วนฝั่งรับ (RX) น่าจะยากกว่ามากไม่ใช่หรือ?
เอาอันนี้ไปต่อยอดทำเป็น USB Ethernet NIC ก็น่าสนใจเหมือนกัน
โดยเฉพาะถ้าทำให้เลียนแบบกิกะบิต NIC ที่ Nintendo Switch รองรับ แล้วถ้าเจรจาความเร็วไม่สำเร็จก็ค่อย fallback มาวิ่งที่ 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 เลยต้องมี echo cancellation
ความท้าทายถัดไปน่าจะเป็นการใช้ RTL8211 PHY ราคา $1 มาทำ RGMII PHY
แม้สัญญาณนาฬิกาจะเป็น 125MHz แต่เพราะเป็นแบบ DDR ทำให้ PIO ต้องวิ่งที่ 250MHz น่าจะพอเป็นไปได้ด้วยการโอเวอร์คล็อกนิดหน่อย
ถ้าไม่มี PIO จะทำแบบนี้ได้ไหม?
PIO นี่แทบจะเป็น ‘อุปกรณ์ต่อพ่วงที่โหดที่สุด’ อยู่แล้ว จะเรียกว่า bit-banging ก็ยังรู้สึกไม่ค่อยตรงนัก
ถ้าจะให้ CPU ล้วน ๆ จัดการ 100Mbit/s ได้ คงต้องเป็น MCU ระดับประมาณ 500MHz และพอถึงจุดนั้นก็จะเริ่มเจอปัญหาอย่างคุณสมบัติของบัสหรือความหน่วงจากแคช
“Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet” เหรอ ฟังดูแล้วใช้หน่วย Ohm น่าจะเหมาะกว่า Siemens
เห็น GNU Radio โผล่อยู่บนหน้าจอเลยงงนิดหน่อย RPi มีสายไฟเลี้ยง สาย TX สองเส้น แล้วก็มีสายเส้นที่สาม อันนั้นคืออะไร?