一种基于IAP在线升级待升级固件传输校验设计方法
技术领域
本发明属于固件更新技术领域,特别涉及应用于IAP在线升级中数据传输校验方法。
背景技术
人在微处理器领域,固件更新基本可以分为2类,分别是在系统编程,就是利用烧录仿真工具对微处理器进行flash擦写从而达到更新固件的目的,虽然这种方式速度快、操作简单,但是需要繁琐的接线、把最小系统板取下甚至整个系统取下来烧录。为以后修复固件bug埋下了需要较高成本的隐患。
另一种方式就是在应用中编程,即IAP。许多微处理器都提供IAP在线升级功能,运行代码可以在APROM,LDROM和SRAM之间切换而不用复位系统。用户通过设定芯片启动选项来决定微处理器从bootloader启动,通过上位机或者某种传输方式把待升级的固件传输给bootloader,由bootloader来对微处理器进行IAP。既然是数据传输就涉及到数据传输的正确性问题和如何进行数据校验。
通常做法是在升级的过程中边写边读来达到确定数据传输正确的目的,这种方式虽然一定程度上保证了数据正确,但是不可避免的带来了升级速度慢的问题,影响效率。
如专利申请201210428285.X公开了一种用户程序在线升级系统和升级方法,所述方法包括:单片机上电或复位后,读取存储器中的烧录标识;若烧录标识为数值A,则运行存储器中的IAP程序,对存储器中的用户程序进行在线升级;若烧录标识为数值B,则运行存储器中的用户程序;在运行用户程序时,若接收到烧录指令,则更改烧录标识为数值A后,进行软复位。由于单片机在运行用户程序时若接收到烧录指令,则将烧录标识修改为数值B后,复位单片机;单片机在复位后根据烧录标识执行IAP程序,实现用户程序的在线升级。此过程中,主机不必通过硬件管脚来控制对单片机用户程序的升级,从而节省了管脚资源。
然而,该专利申请中虽然利用IAP程序进行在线升级,但是仅仅通过烧录标识进行复位,数据传输正确虽然得到保证,但是数据传输速度慢,效率低。
发明内容
基于此,因此本发明的首要目地是提供一种基于IAP在线升级待升级固件传输校验设计方法,该方法确保数据传输正确的基础上提高效率,加强数据正确性、解决效率问题、提高系统可维护性。
本发明的另一个目地在于提供一种基于IAP在线升级待升级固件传输校验设计方法,该方法具有固件版本管理功能,具有在线升级的功能(IAP),能够让用户可以升级固件而不必将模组从板子上取下,便于操作。
为实现上述目的,本发明的技术方案为:
一种基于IAP在线升级待升级固件传输校验设计方法,其特征在于该方法首先设计IAP范围的最后1k地址用作数据校验区和用户存储特定数据区,IAP传输流程如下:
101、主控拉低微处理器的RESET脚,并维持1ms,然后拉高,等待5ms以便微处理器完成复位;
102、主控通过I2C向微处理器的0x0000寄存器写入升级命令,等待2s;
进一步,该步骤中,微处理器会擦除APROM存储的整个Flash区域。
103、将待升级的固件进行分组,每次写入一组,每组写入间隔10ms,间隔时微处理器将数据写入Flash;
所述分组,是指以512字节为单位进行分组,不足512字节则补0凑齐,操作地址从0x0000开始(即第一组0x0000,第二组0x0200,依次类推)。
104、向0xEC00地址发送固件校验码;
所述固件校验码为512字节。
106、读APROM版本号,如果一致,则重新上电后进入APP或者发送进入APP命令向微处理器的0x0000写入相应的字节跳过烧写命令。
进一步,所述写入相应的字节跳过烧写命令是写入4字节跳过烧写命令0x7E,0xE7,0xEE,0x77。
进一步,固件校验设计方法为:以倒数第2分组为存放APROM程序版本号与APROM各代码段校验码。
更进一步,校验规则设计如下:
1).校验值设计为数据的和值校验,数据校验值数据宽度为1byte,不够512字节的段补0xFF;
2).求和值=代码段1校验值+代码段2校验值+…+代码段n校验值(n就是byte4值),求和值为2字节,其中:
APROM主版本号=求和值的高8;
APROM副版本号=求和值的低8;
3).主版本号异值=APROM主版本号^0xFF;
副版本号异值=APROM副版本号^0xFF;
4).APROM代码段个数=待升级的bin文件/512字节(即APROM代码段个数=bin文件里面的字节总数除以512,不足512字节的作为一段);
5).本数据区校验值(byte511值)=byte0+byte1+byte2+…+byte510,取低8位,假如只有50段,则代码段51校验值~byte510补充0xFF;
6).主机通过下发读取0xFFFF地址可以读APROM版本号、boot版本号和校验区第511字节。
本发明所实现的基于IAP在线升级待升级固件传输校验设计方法,具有以下效果:
1、具有提高数据正确性、提高固件更新效率。
2、具有固件版本管理功能。
3、具有在线升级的功能(IAP),让用户可以升级固件而不必将模组从板子上取下,便于操作及升级。
附图说明
图1是本发明所实施的IAP升级地址示意图。
图2是本发明所实施的IAP传输流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的实施包括固件传输设计及IAP传输。
以芯海科技CSA37F60 32位微处理器为例,见图1所示,固件传输设计方法中IAP升级地址设计为:APROM地址范围0x0000~0xEFFF,则设计IAP范围0x0000~0xEC00(不包括0xEC00地址),最后1k地址用作数据校验区和用户存储特定数据区。即待更新的固件最大是59k,所以bin文件最大只能59k,其中0xEC00~0xEE00(不包括0xEE00)设计为bin校验区,512字节,0xEE00~0xEFFF设计为数据存储区,比如设备ID、boot版本、用户特殊数据等。
见图2所示,是本发明所实现的IAP传输流程,步骤如下:
101、主控拉低CSA37F60的RESET脚,并维持1ms,然后拉高,等待5ms以便CSA37F60完成复位;
102、主控通过I2C向CSA37F60的0x0000寄存器写入4字节升级命令0xAA,0x55,0xA5,0x5A,等待2s(在此期间CSA37F60会擦除APROM存储的整个Flash区域);
103、将待升级的固件以512字节为单位进行分组,不足512字节则补0凑齐,每次写入一组,操作地址从0x0000开始(即第一组0x0000,第二组0x0200,依次类推),每组写入间隔10ms(等待CSA37F60将数据写入Flash);
104、向0xEC00地址发送固件校验码,512字节;
105、读APROM版本号,一致,重新上电后进入APP或者发送进入APP命令向CSA37F60的0x0000写入4字节跳过烧写命令0x7E,0xE7,0xEE,0x77。
固件校验设计方法为:以0xEC00(倒数第2块512)为存放APROM程序版本号与APROM各代码段(512为1段)校验码。目前设计格式见表1。
表1校验规则设计如下:
1).校验值设计为数据的和值校验,数据校验值数据宽度为1byte,如代码段1的校验值为512个字节数据相加值(低8位)。不够512字节的段补0xFF。
2).求和值=代码段1校验值+代码段2校验值+…+代码段n校验值(n就是byte4值)。求和值为2字节,其中:
APROM主版本号=求和值的高8;
APROM副版本号=求和值的低8;
3).主版本号异值=APROM主版本号^0xFF;
副版本号异值=APROM副版本号^0xFF;
4).APROM代码段个数=待待升级的bin文件/512字节(即APROM代码段个数=bin文件里面的字节总数除以512,不足512字节的作为一段)。
5).本数据区校验值(byte511值)=byte0+byte1+byte2+…+byte510,取低8位,假如只有50段,则代码段51校验值~byte510补充0xFF。
6).主机通过下发读取0xFFFF地址可以读APROM版本号、boot版本号和校验区第511字节。
表1
当IAP成功后会更新校验区。主机在发送升级数据完成后,可再次读取APROM版本号,若正确可下发命令切换允许APROM程序。
在模块收到升级命令后即进入bootloader后DRDY引脚会拉高并保持在整个IAP过程中,当进入APP应用程序后DRDY引脚会初始化输出低,也可以发送查询模块运行模式命令查询模块是在IAP阶段还是在APP阶段,如果长时间在IAP阶段,主机要考虑IAP失败。
因此,本发明所实现的基于IAP在线升级待升级固件传输校验设计方法,具有以下效果:
1、具有提高数据正确性、提高固件更新效率。
2、具有固件版本管理功能。
3、具有在线升级的功能(IAP),让用户可以升级固件而不必将模组从板子上取下,便于操作及升级。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。