利用RS422串口实现微控制器程序在线升级的方法
2016-09-27西南技术物理研究所杨光海
西南技术物理研究所 杨光海
中国电子科技集团公司第十研究所 彭文渊
西南技术物理研究所 张 川 公丕华 王 海 徐 丹 吴 晔
利用RS422串口实现微控制器程序在线升级的方法
西南技术物理研究所杨光海
中国电子科技集团公司第十研究所彭文渊
西南技术物理研究所张川公丕华王海徐丹吴晔
本文以工程应用为出发点,介绍了在微控制器软件使用中,利用RS422异步串口实现微控制器程序在线升级的方法,从而实现了不打开配有微控制器的设备不开箱实现程序升级,以供工程开发者进行选用。
【摘要】RS422;微控制器;在线升级
0 引言
微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机。单片机为微控制器中的一种,相当于一个微型的计算机,具有体积小、质量轻、性价比高等特点。如今,单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。在上述电子系统中,各部件间的计算机微控制芯片(单片机)都需要进行数据交换建立通讯联系,使用串行通讯手段是其中一种重要、常用的通讯方式。串行通讯工作方式分为同步方式和异步方式两种,在实际工作中,异步方式用得最多,包括三个常用的总线标准:RS-232、RS-422、RS-485。单片机(Mircocontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(某些还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器、SPI等电路)集成到一块硅片上构成一个小而完善的微型计算机。
目前,单片机的程序存贮器一般都由可编程的FLASH存贮器组成,相对于原来的SRAM存储器,具有不挥发性、高密度、低功耗、快速读取、在线可重写等优点,可实现电子设备需求更改时,不需更换设备上单片机,只需重新改写单片机FLASH内的软件程序即可。随着电子系统的发展,对其外形尺寸、重量的需求越来越高,电子系统机箱小型化、易维护性、可靠性等需求日益增长。机箱越小,势必造成机箱内的电路板越来越小,这也造成机箱内的电路板拆卸、维护、维修造成不便。而一般而言,电子系统的维护、维修需要对系统内的单片机FLASH内的软件程序进行改写升级即可,但电子系统的小型化,给单片机的软件程序改写升级工作带来不便。
串行通信接口是微控制芯片单片机常用的通讯接口,本文以串行通信接口中最为常用的RS422接口,升级Silabs公司的C8051F120单片机为例,介绍利用RS422串口实现微控制器程序在线升级的方法。
1 总体设计思路
目前,多数单片机程序升级都是基于单片机的IAP(In-System programming)技术,IAP技术是应用在Flash程序存储器的一种编程模式,它从结构上将Flash存储器映射为两个存储区域,通过运行其中一个存储区域上特定的IAP程序(在线升级基程序)接收PC上位机内在线升级界面软件的程序数据,来对另一个存储区域进行编程操作,编程完成后跳转到嵌入式设备内单片机工作程序开始运行,利用RS422串口实现升级的示意图如图1所示。
图1 RS422串口升级微控制器程序的示意图
C8051F120采用高速、流水线结构的CIP-51内核,与MCS-51兼容,其内部PLL可倍频至100MHz,具有2个UART串口,128KB可在系统编程的Flash存储器,8488字节的片上RAM,有JTAG接口可以直接下载程序可执行代码到Flash存储器,完全具备单片机程序进行RS422串口升级程序的条件。
上位机与下位机之间应先约定两者之间的通讯协议,包括串行通讯的通讯格式检测数据帧是否符合格式要求,以设置串行通讯时数据的数据位数、停止位数、奇偶校验、发送和接收的波特率,通讯的命令字、状态字,以及每帧传输的程序数据个数(一般一帧数据中包含1024个程序数据字节)、错误重发机制等。
2 下位机软硬件设计
2.1下位机硬件设计
在下位机机箱中的单片机C8051F120硬件设计如图2所示,该单片机通过串口驱动芯片MAX3491,配以相应的匹配电阻,构成串口驱动电路,与上位机建立RS422串口通讯联系。
图2 单片机RS422串口硬件设计示意图
图3 下位机单片机升级软件工作流程
2.2下位机软件设计
该软件设计仅为结合硬件电路系统及通讯协议给出的单片机C8051F120的部分程序,以设置RS422异步串行通讯时数据串的数据位数、停止位数、奇偶校验、发送和接收的波特率及中断方式等。
在单片机片内的Flash存储区域先划定一定起始地址的IAP程序存储区域和工作程序存放区域。IAP程序存储区域用来存放下位机的IAP程序(在线升级基程序),以便IAP程序运行后把上位机传来的工作程序数据搬放到工作程序存放区域。
下位机单片机软件的工作过程为:
单片机上电,先进行单片机初始化工作,初始化完成后,向上位机发送程序装载握手数据帧。收到上位机发送的握手成功数据帧后,向上位机返回“发送下一帧程序数据帧”请求;收到上位机发送的程序数据帧后,擦除单片机FLASH上相应区域的数据内容,并将上位机传来的程序数据写入刚擦除完毕的Flash区域,直到将最后一帧程序数据内容写入单片机FLASH上相应区域;读取写入Flash区域的数据,计算校验和并与上位机传来的校验和比较,将比较结果返回给上位机。单片机上电后设计6秒内,上位机须返回握手数据,否则单片机进入工作程序,不能再通过RS422串口进行程序升级。单片机升级软件工作流程如图3所示。
在本设计中,单片机C8051F120的串行波特率设置为115200,通讯格式为8位数据位,1位停止位,IAP程序(在线升级基程序)部分函数简化如下:
void UART_Init( void )
{
……
SCON0 = 0x50;
SSTA0 = 0x05;
……
}
void EraseFlash( unsigned int div )
{
……
FLSCL | = 0x01;
PSCTL | = 0x03;
XBYTE[div * 0x400] = 0xFF;
FLSCL & = ~0x01;
PSCTL & = ~0x03;
……
}
void Copy2Flash(unsigned int dst, unsigned char *src, unsigned int len)
{
……
for(i=0;i< len;i++)
{
Tmp = *(src+i);
FLSCL | = 0x01;
PSCTL | = 0x01;
XBYTE[dst+i] = tmp;
FLSCL & = ~0x01;
PSCTL & = ~0x01;
}
……
}
char ReadFlash(unsigned int n, unsigned int verify)
{
……
for(i=0x400;i<n;i++)
{
Check += (unsigned char)*(ptr+i);
}
if(check == verify)
{
return 1;
}
else
{
return 0;
}
……
}
3 上位机软硬件设计
3.1上位机硬件设计
上位机使用一台带有RS422串口功能的台式PC机或其它兼容机均可,另需准备一根PC机串口端口到下位机嵌入式设备单片机RS422数据接收端的线缆,PC机作为上位机,通过串行通讯接口电缆与下位机电子机箱内的单片机系统进行数据交换。
3.2上位机工作软件设计
上位机PC机软件可采用VC++等高级语言将下位机单片机工作软件程序可执行代码转换为16进制的Hex文件,根据上位机与下位机之间约定的通讯格式要求,将Hex文件依次分成若干个相同长度(一般一帧数据中包含1024个程序数据字节)的数据帧,并将上述数据帧通过串行通讯接口依次发送给下位机IAP程序(在线升级基程序)。其软件界面如图4示。
图4 上位机工作软件界面
上位机工作软件工作流程为:点击图4上位机工作软件中“转化HEX”按钮,将单片机工作软件程序可执行代码转换为16进制的Hex文件;设置好上位机工作软件界面上的“串口连接状态选择”;下位机电子箱内单片机系统上电后,点击“连接”按钮,收到下位机发来的程序装载握手数据帧后,向下位机发送握手正确状态数据帧;收到下位机发来的“发送下一帧程序数据帧请求”后,将单片机工作程序HEX文件及程序数据校验和按顺序一帧一帧的发送给下位机;收到下位机发送来的“发送程序数据错误数据帧”后,重复发送上一帧单片机工作程序HEX文件数据;将与下位机通讯的实时状态显示在“上位机软件工作状态”区域。
上位机工作软件部分简化程序如下:
Void CFlashDonloadDlg:OnButtonStart()
{
……
m_nTotalCont = file.GetLength();
m_nDataLeft= m_nTotalCont;
m_nVerify= 0;
if( (m_nTotalCont%1024) == 0 )
{
m_nToalFrame = m_nTotalCont/1024;
}
else
{
m_nToalFrame = m_nTotalCont/1024+1;
}
……
for( int i=0x400;i< m_nTotalCont;i++ )
{
m_nVerify + = (unsigned char)addArray[i];
}
m_nVerify &= 0x0000FFFF;
m_strEdit += “等待下位机握手信号… ”;
……
}
4 结束语
通过RS422串口实现对电子机箱等设备内的微控制器进行程序在线升级,实现不打开设备升级程序的方法,以解决现有电子系统机箱内单片机软件程序需开箱改写升级的不足之处,提供一种直观简单,设计流程短,可靠性高,不需打开电子系统机箱,通过RS422串行异步通讯升级电子系统机箱内微控制器软件程序的方法,以提高工作效率。
[1]杨光海,彭晓乐等.远程升级控制系统嵌入式设备程序的设计方法[J].工业控制计算机,2016,6:18-19.
[2]张麦龙,朱国强.DSP平台使用串口升级软件的实现[J].信息与电脑(理论版),2012,08:166-167.
[3]吴小艨,李正宇,周进松.通过RS232串口实现DSP并行FLASH程序升级[J].通信技术,2012,01:148-150.
[4]汪晶晶,苏建徽,孙佩石.基于串口通信的DSP应用程序在线升级方法[J].微型机与应用,2013,14:19-21,28.
杨光海(1978—),大学本科,工程师,研究方向:嵌入式控制。