ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
1308579
Eddy_Em (11.05.2023 12:05, просмотров: 17854)
Наткнулся на косяк STM32F303. 

Понемногу пилю работу с экранчиком (то ли на IL9341, то ли 9340, то ли вообще черт знает что - в интернете однозначного ответа нет). И вот, пытаясь считать данные некоторых регистров (что интересно, регистр, в котором для всех ILI лежит конкретная модель контроллера, т.е. тут должно быть 0x9341 или 0x9340, вообще не читается), наткнулся на то, что перед нужными данными SPI мне выдает от 0 до 3 нулей.

Погуглил, оказывается, не один я на это натыкался. Единственным решением проблемы на SO придумали полностью сбрасывать SPI и инициализировать его заново перед каждым чтением! Но это же совершенно бредовая идея… И все из-за дурацкого FIFO, который аж на 32 бита при передаче данных по 8бит… Я даже на SO вопросик задал: https://stackoverflow.com/questions/76211679/weird-data-bytes-order-in-stm32f303-spi-on-receiving

И на SO мне пытаются что-то посоветовать, но явно не то.

Вот, собственно, что я понаписал уже: https://github.com/eddyem/stm32samples/tree/master/F3%3AF303/NitrogenFlooding

К сожалению, у меня нет схемы подключения этого экранчика. Я оторвал экран от подложки и увидел, что там еще и от тачскрина 4 провода как-то через резисторы напаяны на управляющую SPI-шину. Подозреваю, из-за этого и подсаживается передающая линия. Правда, когда я пытался читать некоторые регистры, на осциллографе вижу постоянно повторяющиеся данные. И они даже всплывают в буфере SPI (с переменным количеством нулей в начале, как уже писал). Но вот попытка прочесть из экранного буфера возвращает какой-то мусор: заполняю весь экран 0x1234, а читаю черт-те что (даже не получается из этого BGR сделать, как можно было бы представить, что мой RGB они во внутреннее представление преобразуют). Даташиты на эти ILI - просто ад какой-то! Как будто бы китаец переводил на английский, а там, где не понимал, тупо вообще ничего не писал!!!


Ну ладно, о чем я: просто уже 4 дня с этим экраном бился, из них 2 прошло в попытках прочитать идентификатор… Еще опытным путем оказалось, что контакт CS надо стробировать - иначе ничего не работает! А в даташите и об этом ни слова (правда, как я уже говорил, я не уверен, что там именно ILI9341/9340, но команды из даташитов на изменение параметров отображения принимает, я уже и надписи вчера начал рисовать - правда, шрифт на 16 пикселей высоты маловат, нужно масштабировать). И да, паузы, рекомендованные в даташите, лучше вообще в 2 раза больше делать. И реально их приходится выдерживать (благо, инициализация обычно лишь 1 раз делается в начале, а там у меня все равно будет и CAN, и USB, и чего только нет - инициализировать, 2-3 секунды старт - хоть и много, но никуда не деться, увы).

Плохо, когда один китаец пишет хреновый даташит, второй китаец - непонятно как паяет, а потом поди-ка догадайся, как с этой фиговиной работать…


Что до косяка с STM32, то могу предположить, что проблема в том, что это я неправильно что-то делаю. Но блин, я раздел SPI даташита уже несколько раз перечитал! Нет там ничего подобного...

eddy-em.livejournal.com github.com/eddyem