RP2040에서 HDMI 출력을 하는 것을 상태기계로 구현하는 것이 시도되었습니다. 칩설계자가 만든 PicoDVI에서 이런 작업을 했는데요. 두개의 코어를 95% 이상 부려내서 겨우 출력을 했는데, 이로부터 HDMI 출력을 안정적으로 MCU와 분리해서 처리해주는 체제가 필요하다고 요청이 되어 HSTX 핀을 RP2350에서는 기본 제공을 합니다.
이 HSTX 핀에다가 DVI/HDMI 브레이크아웃 보드를 연결하면 HDMI LCD 모니터에 출력이 되는데요.
640×480@60Hz는 프레임버퍼 크기가 600KB에 근접해서, RP2350의 SRAM이 520KB 정도라 안됩니다. 그래서 다들 발상하는게, PSRAM이 달린 RP2350 보드를 쓴다는 것이고 저도 해보았습니다.
그런데 RP2350에서 HDMI 출력을 하게 해주는 HSTX는 PSRAM의 블랭킹 구간의 매커니즘과 충돌합니다. AHB-Lite 버스 문제인지, LVGL UI가 복잡해지면 707KB를 처리해야 할때, 12KB 정도만 보내는게 하드웨어 제약에 의해 있는 현상이라, UI 표시가 안됩니다.
블랭킹 구간은 화면이 안그려지는 짧은 순간인데, Pimoroni Pico Plus 2의 경우 프레임당 1.43ms라, 640×480@60Hz 표시에 필요한 대역폭에 턱없이 모자릅니다.
PSRAM을 안쓰고 SRAM을 쓰면 HSTX와 경합이 크게 없는데요. 그러나 SRAM이 520KB밖에 안되서 640×480@60Hz보다 320×240@60Hz로 하고, RGB565로 표시시 320×240을 쏘아서 640×480으로 뻥튀기해서 표시하는 것이 최적입니다. 이경우
• HSTX와 PSRAM이 동시에 쓰면 대역폭 문제 발생
• SRAM으로 하면 해결되지만 520KB의 적은 용량이라 해상도 뻥튀기 필요
• FHD LCD 모니터의 CTA/CEA VESA 표준 준수 여부에 의해 해상도가 제한적이 됨
이 조건들로 인해 HSTX와 PSRAM을 동시에 쓰는게 이그러집니다.
PSRAM을 반드시 써야 한다면,
• HSTX를 안쓰는 인터페이스의 디스플레이
• 8080 파라렐 방식으로 된 디스플레이 중에 GRAM이 있으면 좋다
이 조건이어야 하네요.
전문 용어와 알파벳이 밀도높게 쓰였는데 이해에 어려움이 없으시죠?
이 문제는 PicoDVI와 Adafruit의 프로젝트 라이브러리 주석에도 나온 문제점이라고 인공지능이 찾아서 보고해주네요. RP2350이 HSTX를 제공해도 현실적 한계가 되는 부분입니다.
그래서 굳이 디스플레이 표시용으로 PSRAM을 쓰기보다, SRAM으로 된 보드를 구해서 쓰는게 좋을 수 있고,
• 320x240 RGB565로 표시후 가로 방향으로 소프트웨어적인 보간 실행 또는
• 640x480 RGB332로 표시
이 두가지가 최선 같습니다.
RP2350 후속칩이 나오면 어떻게 달라질지 기대가 되네요.