RP2350 выводит 1080p30, хотя полный кадр не помещается в SRAM
Pico 2 W подключён к телевизору восемью GPIO, и экран распознаёт вход как 1920×1080@30. У RP2350 всего 520 kB встроенной SRAM, тогда как один несжатый кадр RGB888 занял бы 5.93 MiB. Прошивка TVtop решает конфликт буквально по времени: полного растрового буфера нет, есть компактное описание очередных строк, которое превращается в пиксели в момент их отправки на экран.
Кадр заменили расписанием строк
Это не видеоплеер с произвольной картинкой из внешней памяти. Интерфейс киоска состоит из геометрии, палитр и длинных одноцветных участков. Статические объекты лежат во flash, рабочая память отдана под пул строк и буферы нескольких ближайших полос. Рендерер заранее собирает очередную строку как RLE-последовательность: цвет и длина его прогона. Пока дисплей забирает одну строку, микроконтроллер обязан подготовить следующую. Опоздание на несколько микросекунд здесь превращается в видимый сбой изображения.
RP2350 располагает HSTX на GPIO12–19 — блоком высокоскоростного вывода с аппаратным кодированием TMDS и командным расширителем. Прошивка передаёт ему поток команд, среди которых есть повтор TMDS-символа для длинного участка одного цвета. Поэтому залитая панель или фон уходят в линию как команда «повтори», а не как тысячи отдельно подготовленных пикселей. Полный кадр всё же существует в сжатой и разделённой форме: line pool хранит описания строк, палитры задают цвета, а геометрический кэш держит объекты интерфейса. Исчез именно огромный массив готового растра.
TMDS-команды вместо массива пикселей
Для 1080p30 нужен pixel clock 74.4 MHz. Десять TMDS-битов на пиксель дают 744 Mbit/s на каждой из трёх линий данных. Автор выставил системную частоту и частоту HSTX в 372 MHz при напряжении ядра 1.30 V. Это далеко за паспортными границами RP2350: Raspberry Pi указывает 150 MHz для system/HSTX clock и до 300 Mb/s на вывод HSTX при DDR. Восемь линий требуют короткой аккуратной проводки, быстрого фронта и drive strength 12 mA; кабель и конкретный телевизор становятся частью схемы.
Именно поэтому демонстрация интересна шире самого Full HD на Pico. Видеокадр перестал быть данными, которые сначала целиком рисуют, затем передают контроллеру. Он стал потоком с дедлайном на каждую строку. Такой подход хорошо ложится на меню, табло, игровые интерфейсы, осциллографические экраны и другие сцены с простой геометрией и длинными цветными прогонами. Для фотографий или сложной анимации выигрыш быстро съестся сложностью сжатия и временем рендеринга, однако сам паттерн остаётся сильным: большой объект можно хранить как программу его немедленного построения.
Разгон превращает кабель в часть проекта
Режим 1080p30 подтверждён исходниками и фотографией OSD дисплея, однако его нельзя считать штатным свойством любой Pico 2 W. Для 744-Mbit/s вывода пока нет опубликованных eye diagram, BER-тестов, измерений джиттера и серии испытаний на разных экземплярах микроконтроллера, кабелях и телевизорах. Это убедительная работа конкретного тракта за пределами даташита, а не готовая спецификация интерфейса.