一种单片机的自定义升级方法
技术领域
本发明涉及单片机
技术领域
,具体涉及一种单片机的自定义升级方法。背景技术
随着单片机技术的广泛运用,自定义升级就显得越来越重要,一般情况MCU的厂家会给我们提供内置的引导程序(BOOTLOADER),但是这种需要额外控制BOOT脚或者一上电就需要通过串口(或其他接口)进行握手,握手成功后进入引导程序,但是这种对时序和操作要求比较严格,不利于操作。而且目前的厂家的升级方式都是边接收边升级而且不能自定义协议,所以很难避免在升级过程中不出现错误造成成功率不高,并且有不能进行整体校验后再进行升级的弊端。
也就是说,现有的单片机升级方法在升级过程中容易出错,造成升级稳定性、安全性差。
发明内容
针对现有技术存在的问题,本发明的目的在于提供一种单片机的自定义升级方法,其可以有效提高升级的稳定性和安全性。
为实现上述目的,本发明采用的技术方案是:
一种单片机的自定义升级方法,其包括以下步骤:
上位机启动更新升级;
按住单片机的BOOT按键,单片机上电;
上位机将固件前导帧发送至单片机,单片机的引导程序区进行接收并校验,校验正确后存入内存;
在单片机完成固件前导帧的接收后,上位机继续发送数据帧至单片机,单片机的引导程序区继续接收数据帧并进行校验,校验正确后存入缓冲区;
当完成固件数据帧的接收后,将缓存区中的数据帧存入单片机内存,进行IAP编程,运行APP区,即可实现单片机的升级。
所述单片机在完成固件前导帧和数据帧的接收之后,向上位机反馈接收完成的信息。
所述单片机的引导程序区接收数据具体如下:
检查到单片机有接收到数据时,将数据存入缓冲区;定时到产生一个帧结束事件,进行数据解析,判断该帧是固件前导帧还是固件数据帧;
若是固件前导帧,则进行校验,校验正确后将固件起始地址、长度、校验存入内存;
若是数据帧,进行校验,校验正确后,将当前帧的基地址、长度、校验存入内存,当前帧的具体数据存入缓冲区;当接收完所有固件数据帧后,对固件数据帧进行整体校验,校验正确后,将缓冲区的数据存入内存中,进行IAP编程,运行APP区。
所述单片机在接收固件前导帧和数据帧时,采用查询方法收集上位机发送的数据。
所述固件前导帧包括特征字节和校验字节。
所述固定前导帧的校验字节包括固件和字节、起始高地址字节、低地址字节、固件长度高地址字节、固件长度低地址字节、异或校验值字节。
所述固件数据帧包括特征字节、校验字节和数据字节。
所述固件数据帧的校验字节包括本帧固件基地址的高地址字节、本帧固件基地址的低地址字节、本帧固件基地址的高地址字节、本帧固件的低地址字节、本帧固件的校验和字节、异或校验值字节。
采用上述方案后,本发明设置了BOOT按键,在上电之前按住BOOT按键,再给主板上电,主板检测到按键被按下的状态后,直接进入引导程序状态,这样无需考虑上位机和单片机之间的时序问题,可以大幅减少了握手的难度。而且,单片机在接收升级固件文件时,在固件文件接收完成之前,固件数据帧的数据字节都存储在缓冲区中,等到固件文件接收完成之后,才将缓冲区中的数据存入内存中,并进行IAP编程,进行单片机的升级,从而避免在升级过程中出现错误,提高单片机升级的安全性和稳定性。
附图说明
图1为本发明整体流程图;
图2为上位机的发送流程图;
图3为单片机的程序引导流程图;
图4为单片机BOOT按键电路图。
具体实施方式
如图1-3所示,本发明揭示了一种单片机的自定义升级方法,其通过长按BOOT按键引导上位机与单片机的握手,进入升级状态后等待固件全部接收完毕且校验成功后才进行升级。本发明具体包括以下步骤:
步骤1、连接上位机和单片机的串口线,并启动更新。
步骤2、按住单片机的BOOT按键,并给单片机上电。图4为BOOT按键的电路图,图中,按键s1即为BOOT按键,本发明在上电之前按住BOOT按键,再给主板上电,主板检测到按键被按下的状态后,直接进入引导程序状态,这样无需考虑上位机和单片机之间的时序问题,可以大幅减少了握手的难度。
步骤3、上位机将固件前导帧发送至单片机,单片机的引导程序区进行接收并校验,校验正确后存入内存。
步骤4、在单片机完成固件前导帧的接收后,上位机继续发送数据帧至单片机,单片机的引导程序区继续接收数据帧并进行校验,校验正确后存入缓冲区。
步骤5、当完成固件数据帧的接收后,将缓存区中的数据帧存入单片机内存,进行IAP编程,运行APP区,即可实现单片机的升级。
上述步骤3和步骤4中,固定前导帧和固件数据帧共同构成固件,该固件就是用来进行单片机升级的文件。本实施例中,固件为hex文件。单片机在完成固件前导帧和数据帧的接收之后,向上位机反馈接收完成的信息。
固件前导帧包括特征字节和校验字节,特征字节用于供单片机确认其为固定前导帧,校验字节包含了固件的相关信息,用于供单片机对接收到的固件数据帧进行校验。本实施例中,固件前导帧的格式如下:第0字节到第9字节为固定的特征字节,具体的数值为0x00、0x11、0x22、0x33、0x44、0x55、0x66、0x77、0x88、0x99共10字节,第10字节为固件和,第11字节为固件的起始高地址、第12字节为固件低地址、第13字节为固件长度高地址、第14字节为固件长度低地址、第15字节为前面15字节的异或校验值。上述第0字节到第9字节可以自行设定,并不限定为上述所列数值。
所述固件数据帧包括特征字节、校验字节和数据字节,其中,特征字节是用来表示该帧数据的类型为固件的数据帧;校验字节则用来校验该数据是否正确;数据字节则用来进行单片机升级的数据。本实施例中,固件数据帧的格式如下:7+N字节,7字节为固定字节,N字节为具体数据。7字节的固定字节的第0字节为特征字节固定为0x46,同样,该第0字节的数值可以自行设置,并非限定为所列举的数值。第1字节为本帧固件基地址的高地址、第2字节为本帧固件基地址的低地址、第3字节为本帧固件长度的高地址、第4字节为本帧固件的低地址、第5字节为本帧固件的校验和、第6字节为前面6字节的异或校验值。N字节固件数据的长度值和校验值由固定字节的相应内容决定。
如图3所示,所述步骤3和步骤4中,单片机的引导程序区采用查询方法收集上位机发送的数据。具体如下:
每隔500US对串口的状态寄存器进行查询,检测到状态位改变就直接把数据存入缓冲区,当超过50MS没有收到下一个数据,产生一个帧结束事件。再进行数据解析,判断该帧是固件前导帧还是固件数据帧。若是固件前导帧,进行相应的校验,校验正确后把固件起始地址、长度、校验存入内存。如果是数据帧,对前面7字节字进行校验,校验正确后把当前固件帧的基地址、长度、校验存入内存,把N字节的固件的数据先存入缓冲区,缓冲区可以由外部的EEPROM或FLASH组成。当接收完整固件后,就可以对固件进行整体校验,校验正确后,将缓冲区内的数据存储至单片机内存中,然后进行在运用编程(IAP编程)。IAP编程结束后对APP区的中断向量表进行重映射,如果单片机支持寄存器设置中断向量偏移就直接设置、如果不能支持寄存器设置,就对中断的跳转地址进行重映射,使之能跳转到APP区的中断对应入口。
综上,本发明的单片机在接收升级固件文件时,在固件文件接收完成之前,固件数据帧的数据字节都存储在缓冲区中,等到固件文件接收完成之后,才将缓冲区中的数据存入内存中,并进行IAP编程,进行单片机的升级,从而避免在升级过程中出现错误,提高单片机升级的安全性和稳定性。
以上所述,仅是本发明实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:计算机软件功能的动态扩充方法