今天继续研究BOOTLOAD内容,前两天已经把单区BOOTLOAD研究完了,今天开始研究双区下载,双区优点在于下载程序时不怕因为断电下载失败而导致程序死机,可以继续运行上一次的APP程序,但是会消耗更多的FLASH空间,正常双区构想是将FLASH空间分为三部分,依次为BOOT、APP1、APP2,下载时先把程序下载到APP2区进行备份,下载完毕后对程序大小进行校验,校验通过后,再将APP2区的代码复制到APP1区运行,至此升级过程完成。
还看到了另一种的双区做法,就是主控芯片FLASH空间不够备份时,可以把程序下载到模组中,如wifi模组,在模组中缓存下来,下载完成后再拷贝到APP区。
今天研究SC92系列双区做法,把主控芯片空间压缩,分为两个APP区,每个5k大小,尝试双区升级。做法为上电执行BOOOT自检,检查EEPROM空间内容,00H存APP1信息,01H存APP2信息;若检查结果为APP2为更新完成标志,此时将APP1状态更新为更新中标志,再执行复制程序,将APP2程序区间内容拷贝到APP1区间内,拷贝完成后,再将APP1状态更新为更新完成标志,APP2状态更新为更新中标志,复位重新自检,此时跳转到APP1程序内,同时一直接收指令信息,接收到BOOT指令时,复位进入到BOOT程序内(不改变APP1和2状态信息,若接收过程出现故障再次复位则进入APP1程序正常执行),接收到数据下载指令后,将APP2状态更新为更新中标志,直至接收完成后再将APP2状态更新为更新完成标志,复位自检重复上述过程。
但是程序配置好后,将BOOT和APP1程序下载到板子上时正常运行,通过IAP指令下载程序到APP2区,再将APP2区程序复制到APP1区复位后进入到APP1程序内,无法正常运行,BOOT区完好。不知道哪里出现了问题,无法查看芯片的FLASH数据,估计是再复制过程中出现了问题,因为直接下载到APP区是可以正常运行的。明天再看看到底是哪里的问题。