STM32F746ZG - Как обновить некоторую часть сектора 256 КБ во флэш-памяти - PullRequest
0 голосов
/ 01 июня 2019

Я использую STM32F103 и перемещаю свой код в STM32F746. F103 смог обновить Flash для каждой страницы в 1 КБ и 2 КБ. У меня есть STM32F746ZG Nucleo-Board и мой размер кода большой, флеш-память заняла 0x08038000. Я хочу сохранить другие небольшие приложения на 0x08040000 (sector_5). Это приложение состоит из нескольких размеров 2 КБ. Мне нужно хранить несколько приложений в Sector_5, и M7 не может использовать Flash с шагом 1 КБ или 2 КБ.

Ниже приведены размеры секторов STM32F746ZG.

#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08008000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08010000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x08018000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08020000) // 128 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08040000) // 256 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08080000) // 256 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x080C0000) // 256 Kbytes

STM32F746 состоит из флэш-памяти с размером сектора 256 КБ каждый от Sector_5 до Sector7. Если я хочу использовать Sector_5, я должен стереть весь один сектор. Что, если я хочу обновить только около 2 КБ в передней части Sector_5 и сохранить область после 2 КБ нетронутой? Это означает, что я обновляю содержимое только с 0x08040000 до 0x08042000. Я должен держать от 0x08042001 до 0x0807FFFF.

Я не могу даже скопировать 256 КБ Flash в RAM. Поскольку у F746 только 240 КБ встроенной оперативной памяти, и многие мои задачи уже использовали оперативную память, поэтому для копирования одного сектора недостаточно оперативной памяти. В этом случае, пожалуйста, дайте мне знать, как обновить часть 256 КБ во флэш-памяти.

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

В технологии флэш-памяти ST невозможно обновить нигде в секторе, не удалив его сначала.Поэтому, если в первых 2 КБ есть контент, вы не можете обновить его, не удалив остальную часть сектора.

Одна из возможностей состоит в том, что вы можете сохранить один сектор как временный буфер и никогда не использовать его для реального хранения.Допустим, вы используете для этого сектор 7.Поэтому, когда вы хотите обновить сектор 5, стереть сектор 7, скопировать сектор 5 в сектор 7, а затем стереть сектор 5 и скопировать соответствующий контент обратно.

Другая возможность - добавить для этой цели внешнюю EEPROM или SRAM.,SPI-флэш-память EEPROM довольно недорога и имеет типичные 100 000 циклов записи, поэтому также идеально подходит для этого использования.

0 голосов
/ 01 июня 2019

Это зависит.На многих микроконтроллерах STM32 вы можете обнулять биты FLASH, не стирая их.Но вы, конечно, не можете установить биты - это может быть сделано только с помощью операции стирания.Некоторые чипы не позволяют этого, поскольку у сектора флэш-памяти есть свой собственный CRC.

Если ваша микросхема позволяет выполнять запись во флэш-память, заполненную 0xff, вы можете сохранить данные в другом месте этого сектора.Если нет, вам нужно скопировать данные в другой сектор, стереть сектор и записать данные обратно.

...