周振齐瑞萨电子管理有限公司
单片机IAP在应用软件升级的方法探究
周振齐
瑞萨电子管理有限公司
摘要:文章基于Renesas公司SH系列单片机,比较了几种在线编程实现模式,讨论单片机Flash的读取、擦除、编程机制,对单片机软件IAP在应用升级方法进行了初步的研究,并在硬件平台上开发了通过CAN总线接口,对单片机的软件实现在应用升级的方案。
关键字:在应用编程CAN 软件升级
随着单片机在嵌入式系统的应用越来越广泛,单片机软件的功能越来越复杂,开发中可能存在的Bug越来越难以避免;单片机软件更新速度也越来越快,有些应用还需要在测试和标定中,确定和修改一些软件的运行参数并记录下来。这就对单片机软件更新的方法提出了更高的要求,希望更新升级软件更加便利和可靠。SH系列单片机是瑞萨公司具有高性价比、小型化和高性能功耗比特性的嵌入式RISC单片机,广泛应用于汽车导航系统、汽车引擎和动力转向系统、空调、电冰箱和洗衣机、工业设备和机床等。本文以SH72Aw(SH一2A系列)单片机为主,以HEw为开发工具,比较几种在线编程的方法,探讨IAP的原理、Flash的擦除和编程、单片机系统在正常工作中在线升级的实现方案。
在线编程有ICP、IsP、IAP几种技术实现途径。ICP(In—Circuit Programming)技术一般通过在线仿真器对单片机进行编程,而ISP(In.SystemProgramming)技术则是通过单片机内置的BootLoader程序引导的编程技术。无论是ICP技术还是ISP技术,都需要有机械性的操作,如连接下载线、设置系统模式管脚等。若产品的PCB板已经密封在外壳中,要对其进行程序更新就很麻烦。但若引入了IAP(In—ApplicationProgramming)技术,则完全可以避免上述的尴尬情况,如果使用远距离或无线的数据传输方案,则还可以实现远程编程和无线编程。这是ICP或ISP技术所无法做到的。IAP技术,即“在应用编程”,它是一种通过单片机的对外接口(如UAI盯、IIC、CAN等),对正在运行程序的单片机进行内部程序更新的技术,它和ICP或者ISP的主要区别在于:单片机在正常工作的同时更新全部或部分程序。IAP技术为系统在线升级和远程升级提供了良好的解决方案,也为数据存储和现场固件的升级都带来了极大的灵活性。
SH72AW芯片具有3种在线编程模式,分别是Serial一Boot Program Mode、User Program Mode币口user-Boot Program Mode。其中serial.Boot Program Mode是通过固化在单片机内部的Boot程序和指定的串口进行下载程序;User_ BootProgramMode是通过用户自己开发的Boot程序,使用用户指定的通讯方式下载程序;这两种编程模式均需改变特定的硬件管脚,复位后才能进入。而User Program Mode和正常单片机脱机工作的UserMode区别,仅在于软件中设定单片机的寄存器F1ash编程使能位即可进入,这就为L奸在应用中升级和更改参数提供了可能。
实现IAP技术的核心,是将一段预先开发的程序,作为BootLoader烧写到单片机的F1ash里面,在单片机上电复位后,可以通过指定的通讯接口接收上位机的命令和数据,对整个Flash或部分区域进行擦除或编程。在完成程序烧写后,再跳转执行新写入的程序,最终就达到了程序更新的目的。这一预先开发的程序的主要功能包括通讯和Flash操作控制两部分。
2.1 通讯部分
通讯功能,是指和外部的上位机软件通过串口UART、SPI、CAN等进行通信,接收上位机的命令(擦除、读、写等)、上位机的数据(程序起始地址、程序数据或参数等)和返回F1ash状态。因此,上位机和单片机之间必须建立一定的通信协议,用户可以根据自己的需求设定自己的通信协议,在汽车行业一般参照CCP(CANCalibration Protoc01)标准协议,它是一种基于CAN总线的ECU(ElectronicContr01 unit)标定协议,已经在许多欧美汽车厂商得到应用。
2.2 F1ash操作控制
Flash操作控制程序负责对Flash的擦除、编程和状态查询等。在对F1ash进行操作时,需要注意查询F1ash的状态标志位。SH系列单片机内部有FCU模块,负责对F1ash的具体操作,有自己的控制和状态寄存器,存放在特定的Flash区域,FCU还有自己专用的FCU RAM。在使用FCU对Flash进行操作时,需要通过控制寄存器将FCU固件转移到指定RAM。SH72AW单片机在User Program Mode下,对F1ash擦除以Block为单位,编程以256Bvtes为单位。SH72AW的User Flash区域划分。注意:如果对现有Boot Loader也需要进行更新时,需要将整个Boot Loader程序拷贝到RAM里面运行,确保新Boot Loader编程成功。
本文通过CAN总线接口,实现对单片机Flash程序的更新,上位机采用某CAN总线协议分析仪,按照既定的通信协议规范发送命令和数据。软件总体思路是:单片机系统上电复位后,首先查询是否收到上位机通过CAN发送的启动命令;单片机收到命令后,将控制程序拷贝到洲中,PC跳转到RAM中运行,将FCU固件拷贝到FCURAM,FCU复位,使能Flash编程和擦除位,擦除指定Flash的B10ck,完成后向上位机发送数据请求;上位机向单片机发送需要编程数据区的地址和数据(256字节为单位),单片机完成数据编程后,向上位机继续请求数据。完成所有编程后,PC回到程序其实地址执行。
软件中主要步骤描述如下:
3.1 Boot Loader控制程序从F1ash转移到RAM程序在Flash中执行,单片机收到上位机通过CAN总线启动命令后,将Boot Loader控制程序转到RAM中执行。控制程序在编译阶段必须设置对应Flash段和RAM段之间的映射,否则Flash中编译的程序直接拷贝到RAM中运行会有问题。
3.2 FCU固件转移
程序在RAM中执行,域转移到FCURAM。将FCU固件从RAM指定区。
3.3 F1ash擦除
程序在RAM中执行,控制FCU擦除Flash指定的Block区域(擦除以Block为单位)。
3.4 数据下载
程序在RAM中执行,单片机完成Block擦除后,向上位机发送数据请求命令,上位机发送数据起始地址和数据,单片机将接收的数据存放在RAM中。
3.5编程
程序在RAM中执行,单片机控制FCU将RAM中接收到的数据编程到Flash的指定区域。单片机完成编程后,向上位机继续请求数据。
注意事项:FCU的每次操作都必须检查Flash寄存器的相应状态标识位。确保Flash操作的可靠性。本文虽然是基于SH72AW对IAP在应用软件升级方法的探究,但其升级方法和对Flash的具体操作同样适用于SH系列其他单片机,其IAP基本实现框架也适用于其他的芯片,具有一定的参考意义。
参考文献
[1]SH72AWGroup.SH72AY Group User’s Manual:Hardware,Rev.1.10[R].2014,4.
[2]Super H RISC engine C/C++ Compiler,Assembler,Optimizing Linkage Editor V9.04User’s Manual.1.01[R].2011,7.
[3]邬宽明.CAN总线原理和应用系统设计[M]。北京:北京航空航天大学出版社,1996.