RP2350 ทำ 1080p30 ได้ยังไง ทั้งที่ RAM มีแค่ 520 KB?
Microcontroller ตัวเล็กอย่าง RP2350 จะส่งภาพ Full HD ไปยังจอได้จริงหรือ? Aaron Gayle แสดงให้เห็นว่าทำได้ ด้วย Raspberry Pi Pico 2 W ที่สร้างสัญญาณ 1920×1080 ที่ 30 Hz ผ่าน DVI โดยไม่มี Full Framebuffer และไม่มีชิป Video ภายนอก
แต่เบื้องหลังไม่ได้มีแค่การ Overclock ให้แรงขึ้นแล้วจบ เพราะภาพ 1080p แบบ 24-bit หนึ่ง Frame ใช้หน่วยความจำเกือบ 6 MB ขณะที่ RP2350 มี SRAM เพียง 520 KB ทีมจึงต้องเปลี่ยนวิธีคิดใหม่ตั้งแต่การเก็บภาพ การ Rasterize ไปจนถึงการส่งข้อมูลออกจาก HSTX แบบทีละ Scanline
- TV-Top Kiosk Firmware สามารถส่งภาพ 1920×1080 ที่ 30 Hz จาก Raspberry Pi Pico 2 W ได้
- สีเป็นแบบ 8-bit ต่อ Channel ตามข้อมูลใน Repository
- ระบบไม่มี Full Framebuffer เพราะ 1080p 24-bit หนึ่ง Frame ใหญ่เกือบ 6 MB แต่ RP2350 มี SRAM 520 KB
- แต่ละ Scanline ถูกสร้างเป็น Run-length HSTX Command Stream ก่อนถึงเวลาส่งออกจริง
- RP2350 ใช้ HSTX เพื่อสร้าง TMDS Stream สำหรับ DVI
- Project Overclock System Clock ไปที่ 372 MHz และใช้ Core Voltage 1.30 V
- 1080p ที่แสดงใน Project คือ 30, 25 และ 24 Hz ไม่ใช่ 1080p60
- ESP32 ใน Configuration หนึ่งรับผิดชอบ Wi-Fi, IP Stack และ TLS ไม่ได้สร้าง Video
RP2350 ทำ 1080p ได้จริงแค่ไหน?
Repository ของ TV-Top ระบุว่า Raspberry Pi Pico 2 W ที่ใช้ RP2350 สามารถ Output ภาพ 1920×1080 ที่ 30 Hz และใช้สีแบบ Full 8-bit ต่อ Channel
นอกจาก 1080p30 แล้ว Firmware ยังมี Mode 1080p25 และ 1080p24 สำหรับ Display ที่รองรับ Timing ต่างกัน
| Video Mode | Output | ข้อมูลจาก Repository |
|---|---|---|
| 1080p30 | 1920×1080 ประมาณ 30 Hz | CEA VIC 34 |
| 1080p25 | 1920×1080 ประมาณ 25 Hz | CEA VIC 33 |
| 1080p24 | 1920×1080 ประมาณ 24 Hz | CEA VIC 32 |
| 720p60 | 1280×720 ประมาณ 60 Hz | เป็น Default Mode ของ RP2350 Build ใน Repository |
ปัญหาแรก: Frame 1080p ใหญ่กว่า RAM หลายเท่า
ถ้าคิดแบบระบบกราฟิกทั่วไป เราอาจเริ่มจาก Framebuffer: จอง Memory หนึ่งก้อนเพื่อเก็บสีของ Pixel ทั้ง Frame แล้วค่อยส่งภาพนั้นออกไปยังจอ
แต่ Repository ระบุว่า Frame 1920×1080 แบบ 24-bit มีขนาดเกือบ 6 MB ขณะที่ RP2350 มี SRAM เพียง 520 KB
ต่อให้ไม่เอา RAM ไปใช้งานส่วนอื่นเลย Full Frame ก็ยังใหญ่เกินพื้นที่ที่มีอยู่หลายเท่า
ทางออก: ไม่เก็บทั้ง Frame แต่สร้างภาพทีละ Scanline
TV-Top ใช้สิ่งที่ Documentation เรียกว่า Line Pool โดยแต่ละ Scanline ไม่ได้เก็บเป็น Array สีของ Pixel ทุกจุด แต่เก็บเป็น Run-length Spans
แนวคิดง่าย ๆ คือ ถ้าเส้นหนึ่งมีพื้นที่สีเดียวกันต่อเนื่องจำนวนมาก แทนที่จะบันทึกค่าสีเดิมซ้ำหลายร้อยครั้ง ระบบสามารถเก็บประมาณว่า “สีนี้ยาวกี่ Pixel” แล้วค่อย Expand ตอนส่งภาพ
วิธีนี้เข้ากับภาพของ TV-Top เพราะ Game Board, Rectangle, Polygon, Text และพื้นที่สีเรียบ มักมี Pixel สีเดียวกันต่อเนื่องเป็นช่วงยาว
ไม่เพียงประหยัด RAM แต่ต้องสร้างเส้นให้ทันด้วย
ใน RP2350 Path แต่ละ Scanline ถูกสร้างเป็น HSTX Command Stream และ Core 1 ทำงานล่วงหน้าก่อนตำแหน่ง Scanout ปัจจุบัน
Repository ระบุว่า Core 1 สร้างเส้นล่วงหน้า 6 Scanlines หากเส้นใดสร้างไม่ทัน ระบบจะส่งเส้นสีดำและนับเป็น Missed Line ในข้อมูลสถิติ
Rendering Pipeline ของ TV-Top ทำงานอย่างไร?
ถ้ามองทั้งระบบ Flow ของงานนี้ไม่ได้เริ่มที่ Pixel แต่เริ่มจากข้อมูล Drawing และ Geometry
ระบบรับข้อมูล Frame และ Drawing Operations ของ Game Board
Decode ข้อมูลและ Geometry ที่ต้องใช้ใน Frame
Static Geometry ที่ใหญ่เกิน RAM สามารถเก็บไว้ใน Flash
แปลง Vector / Geometry เป็นพื้นที่ Pixel ในแต่ละ Band
แต่ละ Scanline ถูกเก็บเป็นช่วงสีและความยาว แทน Full Framebuffer
Expand Scanline และสร้าง Stream ที่ต้องส่งออกไปยัง Display
จอรับ TMDS Stream และแสดงภาพ
อีกส่วนที่น่าสนใจคือ Geometry ขนาดใหญ่ไม่จำเป็นต้องกิน RAM ตลอดเวลา เพราะ Static Geometry สามารถถูก Decode แล้วเก็บเป็น Flash-resident Geometry Cache จากนั้น Renderer อ่าน Vertex จาก Flash เมื่อต้องใช้งาน
นี่ทำให้ Architecture แบ่งหน้าที่ของ SRAM และ Flash ตามชนิดข้อมูล แทนที่จะพยายามยัดทุกอย่างเข้า RAM
HSTX ทำให้ RP2350 ส่ง DVI ได้อย่างไร?
RP2350 มี Peripheral ที่ชื่อ HSTX ซึ่งเป็น Hardware Serializer ความเร็วสูง และใน Project นี้ถูกนำมาใช้สร้าง TMDS Stream สำหรับสัญญาณ DVI
Video Signal ถูกส่งออกผ่าน GPIO จำนวน 8 ขา ซึ่งจัดเป็น Differential Pair สำหรับข้อมูลสีและ Clock
| Signal | GPIO |
|---|---|
| D0 / Blue Pair | GPIO12 / GPIO13 |
| Clock Pair | GPIO14 / GPIO15 |
| D2 / Red Pair | GPIO16 / GPIO17 |
| D1 / Green Pair | GPIO18 / GPIO19 |
แล้วทำไมต่อ HDMI ได้?
จุดนี้ควรแยกคำให้ชัด: Project สร้าง DVI/TMDS Video Signal แล้วต่อผ่าน Connector หรือ Breakout ที่เข้ากับจอ HDMI/DVI
จึงไม่ควรตีความว่า RP2350 มี HDMI Controller แบบเดียวกับ Computer หรือ Single-board Computer ที่มี HDMI Output โดยตรง
372 MHz: ต้อง Overclock ถึงจะไปถึงจุดนี้
RP2350 ไม่ได้ทำ 1080p30 ใน Project นี้ด้วย Clock ปกติ Firmware ตั้ง System Clock ไปที่ 372 MHz และใช้ Core Regulator ที่ 1.30 V
ค่า 372 MHz สูงกว่าค่า System Clock สูงสุด 150 MHz ที่ Raspberry Pi ระบุสำหรับ RP2350 ใน Documentation อย่างมาก ดังนั้นต้องมองการตั้งค่านี้เป็น Experimental Overclock
Documentation ยังระบุด้วยว่า HSTX ในงานนี้ทำงานในระดับ Data Rate ที่สูงกว่าค่า Rated ต่อ Pin และแนะนำให้ลด Video Mode ลงหาก Chip, Wiring หรือ Cable ไม่มี Margin เพียงพอ
ทำไมเป็น 1080p30 ไม่ใช่ 1080p60?
ความละเอียดเพียงอย่างเดียวไม่ได้บอก Bandwidth ที่ต้องใช้ทั้งหมด Refresh Rate ก็มีผลโดยตรงกับ Pixel Clock และ Link Rate
Hardware Documentation ของ TV-Top ระบุว่า 1080p60 ต้องการ Pixel Clock 148.5 MHz ซึ่งสูงกว่าขอบเขตที่ Project นี้ใช้กับ HSTX
ในทางกลับกัน 1080p ที่ 24–30 Hz สามารถใช้ Pixel Clock ระดับประมาณ 74.25 MHz ซึ่งอยู่ในระดับเดียวกับ Link Requirement ของ 720p60
สำหรับ TV-Top นี่เป็น Trade-off ที่ยอมรับได้ เพราะหน้าจอ Board Game ไม่ได้เปลี่ยนภาพแบบ Action Game ทุก Frame Repository ระบุว่า Kiosk จะ Redraw เมื่อ Game State เปลี่ยน
แล้ว ESP32 ทำอะไรอยู่ใน Project?
ภาพ Bring-up Rig ของ Project มีทั้ง Pico 2 W และ ESP32-C3 จึงอาจทำให้เข้าใจว่า ESP32 ช่วยสร้าง Video ด้วย แต่จริง ๆ แล้วหน้าที่ถูกแยกออกจากกันชัดเจน
ใน Configuration ที่ใช้ External Modem RP2350 ยังคงรับผิดชอบ Video และ Rendering ขณะที่ ESP32 รับผิดชอบงานอย่าง:
- Wi-Fi
- IP Stack
- TLS
- Networking ที่เกี่ยวข้องกับ Kiosk
ทั้งสองฝั่งสื่อสารกันผ่าน UART วิธีนี้ช่วยย้ายงาน Network และ Memory Pressure บางส่วนออกจาก RP2350 เพื่อให้ทรัพยากรฝั่ง Kiosk เหลือสำหรับ Renderer มากขึ้น
ปัญหาที่คาดไม่ถึง: DVI Clock รบกวน Wi-Fi ได้ด้วย
เมื่อ Hardware ทำงานที่ความถี่สูง ปัญหาไม่ได้จบอยู่แค่ CPU หรือ Memory แต่สัญญาณความถี่สูงสามารถส่งผลกับระบบ Radio ที่อยู่ใกล้กันได้
Documentation ของ Project ระบุว่า TMDS Clock สามารถสร้าง Harmonic ที่เข้าไปรบกวนย่าน 2.4 GHz Wi-Fi และระหว่างการพัฒนาพบอาการ Wi-Fi Stall ภายใต้บาง Clock Configuration
วิธีที่ Firmware ใช้คือเลือก System Clock ให้สัมพันธ์กับ Wi-Fi Channel เพื่อขยับ Harmonic ออกจากความถี่ Channel ที่กำลังใช้งาน แทนที่จะใช้ Clock ค่าเดียวกับทุกสถานการณ์
Hardware ที่ใช้ทำ Demo มีอะไรบ้าง?
README ระบุว่าไม่จำเป็นต้องมี Custom Hardware เพื่อทดลองแนวคิดพื้นฐาน โดย Build สามารถใช้ Raspberry Pi Pico 2 W ร่วมกับวิธีนำ GPIO สำหรับ DVI ออกไปยัง Connector และ Display
| Hardware | Role |
|---|---|
| Raspberry Pi Pico 2 W | ใช้ RP2350 สำหรับ Rendering และ Video Output |
| HSTX / DVI Breakout | นำ Differential Pairs จาก GPIO ไปยัง DVI/HDMI Connection |
| Display | รับ Video Signal ที่ Kiosk สร้างขึ้น |
| ESP32-C3 DevKitM-1 | ใช้เป็น Network Modem ใน Option 2 |
TV-Top เอา 1080p นี้ไปใช้ทำอะไรจริง?
Video Hack นี้ไม่ได้เกิดขึ้นเพื่อทำ Demo Test Pattern อย่างเดียว แต่เป็นส่วนหนึ่งของ Project ชื่อ TV-Top
แนวคิดของ TV-Top คือใช้ Television เป็น Game Board ขณะที่ผู้เล่นแต่ละคนโต้ตอบกับเกมผ่านโทรศัพท์ของตัวเอง Kiosk จึงต้องรับข้อมูล Game State แล้ว Render Board ออกไปยัง TV
Use Case แบบนี้อธิบายได้ว่าทำไม 1080p30 จึงสมเหตุสมผล: Board Game ต้องการความคมของ Text และ Geometry มากกว่าการ Render ภาพเคลื่อนไหว 60 Frame ต่อวินาทีตลอดเวลา
อยากลอง Build เองต้องรู้อะไร?
Repository มี Build Instructions และ Source Code จริง ดังนั้นหากต้องการทดลองควรใช้ GitHub ต้นฉบับควบคู่กับบทความนี้ เพราะ Configuration และข้อจำกัดสามารถเปลี่ยนได้ตาม Revision ของ Firmware
สำหรับ Configuration ที่ใช้ ESP32 เป็น Modem Repository มีคำสั่ง Build สำหรับ Pico 2 W และ 1080p30 โดยตรง
cmake -S . -B build-modem -G Ninja -DPICO_BOARD=pico2_w -DKIOSK_MODEM=ON -DKIOSK_VIDEO_MODE=1080p30
ninja -C build-modem && picotool load -f build-modem/tvtop_kiosk.uf2
README ยังมี Configuration ที่ใช้ Wi-Fi บน Pico 2 W เอง แต่ระบุว่า 1080p พร้อม TLS เป็น Configuration ที่ Memory ตึงมาก และ Build ได้แต่ยังไม่ได้ทดสอบบน Hardware ในสถานะที่ Documentation ระบุ
ดังนั้นถ้าต้องการทำตาม Project จริง ควรอ่าน README, HARDWARE.md, BUILD.md และ MODEM.md จาก Repository ต้นฉบับควบคู่กัน
Maker ได้อะไรจากงานนี้?
1. ถ้า Memory ไม่พอ อาจต้องเปลี่ยน Data Representation
ปัญหา Full Framebuffer ใหญ่เกิน RAM ไม่ได้ถูกแก้ด้วยการพยายามบีบ Framebuffer เดิมให้เล็กลงอย่างเดียว แต่เปลี่ยน Representation ไปใช้ Run-length Scanline ที่เหมาะกับชนิดภาพของ Application
2. Peripheral สำคัญพอ ๆ กับ Clock Speed
372 MHz ช่วยเรื่อง Timing แต่ HSTX คือ Hardware Block ที่ทำให้ RP2350 มีเส้นทางสร้าง TMDS Stream โดยไม่ต้องผลักงานทั้งหมดให้ CPU แบบ Software ล้วน
3. Flash และ RAM ไม่จำเป็นต้องทำงานแบบเดียวกัน
TV-Top แยก Static Geometry ไปเก็บใน Flash ขณะที่ RAM ถูกสงวนให้ข้อมูล Dynamic และ Rendering Pipeline ที่ต้องใช้งานทันเวลา
4. Multicore ต้องแบ่งงานตาม Deadline
Core 1 ถูกใช้ใน Scanout Path และเตรียมเส้นล่วงหน้า เพราะ Video Output มี Deadline ต่อ Scanline ถ้าสร้างข้อมูลไม่ทัน ภาพก็เสียทันที
5. Overclock มีผลมากกว่า Benchmark
Clock ที่สูงขึ้นพาเรื่อง Flash Timing, HSTX Margin, Wiring และแม้กระทั่ง Wi-Fi Interference เข้ามาเป็นส่วนหนึ่งของ System Design
FAQ: คำถามที่พบบ่อย
1. RP2350 สามารถ Output 1080p ได้จริงหรือ?
Project TV-Top แสดงการ Output 1920×1080 ที่ 30 Hz จาก Raspberry Pi Pico 2 W ที่ใช้ RP2350 ผ่าน DVI/TMDS
2. RP2350 ทำ 1080p60 ได้หรือไม่?
Source ของ Project นี้ไม่ได้แสดง 1080p60 Mode 1080p ที่ Repository ระบุคือ 30, 25 และ 24 Hz
3. ทำไมไม่ใช้ Full Framebuffer?
README ระบุว่า Frame 1080p แบบ 24-bit มีขนาดเกือบ 6 MB ขณะที่ RP2350 มี SRAM 520 KB จึงไม่สามารถเก็บ Full Frame ไว้ใน SRAM ได้
4. แล้วภาพถูกเก็บอย่างไร?
ระบบใช้ Run-length Spans ใน Line Pool แล้วสร้างแต่ละ Scanline ขึ้นก่อนเวลาที่ต้องส่งออกจริง
5. HSTX คืออะไร?
HSTX เป็น Hardware Serializer ใน RP2350 ซึ่ง Project นี้นำมาใช้สร้าง TMDS Stream สำหรับ DVI Video Output
6. ใช้ Clock เท่าไร?
Configuration 1080p ของ Project ใช้ System Clock ที่ 372 MHz และ Core Voltage 1.30 V
7. 372 MHz เป็นความเร็วปกติของ RP2350 หรือไม่?
ไม่ใช่ Documentation ของ Raspberry Pi ระบุ System Clock สูงสุดที่ 150 MHz ดังนั้น 372 MHz ใน Project นี้เป็น Overclock
8. ต้องใช้ GPU ภายนอกหรือไม่?
README ระบุว่า Output 1080p30 ทำได้โดยไม่มี External Video Hardware แต่ยังต้องมี Hardware สำหรับนำ GPIO Differential Pairs ออกไปยัง DVI/HDMI Connection
9. ESP32 ช่วยสร้างภาพ 1080p หรือไม่?
ไม่ ใน Option 2 ESP32 ทำหน้าที่ Wi-Fi, IP Stack และ TLS ส่วน Video และ Rendering ยังคงอยู่ที่ RP2350
10. ใช้ GPIO ไหนสำหรับ DVI?
Repository ใช้ GPIO12–19 เป็น Differential Pairs สำหรับ Data และ Clock ของ DVI/TMDS
11. ใช้ HDMI Cable ได้หรือไม่?
Project ใช้ DVI/TMDS ผ่าน Hardware Breakout และ Connector ที่เชื่อมกับจอได้ แต่ Source เตือนว่า Wiring และ Cable Quality มีผลเมื่อทำงานที่ Data Rate สูง
12. 1080p ใช้ได้กับจอทุกเครื่องหรือไม่?
Source ไม่ได้การันตี Display ทุกเครื่อง Repository มีทั้ง 1080p30, 1080p25 และ 1080p24 เพื่อรองรับ Timing ที่จอแต่ละรุ่นยอมรับต่างกัน
13. Project ใช้ RP2040 ได้หรือไม่?
Firmware รองรับ Pico W ที่ใช้ RP2040 ด้วย แต่ Repository ระบุว่า RP2040 Path ใช้ PIO/PicoDVI และไม่ถึง 1080p
14. Source Code เปิดให้ดูหรือไม่?
Firmware Repository เปิดอยู่บน GitHub และมี Documentation สำหรับ Architecture, Hardware, Rendering, Network, Build และ ESP32 Modem
15. TV-Top คืออะไร?
TV-Top เป็น Board Game Platform ที่ใช้ TV เป็น Game Board และให้ผู้เล่นโต้ตอบผ่านโทรศัพท์ โดย Kiosk Firmware ทำหน้าที่ Render สิ่งที่เกมส่งมาให้
16. RP2350 ร้อนแค่ไหนเมื่อ Overclock 372 MHz?
Source ระบุว่าชิปจะทำงานอุ่นขึ้น แต่ไม่ได้ให้ค่าอุณหภูมิเป็นตัวเลขสำหรับ Configuration นี้ จึงไม่ควรสร้างค่า °C ขึ้นเอง
References / แหล่งข้อมูลต้นฉบับ
Microcontroller ตัวเล็ก อาจทำได้มากกว่าที่คิด
Project แบบ TV-Top แสดงให้เห็นว่า Performance ไม่ได้มาจาก Clock Speed เพียงอย่างเดียว แต่เกิดจากการเลือก Architecture, Peripheral, Memory Strategy และวิธีแบ่งงานให้เหมาะกับข้อจำกัดของ Hardware
หากกำลังทดลอง Project ด้วย Raspberry Pi Pico, ESP32, Development Board, Display หรือ Module ต่าง ๆ สามารถสอบถามทีม Globalbyte เรื่องอุปกรณ์ที่เหมาะกับ Project ได้