STM32 - проблема только для чтения флэш-памяти QSPI в режиме отображения памяти

В STM32F7, код запускается с внутренней флеш-памяти (по умолчанию), мы можем читать / записывать данные из / во внутреннюю флешку.

Моя проблема: я хочу использовать внешнюю QSPI флэш-память для выполнения кода (режим отображения памяти). Также в этом режиме я хотел бы использовать ту же QSPI флэш-память для хранения данных (т. Е. Сохранение некоторых настроек), пока код выполняется в QSPI флэш-памяти. Но это невозможно, поскольку ST заявляет, что в своем справочном документе (AN4760):

    In Memory-mapped mode the QUADSPI allows the access to the external 
memory for read operation through the memory mapped address region 
(from 0x9000 0000 to 0x9FFF FFFF) and allows the external memory to 
be seen just like an internal memory.

Есть ли какое-нибудь решение моей проблемы (запись данных на QSPI flash) без выхода из режима отображения памяти?

Можно ли QSPI флешку разбить на две части? Один используется для режима отображения памяти, а другой используется только для чтения / записи в него данных.

Примечание. Я не хочу переходить с внешней флэш-памяти на внутреннюю для записи данных, а затем снова переходить на внешнюю флэш-память для выполнения кода.

Любая помощь будет оценена.

Спасибо.


person Fredrick Gauss    schedule 19.08.2020    source источник
comment
Однажды у меня был такой же вопрос. Насколько я знаю, это невозможно. Однако в чем проблема перехода к другой памяти (например, ОЗУ) для выполнения последовательности программирования? Это не сложно реализовать, но достаточно эффективно.   -  person Guillaume Petitjean    schedule 21.08.2020
comment
@GuillaumePetitjean, вы имеете в виду внешнюю SDRAM?   -  person Fredrick Gauss    schedule 22.08.2020
comment
Нет, внутренняя оперативная память. Обычной практикой является размещение некоторых функций в ОЗУ (например, для ускорения вычислений или решения проблем программирования Flash).   -  person Guillaume Petitjean    schedule 25.08.2020


Ответы (3)


Нет, это невозможно. Флэш-память, если она была записана ранее, должна быть стерта, тогда вам нужно войти в режим wirte и записать в память. Флэш-память всегда записывается медленно.

Режим отображения памяти обычно используется для запуска кода из флэш-памяти QSPI или для упрощения доступа для чтения.

person 0___________    schedule 23.10.2020

Я знаю, что это более старый пост, но для справки в будущем:

Вам нужно прекратить выполнение из внешней флэш-памяти, чтобы записать на нее. Возможно, скопировав небольшой блок кода в ОЗУ или выполнив его из внутренней флеш-памяти. Затем переходите к выполнению этого кода. Этот код может отключить внешнюю флеш-память из режима отображения памяти, записать в нее ваши данные, а затем переключить ее обратно в режим отображения памяти. Очевидно, что в это время вам нужно будет отключить все соответствующие прерывания и убедиться, что нет доступа к отображаемой в память флеш-памяти. Также будьте особенно осторожны, чтобы не стереть и не перезаписать код во внешней флэш-памяти, если, конечно, вы этого не хотите!

Этот процесс аналогичен записи во внутреннюю флеш-память, когда вы не можете выполнить из нее во время записи.

person Ashley Duncan    schedule 11.06.2021
comment
Спасибо за ответ. Но ваше последнее предложение заставило меня подумать, что вы указываете, что ситуация схожа как во внутренней, так и во внешней. Хотя здесь ситуация совершенно иная. - person Fredrick Gauss; 14.06.2021
comment
Я имел в виду, что вы можете использовать аналогичный процесс для обновления любой флеш-памяти, которую вы не можете запускать и записывать одновременно. Переместите свой мигающий код в другой блок исполняемой памяти, будь то оперативная память или флэш-память, затем запишите в целевую флэш-память при выполнении из этого блока. - person Ashley Duncan; 15.06.2021
comment
Я думаю, у вас есть недоразумение или недоразумение: когда код выполняется во внутренней флэш-памяти в одном блоке, скажем, A, вы можете изменить другой внутренний блок флэш-памяти, скажем B. Это не случай с внешней флэш-памятью. Я имею в виду, что когда код выполняется во внешнем флеш-блоке, скажем X, вы не можете изменить другой внешний флеш-блок, скажем Y, без полного выхода из режима отображения памяти для внешней флеш-памяти. - person Fredrick Gauss; 15.06.2021
comment
Так бывает нечасто. Только некоторые микросхемы позволяют записывать на другой блок флэш-памяти при чтении другого. И все, что действительно, обычно блокирует доступ к флеш-памяти процессора во время записи. Устройства с двумя флеш-банками могут читать и писать одновременно. Я всегда хочу сказать, что вам нужно прекратить выполнение из внешней флэш-памяти, пока вы пишете на нее. Выполнить из другого места при записи на внешнюю флэш-память. - person Ashley Duncan; 16.06.2021

Вы можете записывать во флеш-память, записывая в регистры quadspi. См. Qspi_write_cmd_addr_data () в https://github.com/micropython/micropython/blob/master/ports/stm32/qspi.c

person passerby    schedule 23.10.2020