View on GitHub

fb4s_howto

Howto

Подключение экрана от FB 4S/5 по SPI

На принтерах Flying Bear 4S/5 установлен экран на контроллере ILI9488 с тач панелью на контроллере xpt2046. В этой заметке рассказано о том, как подключить такой экран через последовательный интерфейс SPI.

ILI9488

В datasheet на контроллер есть описание интерфейсов, с которыми работает этот контроллер.

ILI9488 System interface

Комбинацией ног IM0 - IM2 можно задать необходимый интерфейс. Контроллер умеет работать и по SPI, но в данном случае изменить комбинацию ног не представляется возможным. Сам контроллер ILI9488 стоит где-то внутри экрана и снаружи его не видно. Сконфигурирован он для работы в режиме MIPI-DBI Type B, с шиной 16-бит.

16-бит это формат цвета RGB565, т.е. 5 бит используется на красный цвет, 6 бит на зеленый и 5 бит на голубой.

Для управления экраном также используются еще несколько ног:

16bit bus

Запись в экран происходит следующим образом: на линиях данных DB0-DB15 выставляются нужные данные. Это может быть нужный цвет пикселя или нужная команда. Тип данных определяется состоянием ноги D/CX: если на ней низкий уровень, значит передается команда, если высокий - данные. По восходящему фронту на ноге WRX контроллер считывает данные с ног DB0-DB17. Поскольку на шине может быть несколько устройств, выбор активного происходит линией CSX. Когда на ней низкий уровень, значит устройство выбрано.

Data bus

В микроконтроллерах STM32, которые используются на платах MKS Robin Nano, есть аппаратный блок FSMC, который позволяет удобно управлять экраном по такой шине, выдерживая все необходимые тайминги. Для подключения используются разъемы FPC32 с шагом 1мм.

Robin Connector

Преобразование в SPI

На платах rapsberry pi и прочих SBC, как правило нет разъемов для подключения такого экрана, а в самом микроконтроллере может не быть аппаратного блока для управления шиной. Управлять экраном принудительно выставляя каждую из 16+2 ног - очень медленно.

Наилучшим вариантом было бы переключить ili9488 в режим SPI. Поскольку это не представляется возможным, было реализовано другое решение, с преобразованием параллельного интерфейса в последовательный. Схема эта срисована с китайских экранов для raspberry pi.

Schematic

Экран работает только в режиме записи, чтение из него не происходит.

U4 и U5 - это сдвиговый регистр 74HC4094. У него есть 8 выводов (QP0 - QP7). На восходящем фронте на ноге CP с ноги D считываются данные. При установке STR в высокий уровень данные устанавливаются на выходах QP0 - QP7. Если передавать больше 8 бит, данные будут сдвигаться на ногу QS1. Это позволяет собирать каскад из регистров. В приведенной выше схеме, при передаче 16 бит, первые 8 бит будут “сдвинуты” через ногу QS1 микросхемы U4 на вход D микросхемы U5.

U6 - это счетчик 74HC4040 При каждом изменении уровня на ноге CLK из высокого уровня в низкий, счетчик увеличивает свое значение. Счетчик бинарный, на 12-бит. Высокий уровень на линии CLR сбрасывает счетчик в 0.

U3 - инвертор 74HC04. У микросхемы есть 6 входов (ноги с индексом А), и 6 выходов (ноги с индексом Y). Если на входе высокий уровень, на выходе будет низкий, и наоборот.

Работа схемы:

logic

Touch панель

На экране установлен простой резистивный тач на контроллере XPT2046 (или его клоне). У контроллера есть выход IRQ (PENIRQ), который сигнализирует о том, что было нажатие.

xpt2046

На плате экрана этот вывод подтянут к VDD через резистор R1. При нажатии на экран на этом выводе устанавливается низкий уровень. К сожалению на плате экрана не разведена дорожка от ноги PENIRQ до ноги на FPC32 разьеме шлейфа. В шлейфе этот сигнал заложен (26 нога разъёма).

Прошивки принтера на базе Marlin работают с тач-панелью в режиме опроса. Микроконтроллер несколько сот раз в секунду опрашивает XPT2046, не случилось ли нажатие.

В ядре линукса есть драйвер для XPT2046 (аналог ADS7846). Однако драйвер расчитан работу по прерыванию: опрос xpt2046 происходит только если изменился уровень на выводе IRQ (т.е. было нажатие).

Для работы тач панели в линуксе нужно допаять перемычку от ноги FPC разъема до ноги PENIRQ xtp2046.

На фотографии видно, что нога на FPC разъеме никуда не подключена:

mks_lcd/img/fpc32.png

Вывод PENIRQ и резистор подтяжки R1:

PENIRQ + R1

Перемычка:

touch fix

touch fix

touch fix