не много не по секторам, но про эмуляцию.
Модернизировал то, что написано STM, добавил возможность писать не только 16, но и 8 и 32 битные данные (выбирается через дефайн).
И запустил их тестовый проект. Так вот, при записи 16 битных и 32 битных данных, проблем нет, а при записи 8-ми битных данных при переходе с одной страницы на другую страницу, заполненная страница не всегда полностью очищается, что приводит к дальнейшему неверному чтению данных.
Это происходит в ф-ции EE_PageTransfer(...) , где страница очищается ф-цией
Код
flash_status = FLASH_EraseSector(old_page_Id, VOLTAGE_RANGE);
Если ставить точки останова в ф-ции EE_PageTransfer(...), не важно в каких местах, то такой проблемы нет.
Другой вариант решения этой проблемы добавлением инструкции __DSB() или задержки (хватило где-то 35 NOPов)
Код
static uint16_t EE_PageTransfer(uint32_t v_addr, uint32_t data)
{
...
flash_status = FLASH_EraseSector(old_page_Id, VOLTAGE_RANGE);
__DSB();
...
}
либо отредактировать FLASH_EraseSector() в конце дописать __DSB(), на всякий случай