#ifndef __BSP_FLASH_H__ #define __BSP_FLASH_H__ #include "CH58x_common.h" /*CH584具有data_flash和code flash两部分。 codeflash为448k dataflash为32k CodeFlash读操作是有硬件加扰的,也就是擦除后读不是全FF,而是四个固定字节的循环,DataFlash读操作没有硬件加扰 CodeFlash和DataFlash都可以直接指针读数据(指针读经过硬件加扰)。 0x00000000-0x0006FFFF 用户应用程序存储区 CodeFlash 448KB 0x00070000-0x00077FFF 用户非易失数据存储区 DataFlash 32KB 0x00078000-0x0007DFFF 系统引导程序存储区 BootLoader 24KB 0x0007E000-0x0007FFFF 系统非易失配置信息存储区 InfoFlash 8KB */ /*BLE蓝牙falsh写入注意地址是相对于dataflash的,而dataflash的起始地址是0x3FFF,所以传入的参数是0x3FFF+offset 并且不要覆盖原有的参数 https://www.cnblogs.com/JayWellsBlog/p/18223898 接口中的读/写buff缓存在ram中的地址,一定要4字节对齐,否则可能导致hardfault复位 问题排查 https://www.cnblogs.com/iot-fan/p/16053937.html */ #define DATA_FALASH_START_ADDR (0X3FFF) // 传入的是相对地址,用对函数即可 #define DATA_FLASH_PAGE_SIZE (256U) #define FLASH_MAC_INFO_LEN (6U) #define FLASH_MAC_NUM_LEN (1U) #define FLASH_INFO_WRITE_FLAG_LEN (4U) #define FLASH_INFO_ADDR (DATA_FALASH_START_ADDR) #define FLASH_MAC_INFO_START_ADDR (DATA_FALASH_START_ADDR) // 绝对地址 #define FLASH_MAC_1_ADDR FLASH_MAC_INFO_START_ADDR #define FLASH_MAC_2_ADDR (FLASH_MAC_1_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_3_ADDR (FLASH_MAC_2_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_4_ADDR (FLASH_MAC_3_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_5_ADDR (FLASH_MAC_4_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_6_ADDR (FLASH_MAC_5_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_7_ADDR (FLASH_MAC_6_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_8_ADDR (FLASH_MAC_7_ADDR + FLASH_MAC_INFO_LEN) #define FLASH_MAC_NUM_ADDR (FLASH_MAC_8_ADDR + FLASH_MAC_INFO_LEN) // 用来记录有效的mac地址数量 #define FLASH_INFO_WRITE_FLAG_ADDR (FLASH_MAC_NUM_ADDR + FLASH_MAC_NUM_LEN) #define FLASH_INFO_WRITE_FLAG_VAL (0XAABBCCDD) int Flash_Set_Mac_Addr(uint8_t *mac_addr, uint8_t number); int Flash_Get_Mac_Addr(uint8_t *mac_addr, uint8_t number); int Flash_Set_Valve_Num(uint8_t valve_num); uint8_t Flash_Get_Valve_Num(void); void BSP_FLASH_Init(void); #endif // !__BSP_FLASH_H__