核电厂电气柜的PIC单片机远程程序升级
2018-01-02李永科
李永科
(海南核电有限公司,海南海口 570105)
核电厂电气柜的PIC单片机远程程序升级
李永科
(海南核电有限公司,海南海口 570105)
为降低单片机程序升级的难度,在不需要编程人员到现场的情况下完成新程序下载,以PIC18F258单片机为例,介绍一种单片机远程程序升级的方法。上位机软件将编译器生成的16进制程序按规定协议编码,由GPRS无线网络发送给指定单片机,单片机接收到程序后按照协议解码,通过内部Flash擦写功能完成对自身程序的升级。既能减少程序升级所需的成本,也适用于具有擦写内部Flash功能的其他单片机。
PIC单片机;远程程序升级;内部Flash擦写
10.16621/j.cnki.issn1001-0599.2017.05.14
0 引言
随着微电子行业的发展,以及工业化水平的不断提高,许多系统终端设备需要定期更新程序以满足人们日益增长的需求。传统的程序升级方法是编程人员到现场下载程序,对于偏远地区的设备,不仅路途远,而且耗时长。远程程序升级能够很好地解决这一问题,它利用无线网络将程序传给现场设备,现场设备将新程序写入程序存储器从而完成程序升级。可大幅减少升级所需的人力物力,降低升级费用,缩短升级时间。
1 远程程序升级的原理
远程程序升级是对可编程技术IAP的具体应用,即在应用程序正常运行情况下对另外一段程序存储区进行读写操作,甚至可以控制对某段、某页,甚至某个字节的读写操作。为数据存储和固件的现场升级带来了极大的灵活性,既可以利用单片机的串口接到电脑的RS232口,也可以通过现有的Internet或其他通讯方式很方便地实现远端升级和维护。
不同的微控制器实现远程程序升级包括2种方法,①内嵌在应用可编程IAP函数的单片机,如LPC系列ARM7,只需通过调用该函数就可以完成远程程序升级;②不具备在应用可编程函数,但具有在运行时擦写内部程序存储器(Flash)功能的单片机,如本文研究的PIC系列单片机PIC18F258,该款单片机是核电厂电气控制机柜控制单元常用的芯片,主要优势是稳定性好,符合核安全法规要求,需要将单片机存储器的某段空间制作成引导区,用于对其他存储空间进行读取、擦除、写入操作,相当于重新编写IAP函数。
当PIC单片机需要升级程序时,设计者将调试后编译器生成的16进制程序代码通过上位机软件按照规定的协议编码,然后将编码后的数据包由无线调制解调器通过GPRS网络发给与另1台无线调制解调器相连的PIC单片机,通过UART口接收到的数据包按照协议解码并临时存储到数据存储器(RAM),再通过其他串行总线如SPI发送至外部存储器保存。当全部程序接收完成后,在引导区程序的控制下,PIC单片机通过串行总线将外部存储器中的待更新程序分批读入RAM再写入应用程序区,当程序全部更新完成后,复位单片机使其运行新的程序,自此远程程序升级全部完成。远程程序升级的原理(图1)。
图1 远程程序升级原理
2 硬件系统设计
以PIC18F258为例设计远程升级程序的硬件系统,此款单片机具有1.5 KB RAM和32 KB Flash,因此在程序更新过程中需要外接存储器临时存放待更新的程序,选择AT45DB161作为外部存储器,该芯片具有16 MB存储空间,采用SPI串行总线接口满足本系统的设计要求,该系列的大容量版本广泛用于制作SD卡。无线传输网络采用GPRS网络,无线传输模块采用摩托罗拉公司的G24模块,该模块在安装手机卡后,由上、下位机通过RS232接口发送AT指令控制,利用GPRS或GSM网络建立连接发送数据,上位机通过MAX232芯片与G24通信。系统硬件原理(图2)。
图2 系统硬件原理
3 软件系统设计
3.1 传输协议的设计
PIC单片机程序的准确传输是本设计的重点。编译器生成的16进制文件包含程序和程序在Flash中的存储地址,因此要将这2部分内容准确地传给下位机。由于较短的帧格式容易校验,误码率低且出现错误后重新发送的时间较短,因此需要将源代码进行拆分并通过数据帧发送程序地址和程序内容。为验证传输结果的正确性采用校验和验证接收到的数据,每次接收到不同的帧时,下位机均需回复是否正确接收,如出现错误上位机会重新发送。本系统设计的上位机发送帧格式(表1),下位机回复帧格式(表2)。
3.2 上位机软件设计
本系统上位机软件采用C++语言编制,编译环境为VC++ 6.0。上位机软件的主要功能是将单片机编译器生成的16进制程序代码按照规定的协议进行编码,并通过GPRS无线网络将编码后的数据包发给PIC单片机。由于PIC单片机数据存储器容量较小,不能一次存储全部待更新程序,因此要对源程序进行拆分发送,每个数据帧包括128字节的程序。上位机软件主要包括系统初始化模块、单片机程序编码模块和数据包发送模块3部分。系统初始化模块包括串口初始化和G24模块初始化2部分,G24模块的控制通过AT指令实现。本系统规定编码后的数据包共分4种:起始帧、数据帧、结束帧和执行帧。在编码完成后上位机软件就可以将要更新的程序逐一地发给下位机,且在每次发送数据包后,都要求下位机进行回应以验证数据传输的正确性。当数据传输错误时,下位机会向上位机发送错误帧以请求重新发送。上位机还会记录程序更新的起始时间、终止时间、程序大小和数据包类型。上位机软件流程见图3。
图3 上位机软件流程
3.3 下位机软件设计
本系统下位机软件采用C语言编制,编译环境为PICC。主要功能包括初始化系统,使用G24模块接收上位机传来的数据,对接收到的数据进行校验,将每帧数据进行解码,将代码写入Flash指定地址并复位单片机运行新程序。下位机软件的总体流程(图4)。
图4 下位机软件流程
下位机与上位机的无线传输通过G24模块实现,该模块通过AT指令控制。在程序初始化时,为方便对接收数据的判断,使用ATE0V0命令简化 G24对每条指令的回复内容。为了防止打错电话等情况的发生,每次更新前先通过AT+CMGF指令短信通知 PIC单片机,再通过ATD+电话号码建立数据连接,然后根据协议传输数据包,当数据全部传输完成后延时3 s时间,发送+++指令断开网络连接,之后使用ATH指令挂机,从而完成全部操作。
要实现PIC单片机在线擦写Flash就要将下位机程序分为2部分:应用程序和引导程序,引导程序要固定在Flash的某一特定存储区内,以防误擦除。PIC18F258共有32 K程序存储器,地址空间为0000h~7fffh,复位向量地址0000h。本系统将地址5000h~7fffh的程序存储区设定为引导程序存储区,用于在线擦写Flash,其他应用程序由编译器自动分配地址,引导区地址可以根据引导程序的大小自行设置。程序更新主要分为准备阶段和实施阶段。准备阶段是将上位机发来的分段程序解码并存入外部存储器,当程序全部传完后准备阶段结束。实施阶段首先将要更新程序的Flash地址内所有内容擦除并确认该空间无数据,然后将新的程序写入该地址空间,最后复位单片机使其运行新的程序。PIC单片机在线擦写Flash主要通过TBLPTRU,TBLPTRL,TBLPTRH,TABLAT,TBLWT的5个寄存器实现。写Flash的顺序为向TBLPTRU,TBLPTRL,TBLPTRH的3个寄存器赋值,确定程序在Flash中的地址;设置EECON1寄存器为0x90允许Flash编程;WREN寄存器设置为1允许写Flash;TABLAT赋值向Flash中写入的数据,EECON2设置为0x55和0xAA,WR设置为1开始写Flash;WREN和SWDTEN设置为0写Flash结束。
表1 上位机编码协议格式
表2 下位机编码协议格式
4 结论
为了降低PIC单片机程序更新的难度,减少所需的人力物力,设计并实现一种核电厂配电柜常用的PIC单片机远程程序升级的方法。该方法从编译器获得待更新程序,通过GPRS网络使上位机与单片机建立点对点连接,然后用规定的数据格式将程序代码传给单片机,单片机先将分段程序存入外部存储器,然后通过在线擦写Flash的方法更新程序。为保证数据的可靠性,采用校验和方法及特定的传输协议提高数据传输的准确性。不仅适用于PIC单片机,也适用于具有在线擦写Flash功能的单片机进行远程程序升级。
[1]孙鑫,余安平.VC++深入详解[M].北京:电子工业出版社,2006.
[2]李荣正,王诚杰,戴国银.PIC单片机原理及应用[M].北京:北京航空航天大学出版社,2010.
[3]李景峰,杨丽娜,潘恒.Visual C++串口通信技术详解[M].北京:机械工业出版社,2010.
TM933
B
〔编辑 王永洲〕