你好,我这边使用boot里面使用C40写flash大概率失败,我写300K左右的bin程序,经常在第9包数据,也就是第二个块就失败,1/10可能性完整通过,请帮我看一下是不是C40是不是使用有问题,写的主要程序
Flash_UnlockSectorIfProtected(cur_sector);
DisableAllInterrupts();
DisEnableIrq1();
if (Flash_Write(flash_write_addr + offset, &payload[2], FIXED_PACKET_DATA_LEN) != 0) {
EnableIrq1();
EnableAllInterrupts();
}
EnableIrq1();
EnableAllInterrupts();
我使用Power_Ip_MC_ME_SocTriggerResetEvent(POWER_IP_DEST_RESET_MODE);复位有没有问题,怎么避免8次后连续复位,跳转函数
func = *(uint32_t volatile *)(ADDR_APP + 0xC);
func = *(uint32_t volatile *)(((uint32_t)func) + 0x4);
func = ((((uint32_t)func) & 0xFFFFFFFFU)); // Reset_Handler+1 --> required to avoid hard fault
(* (void (*) (void)) func)();复位和跳转后会不会有之前程序的数据残留,需要清理ram吗,如果需要怎么清理。麻烦了
Hi@LJH1
做一个最简单可以复现问题的demo给我,方便我复现你们的问题,我不要你们的完整产品工程或者是零散的驱动文件。
RTD公司统一使用的4.0.0
离线烧录两个程序,一起复现快:首次boot直接跳app,app快闪30s进入boot,擦写1s闪烁,一共300次,没问题复位,有问题就常亮或长灭。
Hi@LJH1
你的程序太乱了,我完全没办法帮你测试。
我按照你测试的逻辑,写了一个测试程序
从地址0x1000A000开始的8KB空间,每次写入128byte,地址连续写入64次共8KB,连续300次。
(128 * 64 * 300)。
你要改一下时钟,因为我用的是S32K311EVB-Q100,外部时钟晶振是16MHz.