ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
9 марта
1574875 Топик полностью
Nikolay_Po (Вчера, 21:36 - 23:15, просмотров: 3795)
Дисплей ST7789 IPS 240x240 SPI, без CS. Моё возмущение массовой "тупостью". 

Вот такой дисплей:


Чип драйвера LCD замечательный. Качество картинки мне нравится. Чип-на-стекле. Последовательный интерфейс SPI, можно разогнать до 60МГц. Контрастность, углы обзора, цвет - шикарные. Чёткость отличная. Есть вариации, но чип один и тот же, все работают примерно одинаково.

Чем возмущён:


- Нет сигнала CS! Лучше бы вместо аппаратного RESET CS вывели (тогда надёжно срабатывает сброс командой)!

- Все стыкуют библиотеки Ардуино и дисплеи друг с другом по принципу "работает/не работает". Попыток глубоко копнуть и разобраться почти ноль.

- Не получилось запустить с "не-Ардуино". Пытаюсь выяснить причину, а там, вплоть до комментариев в библиотеке: "Дисплей работает с SPI MODE 1". При этом, в паспорте на чип драйвера дисплея - чётко понятно, что режим 0. И никто не приблизился к истине. Сплошной информационный мусор.


Вдруг кому придётся использовать, отмечу:


Первое.

Из-за того, что сигнал CS всегда притянут к земле (всегда активен), SPI-интерфейс не инициализируется должным образом перед первым байтом. Для работы в режиме SPI MODE 0, нужно дать первый перепад тактового сигнала с высокого уровня на низкий. Возможно, это особенность конкретной версии ST7789 и не все проглатывают первый перепад тактового сигнала без перепада с высокого на низкий (если нет CS, с CS, думаю, проблем бы не было).

Без искусственного перехода SCK из высокого в низкий уровень до начала первой передачи, первый тактовый перепад SCK из низкого в высокий игнорируется чипом драйвера. Срабатывает на второй перепад. И блин, все форумы пишут, что у меня MODE 0 не работает, нужно менять фазу тактового сигнала, тогда работает. Другой пишет, что у него не все дисплеи работают. Какие-то работают, какие-то нет.

А я читаю паспорт на ST7789, и там MODE 0. Чесал затылок, чесал. Как у них другой режим? Прикинул - ну по-любому на фронт срабатывает дисплей. А у них MODE 1 - инверсия тактового сигнала и фронт сдвинут на пол-такта. Получается, что те, кто использует MODE 1, попадают на гонки - что раньше - чип драйвера дисплея сделает выборку бита данных или SPI-модуль в МК изменит бит на следующий? Отсюда и неопределённость - какие-то комбинации дисплей-МК работают, какие-то - нет.

Так вот, проблема с решена так: а) Ставим высокий уровень SCK, а RESET - низким, активным. Делаем сброс не менее 10мкс, отпускаем RESET (высокий, неактивный); б) Ждём 5мс (раньше нельзя - дисплей занят загрузкой конфигурации, прошитой производителем). в) Переводим SCK в низкий уровень (как и положено в паузах SPI MODE 0). Передаём управление выводом SCK модулю SPI.


Второе.

Это сегментирование рынка такое? Чтобы нельзя было поставить такой дисплей в иное место, кроме пионерской поделки? Из-за отсутствия CS, получается, для надёжного отображения, нужно периодически делать аппаратный сброс дисплея (а он тухнет при этом). Иначе проверял - один сбой тактового импульса - и всё - нет управления навсегда. Обидно, что линию SDO не подключили, а, при этом, включили режим "4-line serial interface Ⅱ". Если бы включили режим "4-line serial interface Ⅰ", можно было бы периодически вычитывать из дисплея что-нибудь, чтобы понимать, что он не потерял фазу SCK. И, если потерял, то сбрасывать аппаратным RESET. Но нет - пробовал (правда не на этом экземпляре, что сейчас и что на фото выше) - при попытке чтения, на SDA ничего со стороны дисплея...


P.S. С настройками SPI, с учётом

https://caxapa.ru/1574915.html

и

https://caxapa.ru/1574910.html

подходит MODE 3. И перепад обеспечивает высокий/низкий, для работы без CS, и требованиям "полярности" не противоречит.