一种基于光电传输的BootLoader程序升级方法与流程

文档序号:11581316阅读:268来源:国知局
一种基于光电传输的BootLoader程序升级方法与流程

本发明将光电传输与bootloader程序功能相结合,涉及一种对主控mcu应用程序升级的方法,具体涉及一种对超声波燃气表主控板应用程序进行无拆卸程序升级的方法。



背景技术:

bootloader是嵌入式系统在上电后执行的第一段代码,是在应用程序运行之前运行的。在操作系统中,它可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。我们这里利用bootloader功能来使用瑞萨公司提供的self_programming_library函数库来进行主控mcu应用程序的在线烧写。

燃气表具公司在研发智能表具时,势必要对表具上的主控mcu应用程序进行修改升级再调试,然而主控mcu一般都安装在表具内部的,拆卸表具这一繁琐的过程对研发来说非常不便。而本发明正好解决了这一难题,本发明在不对表具进行拆卸的情况下可以通过光电传输将新版的升级程序通过bootloader功能下载到主控mcu中,从而实现了对主控mcu应用程序的升级。本发明还可运用于升级已挂装在用户家中智能燃气表主控mcu应用程序,大大提高了操作工人的效率以及操作过程中的安全性,更加便利便民。



技术实现要素:

本发明的目的是为了克服对智能燃气表主控mcu的应用程序进行升级时拆卸表具这一繁琐过程,提高了工作效率,也提高了安全性。

本发明在智能燃气表主控mcu的应用程序升级过程中,以bootloader功能为核心。本发明支持多种产品的多种主控mcu,只要主控mcu具有bootloader这一功能,那么产品在无拆卸的情况下都可以通过光电传输对主控mcu的应用程序进行升级。

一种基于光电传输的bootloader程序升级方法,本发明是主控mcu模块利用bootloader这一功能通过光电传输模块与上位机模块进行通讯,上位机模块中的主控mcu程序升级数据包以xmodem协议下载到主控mcu模块中,并且主控mcu模块与上位机模块需要同步切换波特率以提高升级速率,具体的:上位机模块向主控mcu模块发送握手命令之后,主控mcu模块将向上位机模块返回一条握手命令;上位机模块正确接收到主控mcu模块的握手命令后,会向主控mcu模块发送进入boot的命令;随后主控mcu模块进入boot,向上位机模块返回一条确认进入boot的命令;上位机模块启动xmodem协议,开始传输主控mcu程序升级数据包并刷写主控mcu模块的rom。

本发明解决其技术问题所采用的技术方案如下:

本发明实现过程包括三个模块:上位机模块、光电传输模块和主控mcu模块;且光电传输模块集成在主控mcu模块中,上位机模块通过光电传输模块将主控mcu程序升级数据包传输给主控mcu模块,主控mcu模块进行升级。

所述的上位机模块包括数据格式转化单元、传输单元,且上位机模块配套设置有usb接口的集成光电头,从而使得上位机模块与光电传输模块之间能够进行数据通讯;

所述的主控mcu模块与上位机模块的相对应,主控mcu模块通过光电传输模块收到上位机模块中传输单元发送的握手命令后,进入boot等待状态,继而返回一个握手信号给上位机模块;当接收到上位机模块进入boot的命令,主控mcu模块将boot标志位置位,并进入boot状态,再返回一个确认已经进入boot的命令给上位机模块;主控mcu模块进入boot后(主控mcu已经自动转化为9600bps波特率),主控mcu模块发送一串进入boot的起始数据“bootload”给上位机模块,上位机模块接收到后将主控mcu程序升级数据包传输给主控mcu模块;主控mcu模块利用中断接收的方式将接收到的主控mcu程序升级数据包写入rom中,并完成程序烧写。

所述的光电传输模块集成在主控mcu模块中,上位机模块usb接口的集成光电头首先将主控mcu程序升级数据包的电信号转化为光信号,然后传输给光电传输模块,光电传输模块将接收的光信号转化为电信号,然后传输给主控mcu模块;

所述的光电传输模块的电路描述:

光电传输模块分为红外发射和红外接收两个单元:

红外发射单元由三个电阻(电阻r1、电阻r2、电阻r3)、一个三极管(q1)以及一个红外发射管(d1)构成;电阻r1的一端与电阻r2的一端相连,并且这一端接到主控mcu模块的单片机串口的发送口tx;电阻r1的另一端接红外发射管d1的正极,并且这一端接电源的正极;红外发射管d1的负极接电阻r3的一端,电阻r3的另一端接pnp三极管q1的发射极,pnp三极管q1的基级接电阻r2的另一端,pnp三极管q1的集电极接地;所述的红外发射管型为d1at205。

红外接收单元由三个电阻(电阻r4、电阻r5、电阻r6)、两个电容(c1、c2)、一个三极管(q2)以及一个光敏接收管(d2)构成;电阻r5的一端与地连接,同时与电容c1的一端和npn三极管q2的发射管相连;电阻r5的另一端与电容c1的另一端相连,同时与npn三极管q2的基极和电阻r4的一端相连;电阻r4的另一端与光敏接收管d2的正极连接;光敏二极管的负极与电源正极相连,同时与电阻r6的一端相连;电阻r6的另一端与电容c2的一端相连,同时与主控mcu模块的单片机的串口接收端rx以及npn三极管q2的集电极相连;电容c2的另一端与地相连。

所述的xmodem协议:

xmodem协议最早由wardchristensen在20世纪70年代提出并实现,传输数据单位为信息包,信息包的格式如下:

|byte1|byte2|byte3|byte4~byte131|byte132||startofheader|packetnumber|~(packetnumber)|packetdata|checksum|

startofheader定义为0x01;packetnumber为数据包的编号;~(packetnumber)为数据包的编号取反;checksum为和校验,和校验计算方法为packetdata(128字节)的累加和,由于校验和只占一个字节,如果累加的和超过255,将从零开始继续累加,不计进位。

所述的数据格式转化单元:

程序下载文件格式为.hxf文件格式,需要转化为二进制代码才能通过光电烧录入单片机rom中,本上位机模块使用i/ostream来实现此转换,具体数据转换格式如下:

.hxf文件读取规则:

例“:abcdefghijklmnopqrxtuvwxyzabcdefghijklmnop”可以被看作“0xab0xcd0xef0xgh0xij0xkl0xmn0xop0xqr0xst0xuv0xwx0xyz0xab0xcd0xef0xgh0xij0xkl0xmn0xop”

第一个字节0xab表示本行数据的长度;

第二、三字节0xcd0xef表示本行数据的起始地址;

第四字节0xgh表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。以下分别为各数据类型:

'00'datarrecord:用来记录数据,hex文件的大部分记录都是数据记录

'01'endoffilerecord:用来标识文件结束,放在文件的最后,标识hex文件的结尾

'02'extendedsegmentaddressrecord:用来标识扩展段地址的记录

'03'startsegmentaddressrecord:开始段地址记录

'04'extendedlinearaddressrecord:用来标识扩展线性地址的记录

'05'startlinearaddressrecord:开始线性地址记录

数据类型之后的为数据,最后一个字节0xop为校验和。若数据地址不连续,则用0xff填满。

所述的主控mcu模块与上位机模块之间交互的协议:

首先要确定主控mcu模块与上位机模块通讯的波特率。在主控mcu模块进入bootloader之前,仅仅是主控mcu模块与上位机模块之间简单的握手信号,所以通讯的波特率定为2400bps。当主控mcu模块进入bootloader之后,开始主控mcu程序升级数据包的传输,则主控mcu模块与上位机模块的波特率提升为9600bps,以提高主控mcu程序升级数据包传输刷写的速度。

主控mcu模块与上位机模块握手的机制为:

上位机模块发送一个握手命令之后,进入等待超时状态;若主控mcu模块返回握手信号,则上位机模块继续发送进入boot的命令给主控mcu模块,若等待超时,则重新发送握手信号。上位机模块发送进入boot的命令之后,等待主控mcu模块返回确认进入boot的命令,若上位机模块收到确认进入boot的命令,则上位机模块进入准备数据传输状态。一旦上位机模块接收到主控mcu模块的“start”信号(即“bootload”信号),就开启xmodem协议传输。当主控mcu模块返回一个“end”信号时,表示主控mcu程序升级数据包正确发送完成,上位机将退出xmodem协议,停止传输。

本发明工作过程如下:

本发明方法在对主控mcu应用程序进行升级时考虑到了使用光电传输这一无线通讯方式,并结合了主控mcu本身所具有的bootloader功能,避免了拆装燃气表具的繁琐性与安全性问题,也是对主控mcu应用程序升级的一种创新。

同时,主控mcu模块中的光电传输模块是一种基于光敏收发管的硬件电路,是本发明所有通讯的基础硬件电路,包括握手命令的传输、xmodem协议传输以及主控mcu模块升级都依赖于该电路。该硬件电路能运用于多种数据传输,最大通讯波特率可达1mbps左右。

附图说明

图1为xmodem协议图解。

图2为本发明流程图解。

图3为光电传输模块电路图。

具体实施方式

下面结合附图对本发明作进一步说明。

如图1-3所示,一种基于光电传输的bootloader程序升级方法,本发明是主控mcu模块利用bootloader这一功能通过光电传输模块与上位机模块进行通讯,上位机模块中的主控mcu程序升级数据包以xmodem协议下载到主控mcu模块中,并且主控mcu模块与上位机模块需要同步切换波特率以提高升级速率,具体的:上位机模块向主控mcu模块发送握手命令之后,主控mcu模块将向上位机模块返回一条握手命令;上位机模块正确接收到主控mcu模块的握手命令后,会向主控mcu模块发送进入boot的命令;随后主控mcu模块进入boot,向上位机模块返回一条确认进入boot的命令;上位机模块启动xmodem协议,开始传输主控mcu程序升级数据包并刷写主控mcu模块的rom。

本发明实现过程包括三个模块:上位机模块、光电传输模块和主控mcu模块;且光电传输模块集成在主控mcu模块中,上位机模块通过光电传输模块将主控mcu程序升级数据包传输给主控mcu模块,主控mcu模块进行升级。

所述的上位机模块包括数据格式转化单元、传输单元,且上位机模块配套设置有usb接口的集成光电头,从而使得上位机模块与光电传输模块之间能够进行数据通讯;

所述的主控mcu模块与上位机模块的相对应,主控mcu模块通过光电传输模块收到上位机模块中传输单元发送的握手命令后,进入boot等待状态,继而返回一个握手信号给上位机模块;当接收到上位机模块进入boot的命令,主控mcu模块将boot标志位置位,并进入boot状态,再返回一个确认已经进入boot的命令给上位机模块;主控mcu模块进入boot后(主控mcu已经自动转化为9600bps波特率),主控mcu模块发送一串进入boot的起始数据“bootload”给上位机模块,上位机模块接收到后将主控mcu程序升级数据包传输给主控mcu模块;主控mcu模块利用中断接收的方式将接收到的主控mcu程序升级数据包写入rom中,并完成程序烧写。

所述的光电传输模块集成在主控mcu模块中,上位机模块usb接口的集成光电头首先将主控mcu程序升级数据包的电信号转化为光信号,然后传输给光电传输模块,光电传输模块将接收的光信号转化为电信号,然后传输给主控mcu模块;

如图3所示,所述的光电传输模块分为红外发射和红外接收两个单元:

红外发射单元由三个电阻(电阻r1、电阻r2、电阻r3)、一个三极管(q1)以及一个红外发射管(d1)构成;电阻r1的一端与电阻r2的一端相连,并且这一端接到主控mcu模块的单片机串口的发送口tx;电阻r1的另一端接红外发射管d1的正极,并且这一端接电源的正极;红外发射管d1的负极接电阻r3的一端,电阻r3的另一端接pnp三极管q1的发射极,pnp三极管q1的基级接电阻r2的另一端,pnp三极管q1的集电极接地;所述的红外发射管型为d1at205。

红外接收单元由三个电阻(电阻r4、电阻r5、电阻r6)、两个电容(c1、c2)、一个三极管(q2)以及一个光敏接收管(d2)构成;电阻r5的一端与地连接,同时与电容c1的一端和npn三极管q2的发射管相连;电阻r5的另一端与电容c1的另一端相连,同时与npn三极管q2的基极和电阻r4的一端相连;电阻r4的另一端与光敏接收管d2的正极连接;光敏二极管的负极与电源正极相连,同时与电阻r6的一端相连;电阻r6的另一端与电容c2的一端相连,同时与主控mcu模块的单片机的串口接收端rx以及npn三极管q2的集电极相连;电容c2的另一端与地相连。

所述的xmodem协议:

xmodem协议最早由wardchristensen在20世纪70年代提出并实现,传输数据单位为信息包,信息包的格式如下:

|byte1|byte2|byte3|byte4~byte131|byte132||startofheader|packetnumber|~(packetnumber)|packetdata|checksum|

startofheader定义为0x01;packetnumber为数据包的编号;~(packetnumber)为数据包的编号取反;checksum为和校验,和校验计算方法为packetdata(128字节)的累加和,由于校验和只占一个字节,如果累加的和超过255,将从零开始继续累加,不计进位。

所述的数据格式转化单元:

程序下载文件格式为.hxf文件格式,需要转化为二进制代码才能通过光电烧录入单片机rom中,本上位机模块使用i/ostream来实现此转换,具体数据转换格式如下:

.hxf文件读取规则:

例“:abcdefghijklmnopqrxtuvwxyzabcdefghijklmnop”可以被看作“0xab0xcd0xef0xgh0xij0xkl0xmn0xop0xqr0xst0xuv0xwx0xyz0xab0xcd0xef0xgh0xij0xkl0xmn0xop”

第一个字节0xab表示本行数据的长度;

第二、三字节0xcd0xef表示本行数据的起始地址;

第四字节0xgh表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。以下分别为各数据类型:

'00'datarrecord:用来记录数据,hex文件的大部分记录都是数据记录

'01'endoffilerecord:用来标识文件结束,放在文件的最后,标识hex文件的结尾

'02'extendedsegmentaddressrecord:用来标识扩展段地址的记录

'03'startsegmentaddressrecord:开始段地址记录

'04'extendedlinearaddressrecord:用来标识扩展线性地址的记录

'05'startlinearaddressrecord:开始线性地址记录

数据类型之后的为数据,最后一个字节0xop为校验和。若数据地址不连续,则用0xff填满。

所述的主控mcu模块与上位机模块之间交互的协议:

首先要确定主控mcu模块与上位机模块通讯的波特率。在主控mcu模块进入bootloader之前,仅仅是主控mcu模块与上位机模块之间简单的握手信号,所以通讯的波特率定为2400bps。当主控mcu模块进入bootloader之后,开始主控mcu程序升级数据包的传输,则主控mcu模块与上位机模块的波特率提升为9600bps,以提高主控mcu程序升级数据包传输刷写的速度。

主控mcu模块与上位机模块握手的机制为:

上位机模块发送一个握手命令之后,进入等待超时状态;若主控mcu模块返回握手信号,则上位机模块继续发送进入boot的命令给主控mcu模块,若等待超时,则重新发送握手信号。上位机模块发送进入boot的命令之后,等待主控mcu模块返回确认进入boot的命令,若上位机模块收到确认进入boot的命令,则上位机模块进入准备数据传输状态。一旦上位机模块接收到主控mcu模块的“start”信号(即“bootload”信号),就开启xmodem协议传输。当主控mcu模块返回一个“end”信号时,表示主控mcu程序升级数据包正确发送完成,上位机将退出xmodem协议,停止传输。

实施例:

本实施实例中由一台超声波智能燃气表作为程序升级对象,一个带usb接口的集成光电头与电脑上位机连接通讯,集成光电头可磁吸附在超声波智能燃气表光电电路上方的透明表壳上,实际只要在电脑上进行上位机操作即可。

图1为xmodem协议传输流程,发送方仅仅支持具有校验和的传输方式,接收方首先发送nak信号发起传输,如果发送方没有数据返回过来,就需要接收方经过超时等待时间后再发起nak信号来进行数据传输。如果发送方发送的数据传输正确,接收方需要发送ack信号来进行确认;如果数据传输有误,则接收方发送nak信号。发送方在接收到nak信号之后需要重新发起该次数据传输,直到该次数据正确传输完成。如果所有数据传输完成,发送方需要发送eot信号给接收方,作为本次数据传输的结束信号。而当接收方发送can信号,发送方收到can信号后,则直接无条件结束本次传输过程,无需再发送eot给接收方。

图2为本发明的基本流程图解,该流程图解即为上述上位机模块与主控mcu模块程序功能的综述。上位机发送一个握手命令之后,进入等待超时状态。若主控mcu接收到这个握手信号,则向上位机返回一个握手信号;若主控mcu没有接收到这个握手信号或者接收到错误的其他信号,则不返回握手信号,那么上位机将会等待超时。若上位机等待超时,则将会重新发送握手信号;若上位机接收到主控mcu返回的握手信号,则上位机发送进入boot的命令,等待主控mcu返回确认进入boot的命令。主控mcu收到进入boot的命令,则置位boot标志位,并进入boot,向上位机返回一个确认进入boot的命令。上位机收到确认进入boot的命令后,上位机进入准备数据传输状态。一旦上位机接收到主控mcu的“start”信号,就开启xmodem协议传输,并将波特率切换为9600bps。在对主控mcu的程序刷写完成后,主控mcu会返回一个“end”信号时,表示程序正确发送刷写完成,上位机收到后将退出xmodem协议,停止传输。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1