基于IAP的嵌入式系统升级方案.doc
《基于IAP的嵌入式系统升级方案.doc》由会员分享,可在线阅读,更多相关《基于IAP的嵌入式系统升级方案.doc(4页珍藏版)》请在三一文库上搜索。
1、基于IAP的嵌入式系统升级方案一、 需求引入现有嵌入式设备:基于ARM Cortex-M3处理器、带以太网通讯功能。为降低设备维护成本节省宝贵的时间和金钱,需要设计网口升级固件功能。本文描述了基于IAP和网口升级该嵌入式系统的方法,其中处理器为NXP公司的ARM Cortex-M3,开发环境为IAR Embedded Workbench for ARM。IAP( In Applicatin Programming)在应用编程,一般指MCU可以通过通信端口(UART口、网口等)从外部接收应用程序镜像并烧录到FLASH中实现固件升级。图1网口升级固件二、 原理介绍先温习下小知识:一个典型的嵌入式软
2、件地址空间如图2所示,程序代码(RO段)和初始化数据(RW段)都是存储在ROM(常见为FLASH)中,当系统上电运行时,BootLoader程序会把RW段数据从ROM中拷贝到RAM中(.data),同时它会清零未初始化数据段(.bss),设置栈(.stack)和堆(.heap),之后系统就可以正常运行了。这里会有2个疑问:为什么要拷贝RW段呢?还有BootLoader程序是什么?第一个问题很简单,既然是RW(Read图2软件地址空间基于IAP固件升级一般会把软件设计成2部分:BOOT和应用程序,其中BOOT相当于PC机的BIOS负责升级固件和引导应用程序,它对于用户是不可见的;应用代码就是常见
3、的嵌入式软件。这2个软件的存储如图3所示:图3存储地址视图我们再一起来看看BOOT和APP启动时序。当系统上电时,它首先从0地址找到中断向量表,取出Reset_Handler中断服务代码,该代码先初始化芯片(如PLL和中断寄存器),然后调用BootLoader代码执行搬运工作,把存储空间布置成图2右边的“运行地址视图”,之后跳转到用户代码的main()函数,此时BOOT软件启动完成。BOOT代码开始检测是否需要升级固件,如果需要就从外部取APP镜像文件并烧录FLASH,最后一步都是启动APP软件。那么BOOT代码如何启动APP代码呢?其实很简单,因为APP代码它自身包含中断向量表和BootLo
4、ader代码,BOOT代码只需要告诉MCU新的中断向量表地址,然后跳转到APP代码区。之后,APP的BootLoader会把自己的RW数据搬运到RAM中,同样也会布置存储空间如图2右边所示,最终跳转到APP代码的用户main()函数,这样APP代码完成了启动。三、 IAP关键技术首先,APP代码需要将程序地址重定向,在本例中需要把代码地址重定向到0x0001 0000。为什么要执行如此操作呢?我们看一个实例,假设代码中有调用f1(),如果没有执行重定向,那么f1()可能被链接器分配在0x1234,当PC寄存器导入该地址并解析指令执行时,致命的错误发生了该地址根本没有f1()代码,因为APP代码
5、是从0x0001 0000开始存储的。重定向就是告诉链接器,请从0x0001 0000开始定位程序代码,这样在本例中f1()将分配在0x0001 1234,才能正确调用f1()。在IAR环境下程序空间重定向操作如下:打开“Options”-“Linker”-“Config”,点击“Edit”,在弹出的窗口中设置如图4所示地址空间。图4链接器重定向代码地址然后,BOOT代码在使用外设后,一定要De-Initialize该外设再启动APP代码,即要让APP代码认为MCU只是刚上电运行,而不是跑完一个系统再调用自己。如果BOOT代码没有执行该动作,当APP代码运行时,MCU的外设处于不确定状态(尤其
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 IAP 嵌入式 系统升级 方案
链接地址:https://www.31doc.com/p-3410744.html