Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32C8T6 + SD + TFT - подвисает индикатор

Пн апр 01, 2019 07:43:26

Подключил к STM32C8T6 (платка blue pill) на SPI1 SD карточку и на SPI2 TFT 1,8" 128х160 на ST7735. Поставил FAT [url]https://github.com/alemorf/VinxFS[url]. Инициализирую индикатор, делаю заливку и потом запускаю инициализацию карточку - проходит нормально, возвращает "0" - типа "ОК" - и индикатор подвисает. Шилд для Ардуино (TFT + SD), на нём мелкий стаб 5/3,3В. По питанию шилда поставил ёмкости 0.1 uF + 1 uF + 10 uF керамику + 100 uF электролит + прямо на ножки SD подпаял 100 uF тантал. Что можно ещё сделать чтобы индикатор не подвисал?

Ссылку поправил. Думал, кто по делу что подскажет.

P.S. Если сперва инить SD а потом экран - экран работает, похоже, что при ините SD идёт помеха по питанию индикатора, но как его устранить?
Последний раз редактировалось Frogfot Пн апр 01, 2019 20:31:39, всего редактировалось 3 раз(а).

Re: STM32C8T6 + SD + TFT - подвисает индикатор

Пн апр 01, 2019 18:55:13

???

Re: STM32C8T6 + SD + TFT - подвисает индикатор

Вт апр 02, 2019 17:15:25

1. В Вашем GIT'e что-то не то. Вы утверждаете, что у Вас проект на STM32, но на картинке схема подключения по SPI к ATMega8.
2. Кода с main() так же не видно в стандартных файлах в тех же каталогах.

Если более дельно - проверьте, корректно ли происходит работа с пинами выбора целей - OLED / SD. От этого зависит ОЧЕНЬ многое, вплоть до непонятных глюков в других местах проекта, как-либо зависящих от обмена данными.
Если есть осциллограф - просто ткнитесь и посмотрите, есть ли та самая помеха по питанию. Если есть - проверяйте из-за чего. Карта НЕ МОЖЕТ просадить тантал на 100uF до такой степени, чтобы это вылилось в помеху.
В моём проекте карта запитывается через банальный полевик и пару блокировочных конденсаторов на 1uF после него. Ни помех, ни сбоев нет. Хотя и плата своя.
Далее. Очень рекомендую всё же проверить сигналы логическим анализатором.

Re: STM32C8T6 + SD + TFT - подвисает индикатор

Ср апр 03, 2019 19:53:59

2 AlanDrakes: У меня проект на STM32F103C8T6 (платка Blue Pill), картинку я не выкладывал - схему ещё не рисовал (не было необходимости). К SPI1 подключена SD, к SPI2 - TFT 1,8" 128х160 на ST7735 - https://www.rcscomponents.kiev.ua/produ ... 13162.html - здесь же и брал.

Использовал чужую VinxFS - FAT на основе Petit FAT Elm Chan - http://we.easyelectronics.ru/Soft/vinxf ... a-avr.html и собственно проект на GitHub - https://github.com/alemorf/VinxFS. Переделал проект с CV AVR на STM32 под Keil.

Сперва собрал всё безпаечными проводами от Arduino - индикатор работал без SD нормально, но зависал при каждом обращении к SD.

Собрал на макетке - Blue Pill через PLS вставил в PBS с одной стороны макетки а с другой - тоже через PBS индикатор с SD. На плате индикатора хилый стабилизатор в SOT-23 и аж 1 кондёрчик 0603.

Нормального осциллографа сейчас у меня нет, проверить питание не могу, вот разве что таким эмпирическим способом - зависает индикатор или нет.

Подобавлял кондёров по питанию, вопрос с зависанием частично решился - экспериментально выявил, что самая мощная помеха идёт при иницилизации SD - если потом инициализировать индикатор и после этого открыть файл то индикатор не зависает. Кстати, классный тест на питание - если пофильтрую питание и индикатор не будет подвисать при инициализации SD, то будет супер.

Кстати, вот перевод статьи Elm Chan - http://microsin.net/programming/file-sy ... cards.html - как раз о питание SD карточки.

Re: STM32C8T6 + SD + TFT - подвисает индикатор

Вс апр 07, 2019 17:03:06

Надо будет проверить у себя процесс инициализации карты памяти.
Но лично у меня с ней были бОльшие проблемы во время записи файлов большими блоками (кажется, были какие-то глюки в моей реализации драйвера карты между файловой системой и железом). Сейчас не наблюдаю подобного.

И, да. На длинных проводах наводка по питанию может получиться довольно большой. Я стараюсь избегать таких вариантов подключения, или принудительно подтягиваю шины к неактивным уровням на дальнем конце, и добавляю емкостей там же. Это помогает. Обычно.

Из грубоватого варианта могу предложить костыль - повторно инициализировать индикатор после инициализации карты. Не перезаписывать его память, а быстро сбросить и снова настроить собственно контроллер.
У меня в одной железке подобным образом пришлось поступить - в некоторых случаях при включении внешней нагрузки, от последней по цепям питания может вернуться дополнительный импульс и слегка пошатать периферию. Но в итоге один раз из десятка - подвешивал экран (OLED SSD1307 128*64px). Пришлось именно такой костыль вбить в код.
Ответить