最近在研究单片机远程升级方法,看了网上许多资料后了解到,远程升级就是用IAP方法去烧写flash区,而IAP方法在EEPROM中有用到,也就是所说的掉电记忆,掉电不丢失的情况,而相较于51单片机,网上的资料大多是有关STM32单片机的,且使用操作系统,适合于芯片内存较大的芯片,分区成3-4块,首先是BOOT引导区,在此判断是否需要升级程翠,不需要则跳转到正常程序入口处执行,需要则跳转到升级程序处执行(正常程序和升级程序分别保存,需要两块FLASH区域,防止升级过程中失败变砖),其次就是这两个程序区,最后是掉电记忆区(EEPROM),也可以记录些程序区的状态,如校验和值,长度等。
查阅芯片手册后发现SC系列51单片机芯片可以用IAP方法烧写整个FLASH区,而某些芯片没有开放,只能用IAP去烧写EEPROM区,且与FLASH独立出来,所以考虑用SC芯片实现BootLoad方法,用WIFI模块串口发送数据,去升级主控芯片程序。
由于我使用的芯片内存较小,不适合双分区去保存程序,故只将flash分成boot引导区和程序区,BootLoad实现方法大致如下
其中最主要的步骤是分配FLASH空间和设置中断重映射,分配空间在keil设置里
在启动文件STARTUP.A51插入跳转指令(中断重映射),keil配置里配置相关地址
设置跳转地址时注意加上重映射后的中断地址,600H+100H=700H才是最后的boot引导程序跳转到的用户程序的运行地址。