当前程序结构:
bootloader:sector0~sector1,上电启动此程序,判断app_temp有程序则擦除app区域,复制app_temp数据至app区域后擦除app_temp区域,然后跳转至app
app:sector2~sector8,当前app程序,接收到升级指令时擦除app_temp区域,将接收的数据写入app_temp区后利用看门口重启DSP
app_temp: sector9~sector15,用于升级的临时app区
上位机与DSP通讯,发送程序bin数据,app中擦除指定app_temp后将接收的bin数据写入app_temp。
当上位机连续不中断的发送完成整个bin文件后,DSP能正常擦除、编程、跳转。
当上位机发送数据的过程中,关闭上位机,此时只写入了一部分数据到app_temp中。
后续如果尝试重新下载程序,则DSP会在擦除有数据的扇区时复位,Debug发现此时程序进入ESTOP0。
利用CCS强制下载app程序同时擦除app_temp区,则可以继续用上位机下载程序。
请问当app_temp中有数据的时候,app程序中想要擦除app_temp为什么会失败?
现在解决办法是修改bootloader代码,其上电后先进行正常升级判断,最后不管进行了升级都擦除app_temp区域。
这样当app在升级时中断,再次下载程序时会导致dsp重启进入bootloader擦除app_temp区域,此后再次下载程序就可以正常擦除。