Other Parts Discussed in Thread: UNIFLASH
器件型号: TMS320F280039C
Thread 中讨论的其他器件: UNIFLASH
问题:
MCU 在每次引导时卡在连续 NMI 复位循环中。
调试后的结果:
memcpy() 注释掉从闪存读取的调用后、MCU 会启动并正常运行、不会进行任何复位。 这强烈建议正在读取的闪存扇区已损坏、并在每次 memcpy() 访问时触发不可纠正的 ECC 错误。 另外、如果我通过使用 CCS/Uniflash / C2prog Tools 擦除整个闪存来再次刷写代码、损坏的扇区也可以正常使用 memcpy ()
使用的代码行如下所示:
2. mcal_flash_init();
mcal_flash_sector_erase (0x000AF000);
mcal_flash_program_autoecc_SECTOR (0x000AF000、(uint32_t *) 缓冲器、sizeof(结构 mdata_t));
3. void app_meta_data_flash_write(结构 mdata_t *buffer ) 是根据应用的要求使用的
我已经了解使用闪存 API 所需的所有文档/数据表。
这是在我们使用的应用程序上随机发生的、未找到发生顺序。 目前我无法重新创建闪存损坏。 请帮助重新创建闪存损坏
struct mdata_t{
uint16_t image_present;
uint16_t reset_cause;
uint32_t battery_unique_key;
};
void app_meta_data_flash_write(struct mdata_t *buffer)
{
mcal_flash_sector_erase(0x000AF000);
mcal_flash_program_autoecc_sector(0x000AF000, (uint32_t *)buffer, sizeof(struct mdata_t)); // size is 8 words
}
void app_meta_data_flash_read()
{
memcpy(&mdata, (uint16_t *)0xAF000, sizeof(struct mdata_t));
}
void app_meta_data_flash_init()
{
mcal_flash_init();
app_meta_data_flash_read();
}