51单片机IAP在线升级
爱矽半导体E85F3325单片机IAP在线升级教程,此处可查看更新及demo下载
文章目录
前言
扩展-IAP 主要用于产品出厂后应用程序的更新作用 ,类似于其他引导装载升级程序的方法,在系统中必须始终
存在一段用于程序装载的代码(bootloader),该代码在启动时被运行。其基本功能是根据外部条件来判断是运
行现有版本的程序还是从主机下载新程序。可用于使用串口下载器替换专用下载器进行下载,硬件设备的软件
的远程升级等功能。
一、ROM资源
如图0x0000到0x3fff为程序空间,可将程序空间进行分配,此处分为两个空间分别存储两个程序,共两个工程,一段为BootLoader(引导加载程序),一段为application(用户程序),MCU启动先执行BootLoader程序,检测有无升级标志位,再跳转入application程序执行,因此将BootLoader程序放在MAIN FLASH 空间最前面,芯片上电既运行BootLoader程序,再由BootLoader程序跳转到app程序执行。例程程序为BootLoader,空间分配为0x0000-0x0A00,共2.5k程序空间作为BootLoader程序存放空间 。0x0A00-0x3FFF空间可用作app空间。
二、KEIL有关知识
本例程使用keil作为编译工具,keil已经为我们做好了程序空间分配的相关功能,并能使用相应的连接器连接程序代码,不同的连接方式储存空间的分配方式不同,下面介绍keil的两种链接器。
Keil连接器介绍:keil有两种连接器,一种为BL51是keil默认连接器,一种为LX51是BL51扩展连接器,两种连接器均可设置keil代码存放空间。以下图片均可作为例程APP代码配置。
1.BL51连接器:
在device选项卡中去掉LX51的√即选用BL51连接器,即可选用KEIL默认链接器BL。
在BL51locate选项卡中,Use memory layout from target dialog选项为使用默认代码存放位,代码存放地址为0x0000起始开始,去掉勾后可改变代码存放地址,code range为代码存放地址,即ROM空间,xdata为RAM空间分配,可默认,跳转后可重新分配,如:
2.LX51连接器:
在device选项卡中勾上LX51的√即选用LX51连接器
Use memory layout from target dialog选项为使用默认代码存放位,代码存放地址为0x0000起始开始,去掉勾后可改变代码存放地址,user classes分配代码空间,如:
分配代码空间为0x0A00-0x3FFF,具体可自己按格式定义。
三、Keil其他相关项说明:
Memory model:默认变量分配,small默认分配变量为idata,large默认分配变量为xdata。 Code rom size:small程序代码最大2k,Large程序代码最大64k。
Level:程序优化等级,考虑到程序优化时的分配,建议app程序优化等级不可超过8。
Interrupt vector at address:中断偏移地址。
四、MCU启动文件说明:
CSEG AT 0A00h
启动地址为0x0A00。
MCU程序跳转语句:
((void (code *) (void)) 0x0A00) ();定义函数指针指向0x0A00地址。
五、例程BOOTLOADER使用说明
程序占用空间:例程程序大小大约占0x0000-0x0900,因为flash分页设置及BootLoader余量考虑,BootLoader程序占用空间为0x0000-0x0A00。程序运行顺序:
程序以P05脚为检测标志位,可自行更改,P05设置为上拉输入,拉低为需要更新程序,更新程序时先擦除flash,再写入,可写入的flash空间为0x0A00-0x3FFF。不可超出此空间。写入完成后会跳转到app程序执行。
六、例程使用可更改说明:
更改启动文件里中断偏移量,与app起始地址相同。
更改烧写地址,与app起始地址相同
定义触发升级IO口。其中串口定义为P03 (RX),P04(TX)脚。
完成程序更改。
七、程序使用通信方式:XMODEM
XModem是一种在串口通信中广泛使用的异步文件传输协议,分为XModem和1k-XModem协议两种,前者使用128字节的数据块,后者使用1024字节即1k字节的数据块。本例程限于RAM大小使用XModem协议。1. XModem信息包格式
XModem协议最早由Ward Christensen在20世纪70年代提出并实现的,传输数据单位为信息包,信息包格式如下:
2. 校验和的计算
所有的数据字节都将参与和运算,由于校验和只占一个字节,如果累加的和超过255将从零开始继续累加。
3. 字段定义
01H
04H
06H
15H
18H
4. 校验和方式的XModem传输流程
传输流程如图所示:
对于发送方仅仅支持校验和的传输方式,接收方应首先发送NAK信号来发起传输,如果发送方没有数据发送过来,需要超时等待3秒之后再发起NAK信号来进行数据传输。对于数据传输正确,接收方需要发送ACK信号来进行确认,如果数据传输有误,则发送NAK信号,发送方在接收到NAK信号之后需要重新发起该次数据传输,如果数据已近传输完成,发送方需要发送EOT信号,来结束数据传输。
5. 如何取消数据传输
当接收方发送CAN表示无条件结束本次传输过程,发送方收到CAN后,无需发送EOT来确认,直接停止数据的发送。
八、APP程序说明
App程序主要注意以下几点
1. 定义代码存放位置,详见上面连接器有关知识。
2. 中断偏移,详见keil其他相关项说明
3. 代码启动位置,详见启动项说明。
4. 代码空间,注意不能超出剩余代码空间,否则程序烧写不完整。
九、APP代码升级说明
一般代码升级有两种方式,PC端软件升级或通过另一模块升级。升级前要下载BootLoader程序到芯片并置位相应的脚触发升级信号。PC端升级
使用支持xmodem协议的串口助手。
十、代码合并烧写
考虑到出厂时要先烧写IAP 再烧写APP应用程序要烧写2次增加工人劳动力的基础上写了“ IAP+APP ==>双剑合一,减少烧写次数,增加烧写效率。 代码合并软件,此处使用Notepad++。
直接打开两个工程生成的HEX文件
滑到文件最下方可以看到:00000001FF 这句话,这句话为文件结束语句,删除,然后Copy另一文件全部数据,加入到文件后方,如图:
即完成两个hex的合并,可以使用量产编程器下载验证。
程序等在我的资源里可下载,已打包好。程序下载