shiru8bit

shiru8bit 

Программист, музыкант, самоделкин, ретрогеймер

87subscribers

813posts

Экраны на двух SPI заработали

С помощью ценной подсказки Романа Соколова и ещё нескольких часов времени удалось-таки запустить два двухдюймовых TFT-экрана с разрешением 240x320 и контроллером ST778 на ESP32, подключив их к двум раздельным шинам SPI.
Первое, что позволило решить проблему — переход на библиотеку Arduino_GFX, ещё одну альтернативу для Adafruit GFX и LovyanGFX. Она оказалась более гибкой в конфигурации.
Второе — обычная проблема с ESP32, правильный выбор пинов для подключения устройств. Дело в том, что хотя пины ESP32 и называются GPIO, фактически они не равнозначны и у них есть множество скрытых ограничений, особенностей и альтернативных применений. Например, пин GPIO14 в момент сброса выдаёт сигнал PWM. Нужно ориентироваться по списку этих ограничений, а также по описанию конкретных плат.
И ещё мелкий подводный камень — не получилось повесить линии сброса обоих дисплеев на один пин, так как процедура инициализации второго дисплея сбрасывает первый и он перестаёт принимать команды. Пришлось сделать отдельную линию сброса.
Я не планирую использовать в этом проекте другие SPI-устройства, но избавиться от линий CS при одном устройстве на шине в общем случае нельзя — устройства могут выполнять смену внутреннего состояния по фронту CS. Можно конечно поэкспериментировать, возможно эти конкретные дисплеи и заработают. Но позже, пока пинов хватает.
Теоретически две раздельные шины должны дать повышенную производительность, хотя использование переназначения пинов для второй шины (HSPI, её пины не выведены наружу на используемой плате) должно понизить максимальную скорость работы с 80 до 40 МГц, но всё же обе шины должны заработать в нормальном аппаратном, а не софтовом режиме, и это уже плюс.
Тесты на производительность ещё предстоят, как и исследование возможностей по оптимизации (например, параллельный рендер на двух ядрах ESP32).
Или можно одно ядро для формирования большой картинки в буфере, а второе для вывода на два экрана. Интересно, там же вроде DMA еще должен быть, это еще быстрее. В эти IPS 2'' дисплеи самые классные, это да. Из всех перепробованных штук 30 они самые приятные.
Роман Соколов, вот, я думаю поэкспериментировать, попробовать выжать максимум FPS на двух экранах, как-то распараллелить на ядрах ESP32, возможно по твоей схеме. И как раз думаю, что за счёт DMA это вполне может прокатить.
учитывай еще, что на быстром SPI 80Mhz да и на 40Mhz длина проводов к дисплеям критична
Спасибо Роману за совет!
Subscription levels6

Микро 16

$0.23 per month
Просто потому что нельзя 8. Даже самая малая поддержка важна. Спасибо!

База 128

$1.8 per month
Для тех, кто просто хочет поддержать. Спасибо!

Супер 256

$3.6 per month
Для тех, кто хочет поддержать. Спасибо!

Кило 320

$4.5 per month
Для тех, кто сильно хочет поддержать. Спасибо!

Мега 640

$9 per month
Для тех, кто очень хочет поддержать. Спасибо!

Гига 1024

$14.4 per month
Для тех, кто крайне хочет поддержать. Спасибо!
Go up