正在开发基于CAN的28377S在线升级,根据论坛的经验帖,大部分已经做出来了。思路如下,进入bootloader前的coderstart,首先判断需不需要升级,需要升级,进入升级状态,通信完成新的APP的接收,存入,升级成功后,进入APP运行。如果不需要升级,就直接跳转APP。
对于APP,成功运行后,升级状态标记为不用升级状态。如果接收升级指令后,能够改变升级标志。利用看门狗软件重启进入升级程序,进行判断,进而升级程序。
我已经完成了bootloader的接收程序和跳转,跳转到APP后还能发送升级指令成功返回到bootloader。但是如果程序运行在APP的时候按下复位按钮,程序会将进入异常中断,如果在APP运行的时候发送指令返回到bootloader再复位就不会有这个问题。
我进行了单步调试,发现运行在APP的时候按下复位按钮,FLASH_ECC会莫名奇妙的使能,然后触发NMI,这个和debug的时候restart的效果相同。但是一旦我使用debug的CPU reset,就不会有ECC的问题。我已经把APP和bootloader里面的ECC都关掉了,APP还屏蔽了Initflash()。不知道问题出在哪。请各位指教。