Страница 1 из 2
STM32F4xx_SPI_FLASH
Добавлено: Сб мар 28, 2026 3:11 pm
dvk
VitGo писал(а): Ср мар 25, 2026 6:28 pm
Модулем работы с SPI FLASH в итоге поделитесь ?
Не знаю что вы хотите от флешки, мне нужно было только чтение данных ( это криво-косо и сделал). Записывать на флешку данные я планирую с помощью ExternalLoader через STLink-Utility. Затевалось всё для работы с вот такими платками BlackPill
На них есть место под флешку , это очень удобно, можно конечно и на проводках подкинуть.
Схема подключения флешки на моей плате, ( версии у плат бывают разные и пины могут отличаться ) нужно проверять.
Демо проект , проверял на F401RCT6 и на F411CEU6 , но думаю на любом чипе F4 должно работать. Сделал две функции , чтение ID флешки и чтение последовательности данных с нужного адреса . Процесс чтения ID очень простой, нужно передать команду 0x9F и затем 3 любые байты , считывая принятый байт из регистра SPI_DR . Для чтения данных нужно отправить команду 0x03, затем три байта адреса ( старшим байтом вперёд), и затем отправлять и читать столько сколько хотим получить байт данных. От использования DMA пока отказался , ради простоты
Re: STM32F4xx_SPI_FLASH
Добавлено: Сб мар 28, 2026 3:14 pm
dvk
Модуль создан на базе имеющегося в редакторе spi_tx , в него добавлены переменная для хранения ID и маленький массивчик для данных

- mass.png (3.52 КБ) 170 просмотров
пример чтения
Re: STM32F4xx_SPI_FLASH
Добавлено: Сб мар 28, 2026 3:33 pm
dvk
Для записи данных во флешку можно использовать STLink Utility или CubeProgrammer и Внешний Загрузчик .
Это сам загрузчик , его нужно добавить в папку External Loader любой из этих программ.В самой папке уже содержаться разные загрузчики для разных плат, их можно все удалить. Затем нужно выбрать загрузчик и указать адрес 0x90000000
Загрузчик писался для F411 и флешки W25Q64 которая должна сидеть
на SPI1 как на схеме выше, это обязательно. Загрузчик нормально работает сейчас и с F401RCT6 и флешкой W25Q32. работать будет и с меньшим объёмом флешки а вот флешками размером 128 Мбит и больше уже не будет в полном объёме.
Re: STM32F4xx_SPI_FLASH
Добавлено: Сб мар 28, 2026 6:39 pm
VitGo
ну еще написать подпрограмму записи - и можно оформлять в виде модуля читающего\записывающего флешку
на счет SPI1 - ну главное чтобы с чего то можно было начать, дальше уже кому надо будет поправят
Re: STM32F4xx_SPI_FLASH
Добавлено: Сб мар 28, 2026 7:03 pm
dvk
VitGo писал(а): Сб мар 28, 2026 6:39 pm
на счет SPI1 - ну главное чтобы с чего то можно было начать, дальше уже кому надо будет поправят
SPI1 нужен для работы через внешний загрузчик STLink Utility. Если не использовать внешний загрузчик то конечно можно любой настраивать, только нужно как-то что-то записать

Re: STM32F4xx_SPI_FLASH
Добавлено: Сб мар 28, 2026 9:19 pm
VitGo
я про код записи во флешку со стороны мку..
то что можно через утилиту - это тоже конечно полезно, но скорее для тех кому восстановить данные надо..
я просто думаю как в своем проектике делать хранилище.. и вариант с какой нить spi флешкой пока мне нравиться...
разметить ее как cpm диск и использовать в операционке,
Re: STM32F4xx_SPI_FLASH
Добавлено: Вс мар 29, 2026 9:43 pm
dvk
VitGo писал(а): Сб мар 28, 2026 6:39 pm
ну еще написать подпрограмму записи
Вчера попробовал писать . Эта гадюка ( запись ) , самая замороченная. Нужна ещё очистка , чтение статуса, проверка корректности записи
Вы примерно представляете сколько данных и как часто нужно будет писать ?
контроль износа есть в вашей операционке ? наверное нет
Re: STM32F4xx_SPI_FLASH
Добавлено: Пн мар 30, 2026 8:28 pm
dvk
День добрый.
Перенёс все проверки флагов в подпрограммы
Пришла мысля , можно ли их как-то в макросы обернуть ? А главное как ?))) У меня не получилось слёту
Re: STM32F4xx_SPI_FLASH
Добавлено: Пн мар 30, 2026 11:30 pm
dvk
Сам шучу, сам смеюсь
красненькое , но работает

. Интересно было бы услышать критику такого MACROсофака
Re: STM32F4xx_SPI_FLASH
Добавлено: Чт апр 02, 2026 2:19 pm
dvk
Добавил :
Очистку сектора
Запись страницы
Проверку статуса записи\стирания
Запись одного байта выглядит так.
1 Отправляем команду разрешения записи
2 Проверяем установился ли бит разрешения записи в статус регистре флешки
3 Отправляем команду записи и адрес куда будем писать. Затем один байт(для теста)
4 Проверяем бит занятости в статус регистре флешки. Он показывает что процесс записи\стирания продолжается и другие команды флешка не примет , пока бит не сбросится.
Всё это происходит "очень" долго. Если производить запись не очень часто , то пункт 4 можно исключить или перенести его в начало цикла записи. Пункт 2 тоже не особо нужен , у меня во всех тестах бит WEL (Write Enable Latch) в статус регистре успевал установиться до начала записи.
Можно всё ускорить и настроить под свои нужды