为了确保写入HyperFlash(S26HL512T)的数据在TRAVEO™ T2G Cluster 4M Lite开发板复位后持久保存,避免被覆盖,以下是关键步骤和配置说明:
确保写入地址避开关键区域
0x18000000)。0x187F0000)以减少冲突风险。# 链接器脚本片段
FLASH (rx) : ORIGIN = 0x18000000, LENGTH = 0x8000000 /* 128MB 整个HyperFlash */
.user_data 0x187F0000 : {
KEEP(*(.user_data))
} > FLASH正确配置SMIF的初始化流程
// 写入后刷新缓存
if (Cy_SMIF_MemWrite( ... ) == CY_SMIF_SUCCESS) {
// 禁用并刷新数据缓存
CY_SMIF_CTL(SMIF0)->CACHE_CTL &= ~(CY_SMIF_CTL_CACHE_ENABLE_Msk);
__DSB(); __ISB(); // 确保指令完成
}main()初始化时,配置SMIF但不修改数据所在区域的内存映射。确保XIP配置与复位前一致。完整擦除-写入流程
cy_en_smif_status_t status;
uint32_t sectorAddr = 0x187F0000; // 目标地址
status = Cy_SMIF_MemErase(SMIF0, CY_SMIF_WIDTH_OCTAL, sectorAddr, CY_SMIF_FLASH_SECTOR_ERASE);
while (Cy_SMIF_BusyCheck(SMIF0)); // 等待擦除完成uint8_t writeData[256] = { ... }; // 数据需对齐分页
cy_stc_smif_mem_write_params_t writeParams = {
.data = writeData,
.dataSize = 256,
.addr = sectorAddr,
.memoryMappedMode = false // 必须设为false
};
status = Cy_SMIF_MemWrite(SMIF0, &writeParams, CY_SMIF_WRITE_FIRST_BYTE);复位后安全读取数据
main()函数末尾)再读取数据,避开启动代码干扰:void main() {
board_init(); // 基本硬件初始化
init_user_app(); // 用户应用初始化
read_persistent_data(); // 最后读取数据
}uint32_t* dataPtr = (uint32_t*)0x187F0000;
uint32_t storedValue = *dataPtr; // 读取数据cy_en_smif_status_t smifStatus = Cy_SMIF_Init(SMIF0, &smifConfig, 166000000);if (Cy_SMIF_IsOperationComplete(SMIF0, CY_SMIF_FLASH_CHECK_COMPLETION, 1000) != CY_SMIF_SUCCESS) {
// 处理超时错误
}0x187F0000 查看数据。按照以上步骤配置,可确保HyperFlash中的数据在复位后持久保留。重点在于避开关键地址区域、正确擦除写入以及复位后谨慎初始化SMIF。
举报
更多回帖