Bootloader.doc

Bootloader.doc

ID:49532958

大小:65.50 KB

页数:13页

时间:2020-03-02

Bootloader.doc_第1页
Bootloader.doc_第2页
Bootloader.doc_第3页
Bootloader.doc_第4页
Bootloader.doc_第5页
资源描述:

《Bootloader.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、从上周开始,开始全部投入到STM8的在线升级方案记录下大概做过的事情,从时间轴来记录1、熟悉STMIAP编程IAP是InApplicationProgramming的缩写,意思是可以在应用程序中从新编程,升级固件。而STM8有IAP这个功能,了解这个功能的大概,开始确定方案2、升级方案构思现在出货的产品硬件已经设计好,由于产品内嵌比较严重,当后期发现Bug需要升级到时候会浪费大量资金。如果可以做成在线升级,会节省开支。MCU与ARM之间使用了串口通信,所以规定了串口为升级的传送方式。MCU的代码由两部分组成:分别是Bootload,App。App就是功能代码,需要另外增加的Bootloa

2、d这部分代码。Bootload占驻了MCU复位启动的开始位置,然后根据升级条件是否成立,进入到固件升级或者直接运行App当进入到固件升级之后,与ARM通信,把BIN文件在线写入到指定的Flash3、细节分析(1)、Bootload的条件切换最理想的切换条件是硬件电平判断,由于目前硬件已经固定,所以使用了串口通信来判断。MCU复位之后,执行Bootload,初始化必要的外设,然后开始发送第一帧称之为开始帧然后在400ms内查询是否有串口应答,并且应答帧为IDENT帧这里有下面几种情况,400ms内收到帧,并且为IDENT帧,则更改为固件升级模式,否则都是App模式这里需要App模式,还需要

3、增加一个条件,查找指定的位置是否存在有效的App代码,如何没有,则返回到固件升级模式(2)、固件模式下,串口传送帧为了提高串口效率,规定了串口帧刚好为STM8的Page大小,再加上PageNum以及CheckSum。Page为128Byte这样一帧就是2+128+1,一共为131个Byte。Page帧在串口传送时,规定了MCU发出READY帧,然后ARM把131Byte的数据传送MCU根据checksum,返回ACK或者NACK帧。只要在MCU正确返回ACK帧之后,这个Page帧才有效***************ready***************//fileinformation

4、transmit(READY)---------------------><---------------------transmit(data)transmit(ACK)----------------------->(3)、升级固件接收到Page帧,有PageNum,这样就知道对应存放的地址,通过STM8的Block操作,每次把128个字节写入到指定的Flash(4)、MCU端的问题在刷Flash的时候,发现出现异常。后来从Datasheet中发现,关于STM8的Block操作,该部分的代码必须要在RAM中运行然后定义一个在RAM中的函数,使用__ramfunc指定该函数存放在RAM

5、中。但是问题依然存在,跟踪下去才知道,就算Mem_ProgramBlock函数定义在RAM区,但是里面有些复杂的操作,IAR自己会把该部分的代码汇编成一个汇编函数,然后函数存放在Flash中这样就是不是纯的RAM区,导致Flash的Block操作错误。这个应该归到IAR本身上(5)、App的设定由于App与Bootload是两个工程,使用了同一个MCU的资源,需要划分之间的界限。Flash的开始地址为0x8000,一般Bootload只会使用4KFlash为了好管理以及以后Bootload更新留出余地,App规定从0xA000之后的50KFlash。再者就是两份代码关于中断向量表的问题,

6、该部分在前面的几篇文章已经详细说明过,这里就不写了(6)、加密方案由于最终的升级BIN文件最终会留出到客户手上,所以需要对BIN文件加密,而且为了版本的管理,需要在BIN文件加入项目相关信息以及日期这部分没有统一的方案,这里就不一一说明。最简单的加密就是密匙加密,可以使用一组数据作为密匙,然后MCU端对该部分解密(7)、PC端关于源BIN文件的加密工具IAR编译出来的BIN文件,没有经历过任务加密,需要根据加密方式,用PC设计的辅助工具,把BIN文件加密成对应的升级文件,这里称之为xxx_Update.BIN(8)、PC端升级软件理论上,升级是ARM通过串口进行,但是在设计调试阶段,需要

7、PC端的工具辅助。然后根据对应的通信协议编写PC端的升级软件该软件主要负责把xxx_Update.BIN读取,然后与MCU之间形成升级通信的各种通信协议。比如connect状态,Ready状态等等然后最终把xxx_Update.BIN通过串口发送给MCU,完成在线升级4、总结这个算第一个完整的在线升级构思,终于在昨晚凌晨2点多快3点的时候验证通过。虽然各个技术点都不难,还是在底层遇到不少问题,比如之前的中断向量表比如MCU启动代码,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。