3 คะแนน โดย GN⁺ 2025-11-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2025-11-01
ความคิดเห็นจาก Hacker News
  • นี่เป็นเรื่องราวแบบฉบับของ วงจรซ้ำของการประมวลผล
    ตอนแรกก็ให้ CPU จัดการ จากนั้นก็ย้ายไปเป็นการ์ดเฉพาะทางที่อยู่นอกบัส พอการ์ดนั้นช้าก็ใส่ CPU กลับเข้าไปในการ์ดอีก สุดท้ายก็ลงเอยด้วยการใส่ลอจิกเฉพาะเข้าไปในตัว CPU เพื่อเพิ่มประสิทธิภาพการสื่อสารระหว่างบัส
    อีกสัก 10 ปีน่าจะได้เห็นยุคที่ย่อคอร์ RPi ลงไปใส่ในชิปเล็ต แล้วเขียนโปรแกรม ไดรเวอร์เครือข่ายระดับเทราบิต ด้วยโมเดล CPU ทั่วไป

    • ใช่เลย นี่คือแนวคิด ‘Wheel of Reincarnation’ นั่นแหละ แต่คนที่สรุปแนวคิดนี้ไว้เป็นครั้งแรกไม่ใช่ Bell แต่เป็น Sutherland กับ Myer ในงานตีพิมพ์ปี 1968
      Design of Display Processors (1968)
    • พูดตามตรงคือผมเข้าใจแค่ครึ่งเดียวของคำพวกนั้น
  • ทุกวันนี้ MCU น่าทึ่งจริง ๆ แค่ไม่กี่ดอลลาร์ก็ซื้อ ไมโครคอนโทรลเลอร์ประสิทธิภาพสูง ได้แล้ว
    แต่ก่อนต้องใช้การ์ดเฉพาะอย่าง TCP Offload Engine (TOE) เดี๋ยวนี้ชิปตัวเล็ก ๆ ตัวเดียวทำงานพวกนั้นได้เกือบหมด

    • ตอนนี้แม้แต่ MCU ราคาไม่กี่เซนต์ก็ยังทำได้ เพียงแต่ปัญหาอย่าง สงครามไต้หวัน หรือ ชิ้นส่วนปลอม อาจทำให้ยุคแบบนี้อยู่ได้ไม่นาน
    • สงสัยว่ามี โปรเจ็กต์เริ่มต้น อะไรที่พอจะแนะนำให้คนที่ไม่คุ้นกับฮาร์ดแวร์ได้ไหม อยากลองสร้างอะไรสักอย่างแต่ยังไม่มีไอเดีย
    • ยังน่าทึ่งอยู่ดี เมื่อก่อนชิปที่ทำได้แค่ระดับ PIC ตอนนี้กลายเป็น MCU ที่มี WiFi ในตัว ได้ในราคาไม่กี่ดอลลาร์ โดยเฉพาะ IO coprocessing ของ Pico นั้นทรงพลังมาก
    • ทุกวันนี้ NIC เองก็ทำหน้าที่คล้าย ๆ กันเยอะไม่ใช่เหรอ?
  • โปรเจ็กต์ที่อ่านไมค์ PDM ด้วย PIO โดยตรงนี่เจ๋งมาก
    microphone-library-for-pico
    นี่ใกล้เคียงกับการควบคุมความเร็วสูงด้วย PIO มากกว่าจะเรียกว่า ‘bit-banging’

    • ถึงอย่างนั้นในความหมายกว้าง ๆ มันก็ยังเป็น bit-banging อยู่ดี แค่ PIO ทำให้มัน เร็วขึ้นและเสถียรกว่าเดิม เท่านั้น
  • ดูเหมือนว่านี่จะพูดถึงเฉพาะฝั่งส่ง (TX) เท่านั้น ส่วนฝั่งรับ (RX) น่าจะยากกว่ามากไม่ใช่หรือ?

    • ใช่ รองรับเฉพาะ TX เท่านั้น มีระบุไว้ชัดเจนกลางบทความ ผมเองก็พลาดจุดนั้นตอนแรกเหมือนกัน
  • เอาอันนี้ไปต่อยอดทำเป็น 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

    • RGMII ใช้บัส 4 บิต ดังนั้นจึงต้องมีการสลับสถานะ 250 ล้านครั้งต่อวินาที
      แม้สัญญาณนาฬิกาจะเป็น 125MHz แต่เพราะเป็นแบบ DDR ทำให้ PIO ต้องวิ่งที่ 250MHz น่าจะพอเป็นไปได้ด้วยการโอเวอร์คล็อกนิดหน่อย
    • เป็นโปรเจ็กต์ที่ยอดเยี่ยมมาก ขอบคุณ!
  • ถ้าไม่มี PIO จะทำแบบนี้ได้ไหม?

    • บน Pico ทำไม่ได้ ถ้าไม่มี PIO การสลับ GPIO ทุก ๆ 3~4 CPU clock แทบไม่สมจริง
      PIO นี่แทบจะเป็น ‘อุปกรณ์ต่อพ่วงที่โหดที่สุด’ อยู่แล้ว จะเรียกว่า bit-banging ก็ยังรู้สึกไม่ค่อยตรงนัก
      ถ้าจะให้ CPU ล้วน ๆ จัดการ 100Mbit/s ได้ คงต้องเป็น MCU ระดับประมาณ 500MHz และพอถึงจุดนั้นก็จะเริ่มเจอปัญหาอย่างคุณสมบัติของบัสหรือความหน่วงจากแคช
    • โปรโตคอลทั่วไปอย่าง SPI ก็ปกติอยู่แถว ๆ 10MHz เท่านั้น เทียบกันตรง ๆ ได้ยาก
  • “Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet” เหรอ ฟังดูแล้วใช้หน่วย Ohm น่าจะเหมาะกว่า Siemens

  • เห็น GNU Radio โผล่อยู่บนหน้าจอเลยงงนิดหน่อย RPi มีสายไฟเลี้ยง สาย TX สองเส้น แล้วก็มีสายเส้นที่สาม อันนั้นคืออะไร?

    • นั่นคือ สายสัญญาณขาเข้า ที่กำลังถูกแปลงเป็น Ethernet อยู่ เป็นส่วนที่ใช้ ADC ภายในแปลงสัญญาณ WBFM IF ให้เป็นดิจิทัล แต่ผมก็ไม่แน่ใจเหมือนกันว่าสัญญาณจริง ๆ คืออะไร