Я использую 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 КБ во флэш-памяти.