• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Работа STM32F401CCU6(Black Pill) с SPI3

Хотя форум про иные модули, но возможно найдется решение моей проблемы.
Развел плату, на которую монтирую модуль STM32F401CCU6
Данный модуль позволяет использовать внешнюю FLASH память или EEPROM(не точно), и подключается путем пайки прямо на плату модуля.
EEPROM_Footprint[1].png
И правда, не совсем понимаю, везде пишут, что к "черной таблетке" подключают EEPROM, но в даташитах на сами "еепромки" написано, что "они" флешки.
Библиотеки в "интернетах" тоже путаются - работают с EEPROM, а а в коде пишут FLASH.
В общем каша уже на начальном этапе, но вопрос не в этом.
Мне удалось отыскать примеры с библиотеками, чтобы подключить флешке-еепромку 25Q16BV от WINBOND и "поиграться" с ней.
*
По умолчанию флешка подключена к чипу на плате так:
FLASH_Original.png
CS -> PA4
SCK -> PA5
MOSI -> PA7
MISO -> PB4(странно, эта нога врода для SPI3 нужна)

Когда припаял микросхему флеша на обратную сторону Black Pill то в мониторе порта(как и в терминале) на нужном порту COM все заработало.
Как писал ранее - развел плату под модуль Black Pill и флешку, только подключил флешку я иначе, как диктовал даташит, а именно:
CS -> PA15
SCK -> PB3
MOSI -> PB4
MISO -> PB5

И тут началось...во первых Black Pill флешку не видит, код внутри пилюли работает, но флеш чип не опознается.
Вначале стал менять режим SPI:
Код:
  SPI.setDataMode(SPI_MODE0);
на
  SPI.setDataMode(SPI_MODE3);
Менял даже в библиотеке SPI.h но безрезультатно.
Запустил CubeMX и посмотрел, какие "ноги" задействованы для SPI3 - и тут первое подозрение, для CS нужна нога PA4
SPI3.png
Но у меня пины с PA0-PA7 заняты интерфейсом motorola 8080 для подключения дисплея по параллельному 8-битному интерфейсу.
Собственно поэтому флешку внешнюю и перекинул на SPI3 и т.к. плату нужно было заказывать к Китае, не проверял на макетке работу интерфейса SPI3.
Развел плату как описал выше и платы через месяц приехали.
Вообще кто-нибудь сталкивался с работой с множественными SPI интерфейсами у Black Pill или большинство людей только лампочками мигают на Black Pill или STM32F4 дискавери?:)
Шутка, или не совсем!
Чтобы использовать у STM32 два или три SPI интерфейса одновременно - для вывода на дисплей, для общения с флешкой и еще для чего нибудь.
По итогу пока не знаю, куда "копать".
Резать дорожки на плате, и переносить контакт 1 у флеш микросхемы с PA15 на PA4...
А дальше больше, для подключения дисплея, по 8-битному интерфейсу, использую библиотеку eSPI_TFT от Bodmer'а.
Еще добавил себе работы тем, что работаю из под ардуино IDE, а это тоже свои особенности.
В интернете масса примеров для кода в Cube IDE и Keil.
Да и HAL и LL "получше" с настройкой SPI справляются, чем адаптированная библиотека от STmicroelectronic под ардуино IDE.
В общем прошу помощи, если кто сможет.
 

Вложения

nikolz

Well-known member
а Вы это проверяли?
Оригинальная плата Black Pill претерпела несколько изменений, которые могут немного сбить с толку. Во всех случаях плата подключена к SPI1, но важно заметить, что на некоторых платах вывод DO (MISO) W25Qxx подключен к PA6, а на некоторых - к PB4. Обязательно проверьте, какой из них используется на самом деле.
 
Нашел решение, как использовать SPI 1,2,3 на ядрах rogerclarc и stm32duino ... остальные не проверял.
Добавил строки
Код:
  SPI.setMOSI(PB5);
  SPI.setMISO(PB4);
  SPI.setSCLK(PB3);
В функцию
SPIFlash::initialize()
По итогу, SPI1 и SP3 работают.

Код:
SPI1(PA7/MOSI, PA6/MISO, PA5/SCLK, PA4/NSS)
SPI3(PB5/MOSI, PB4/MISO, PB3/SCLK, PA15/NSS)
Но, странное явление - раньше думал, что если использовать два или более SPI одновременно для разных устройств, то данные по протоколу будут переданы независимо.
Но согласно анализу данных с помощью logic analiser - например, осуществляется передача данных по SPI1, т.е. CS/NSS/PA4 пин "прижат" к земле.
Скриншот 29-05-2023 08.01.19.png
Данные выходят с MISO1 и успешно принимаются анализатором, но стоит только у SPI3 прижать ногу PA15 к земле, как сразу же пин CS/NSS/PA4 от земли "отжимается", уходит в состояние HIGH и после небольшой паузы(около 281 микросекунд)
начинается передача SPI3, а SPI1 в этот момент не передает.
Возможно я не верно интерпретировал код, либо "физически" так и работают протоколы SPI у одного микроконтроллера?
 
Сверху Снизу