EdigE
← ЛЕНТА

ST7789 зажигает картинку, но не проверяет SPI-контроллер

На ST7789 появляется изображение: буфер кадра лежит в DDR, AXI DMA выталкивает его через MM2S в поток AXI4-Stream, пользовательская логика превращает поток в SCLK, MOSI, CS и D/C. Для RGB565 кадр 320×172 занял бы 110080 байт. Но дисплей в этой схеме молчит: линии MISO у него нет. Он способен показать, что биты дошли до панели и команды с данными были различены, однако ничего не скажет о приёмнике SPI, его фазе выборки и обработке переполнения.

Именно вокруг такого тракта автор перенёс Verilog SPI Master с Cyclone IV E на XC7Z020 в составе Zynq-7020. В репозитории есть RTL, AXI4-Lite-регистры, ограничения выводов, тесты, Linux-драйвер, Buildroot-внешнее дерево и артефакты Vivado. Идея выглядит естественно для Zynq: ARM под Linux готовит буфер и программирует DMA, programmable logic забирает поток и гонит его в периферию без участия процессора в каждом байте. В AXI DMA последний beat пакета помечается TLAST; для SPI-адаптера это удобная граница, по которой можно завершать передачу и отпускать CS.

Однако формальный документ verification.md фиксирует куда более интересный статус, чем нарисованная архитектура. 26 из 26 тестов AXI-обвязки проходят в Icarus и Vivado xsim, опубликованы результаты синтеза, implementation и генерации bitstream. Реальная плата, настоящий SPI-slave и связка Processing System через AXI там прямо помечены как непроверенные: у автора не было доступа к железу. Это расходится с повествованием Habr-статьи, где описаны загрузка Linux, драйвер и дисплейный сценарий. Для инженерной оценки приоритет остаётся за чек-листом, который явно называет незакрытые проверки.

Ограничение панели особенно важно потому, что в самом RTL уже видны вопросы, которые картинка не поймает. В симуляции при CLK_DIV=1 приёмное слово сдвигается на один бит; двухтактный синхронизатор требует более медленного режима с CLK_DIV не меньше 2. Для RX-overflow описан ещё один дефект: статусный бит ERR_RX_OVF не срабатывает, хотя IRQ продолжает сигнализировать о проблеме. Это реальные свойства цифровой модели, но не осциллограмма с выводов платы и не измерение запаса по таймингам SPI.

Есть и более тонкая граница: DMA выдаёт поток с возможным backpressure, а SPI-выходу приходится удерживать непрерывную последовательность битов, CS и D/C. Автор обсуждает запас FIFO через almost_full, но без трассы ILA, логического анализатора или теста DMA/FIFO под остановками downstream нельзя доказать, что байт не теряется на границе этих двух миров. Красивый экран в таком проекте остаётся полезной проверкой передающего тракта. Полноценная верификация потребует отдельного slave с MISO либо loopback, испытаний PS↔AXI на плате и захвата сигналов в режимах, где FIFO пустеет, DMA тормозит или система сбрасывается.