#include #include #include "flash_map.hpp" #include "main.h" #include "project_configs.h" static uint32_t m_sector_num = 0; namespace iflytop { uint32_t* zsimple_flash_get_add(int sector_num) { switch (sector_num) { case 0: return (uint32_t*)Z_FLASH_SECTOR_00_ADDR; case 1: return (uint32_t*)Z_FLASH_SECTOR_01_ADDR; case 2: return (uint32_t*)Z_FLASH_SECTOR_02_ADDR; case 3: return (uint32_t*)Z_FLASH_SECTOR_03_ADDR; case 4: return (uint32_t*)Z_FLASH_SECTOR_04_ADDR; case 5: return (uint32_t*)Z_FLASH_SECTOR_05_ADDR; case 6: return (uint32_t*)Z_FLASH_SECTOR_06_ADDR; case 7: return (uint32_t*)Z_FLASH_SECTOR_07_ADDR; case 8: return (uint32_t*)Z_FLASH_SECTOR_08_ADDR; case 9: return (uint32_t*)Z_FLASH_SECTOR_09_ADDR; case 10: return (uint32_t*)Z_FLASH_SECTOR_10_ADDR; case 11: return (uint32_t*)Z_FLASH_SECTOR_11_ADDR; default: assert_param(0); } return 0; } static HAL_StatusTypeDef pri_earse_sector() { HAL_StatusTypeDef status; uint32_t sector_error_point; FLASH_EraseInitTypeDef flash_erase_structer = { // .TypeErase = FLASH_TYPEERASE_SECTORS, // .Sector = m_sector_num, // .NbSectors = 1, // .VoltageRange = FLASH_VOLTAGE_RANGE_3 // }; HAL_FLASH_Unlock(); // 解锁 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); // 清除一些错误标志 status = HAL_FLASHEx_Erase(&flash_erase_structer, §or_error_point); HAL_FLASH_Lock(); // 上锁 return status; } void zsimple_flash_init(uint32_t sector_num) { m_sector_num = sector_num; } void zsimple_flash_read(uint8_t* data, size_t len) { memcpy(data, zsimple_flash_get_add(m_sector_num), len); } void zsimple_flash_write(const uint8_t* data, size_t len) { pri_earse_sector(); uint32_t* from = (uint32_t*)data; uint32_t* to = (uint32_t*)zsimple_flash_get_add(m_sector_num); uint32_t writesize = len / 4; //HAL_StatusTypeDef status; HAL_FLASH_Unlock(); // 解锁 for (size_t i = 0; i < writesize; i++) { //status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, (uint32_t)to, *from); from++; to++; } HAL_FLASH_Lock(); // 上锁 } } // namespace iflytop