《工业控制计算机》2012年第25卷第12期
在传统嵌入式系统中,代码在做成产品时已经用烧写器写入系统,如果需要日后维护或升级,工作人员必须到现场进行固件代码更新。有些用户希望产品在实际应用期间通过某种远程通信方式自动的更新程序内容,显然,现场烧入代码并不能满足这样的需求。IAP技术的出现为产品代码的远程更新提供了有效手段。本文以STM32F103ZE为平台,在TCP/IP通信协议的基础上,实现IAP技术。
1STM32F103处理器
STM32F103系列处理器是意法半导体(ST)发布的基于Cortex-M3内核的增强型系列处理器,工作频率最高达到72MHz,带有片内RAM和丰富的外设。完善的外设固件库更缩短了开发周期。
Cortex-M3存储系统采用统一寻址方式,程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内,存储空间被分成8个主要块,每个块为512MB。以STM32F103ZE处理器为例,图1为代码块和片内SRAM的地址映射图。
图1Flash、SRAM地址映射
代码块包括了Flash主存储块、信息块和启动区。主存储块地址从0x08000000开始的512K字节,信息块分为两个部分:①系统存储器是用于存放在系统存储器自举模式下的启动程序,这个区域只保留给ST使用,
启动程序使用USART1串行接口实行对闪存存储器的编程;②选项字节。
启动区地址从0x00000000开始,在系统复位后,就从这个地址开始执行代码,在STM32F103里,通过BOOT[1:0]引脚值将对应的存储器物理地址映射到启动区。本为使用的启动模式为从主闪存存储器启动。
表1启动模式
2IAP技术原理
在程序中编程(IAP)是用户自己的程序在运行过程中对Flash部分区域进行烧写,实现固件代码的更新。一般来说,IAP 驱动程序要完成两个工作:一是通过通信接口接收编译好的应用程序代码到RAM;二是将应用程序代码编程到Flash中。因此系统中固件分为两段代码:第一段是IAP驱动程序,程序复位后首先执行IAP程序,此段代码必须通过JTAG、ISP或其他方法烧入;第二段是应用程序,是真正的功能代码,由IAP程序执行完后跳转至此段代码才开始执行。两段代码都烧写在内部FLASH中,值得注意的是两段代码的存放区域不能重叠,否则后果将无法预测。
3IAP技术的实现
3.1通信方式
在本文,有更新功能的产品终端通过集线器与电脑相连,组成一个局域网。由于STM32F103系列处理器没有以太网控制模块,因此处理器外接一个ENC28J60网络模块与局域网相连。鉴于TCP/IP的复杂度,传输层使用用户数据协议UDP。服务器通过设定目标端的IP地址和UDP端口号来选择需要更新的产品终端。3.2烧写文件格式
在启动更新之前,需要准备应用代码的Hex烧写文件,使用MDK编译器可以直接编译生成HEX文件。Hex全称(Intel HEX)文件,是有一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言和/或常量数据的十六进制编码数字组成。每一行HEX记录包含5个域,它们按以下的格式排列:1字节数据长度域+2字节偏移地址域+1字节记录类型+数据域+1字节校验和域
每行都是由冒号开头,数据长度域的数值为数据域的字节数,偏移地址为32位地址的低16位,记录类型为以下几种中的一种:00-数据记录
基于STM32F103局域网远程更新技术的实现Implementation of Remotely Update Technology in LAN Based on STM32F103黄海宝吴学杰高艳艳(西南交通大学牵引动力国家重点实验室,四川成都610031)
摘要
在阐述STM32F103微处理器和在应用中编程(IAP)原理的基础上,使用RealView MDK编译的Hex烧写文件,实现了局域网内的固件在线更新,提高了固件维护的方便性,缩短了终端系统的开发周期。
关键词:STM32F103,IAP,局域网,Hex
Abstract
This paper elaborates STM32F103microcontroller and In Application Program(IAP)technology.Updating the firmware in the LAN using Hex programming file compiled by RealView MDK.It brings convenience of firmware maintenance and short-en the development cycle of the terminal system.
Keywords
:STM32F103,IAP,LAN,Hex
97
基于STM32F103局域网远程更新技术的实现
01-文件结束记录
02-扩展段地址记录
04-扩展线性地址记录
其中04为用于32位单片机中,表示随后数据烧写的Falsh基地址,基地址为32位地址的高16位;校验和域用于校验当前行记录的正确性。
3.3软件实现
IAP驱动程序和应用程序存放区域不能重叠,所以得先设置两段代码在Flash中的起始地址。按照编译好
的IAP驱动程序大小,设置应用程序的起始地址为0x08004000,即IAP放在0x08000000开始的20KB空间范围内。在IAP代码中设置为:#define ApplicationAddress0x8004000
编写应用程序代码时,需要在MDK编译器的Target op-tions→Target标签下的IROM1的起始地址设置为0x8004000,以及Target options→Utilities→settings→Flash Download标签下FLASH下载地址设置为0x8004000。在程序中,还需设置中断向量表的地址:
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x4000)。
图3是整个软件实现的流程图:
图3软件实现流程
系统复位后,首先查看备份寄存器中的BKP_DR1,看更新标志位是否被置位,STM32系列单片机都有若干字节的数据后被寄存器,这些备份寄存器由板上的纽扣电池供电,在系统电源掉电的情况下,也可以保存备份寄存器中的内容。软件读备份寄存器代码:
if(BKP_ReadBackupRegister(BKP_DR1)==0x0001);
电脑表白程序代码
如果BKP_DR1中的值不为0x0001,则通过下列代码进行判断是否已下载应用程序:
if(((觹(__IO uint32_t觹)ApplicationAddress)&0x2FF80000)==0x20000000);
判断0x8004000地址中的值是否为有效地SRAM地址:0x20000000~0x2007FFFF,从而判断是否为有效的应用代码,若是,跳转至用户代码,否则,将BKP中的更新标志位置1,并进行软件复位,在执行应用程序时,如果上位机请求更新程序,也会进行标志位置1,并复位的操作。复位后,首先解除对Flash的写保护,之后在上位机界面显示IAP主功能界面,如图4所示。
图4IAP主功能界面
发送1执行下载程序功能,选择要烧写的HEX文件,在发送HEX文件时,上位机用UDP协议每次打包一行记录发送,下位机处理器接收本行记录,并计算本行的校验码域值是否正确,若正确,则发送一个正确应答,上位机接收应答后继续发送下一行,若是错误的,则请求上位机重发当前行,直到文件发送完毕。根据接收到的数据大小,擦除需要用到的Flash页,再把数据编程到Flash中。至此,已完成对应用程序的更新。对下位机发送命令3或者重启就可进入应用程序进行执行。
4结束语
在嵌入式系统大范围应用的今天,IAP技术为远程更新提供了方法。本文介绍的基于STM32F103处理器的局域网内IAP 固件的更新技术实用、方便,只需稍加修改,即可应用于STM32系列的其他处理器。
参考文献
[1]张舞杰,南亦民.基于STM32F103VB的应用编程技术的实现[J].计算机应用,2009,29(10):20-23
[2]陈峰峰,胡毅,许艳.STM32F10x在应用中编程的实现方法[J].技术纵横,2009(9):25-31
[3]ST Microelecrtonics.STM32F10xxxFlash programming[EB/OL].[2011-10].http://www.st.com
[收稿日期:2012.9.13
]98