轮机模拟器I/O单元远程升级设计
2016-10-12王德龙王冬捷姜瑞政
王德龙, 王冬捷, 姜瑞政
(大连海事大学 轮机工程学院, 辽宁 大连 116026)
轮机模拟器I/O单元远程升级设计
王德龙, 王冬捷, 姜瑞政
(大连海事大学 轮机工程学院, 辽宁 大连 116026)
P89V51RD2单片机通过驱动网络芯片W5100实现与以太网的联系。借助在应用中编程(In-Application Programming, IAP)的功能,实现在运行中对轮机模拟器I/O单元程序的读取、擦除和烧写。在计算机上用MATLAB的图形用户界面(Graphical User Interface, GUI)设计远程主机升级界面,创建网络端口;通过以太网发送HEX可执行文件,实现对轮机模拟器I/O单元运行程序的远程升级。
船舶工程; 轮机模拟器; 单片机; 以太网; 在应用中编程(IAP); 图形用户界面(GUI)
Abstract: The microcontroller P89V51RD2 drives the network chip W5100 to achieve the Ethernet connection, which makes it possible that one read, erase and program the code when the microcontroller program is running by means of the In-Application Programming (IAP). The remote host update interface is developed with MATLAB Graphical User Interface (GUI) on a PC. A network port to send HEX records via the Ethernet network is created. This design allows the input and output unit microcontroller programs of the marine engine room simulator to be updated remotely.
Keywords: ship engineering; marine engine room simulator; microcontroller; Ethernet; IAP; GUI
随着大连海事大学轮机自动化实验室开发的全任务轮机模拟器逐渐在各个实训基地推广和改进,为方便后续升级维护,对其使用的板卡(轮机模拟器I/O单元)进行远程升级成为亟待解决的问题。
传统的单片机编程方式是在焊接到印刷电路板之前使用并行烧写器将代码烧写到Flash中;现在单片机已实现在线编程技术(In System Programming, ISP),即单片机焊接到印刷电路板之后,通过串口线,配合计算机中专用的烧写软件将程序烧写到单片机的Flash中。但是,若要随时对分布在各地的轮机模拟器I/O单元的程序进行升级维护,上述2种方式都无法实现。轮机模拟器I/O单元远程程序升级设计就是在该需求下提出的,通过在单片机的外围电路中加入集成有硬件TCP/IP协议栈的网络芯片W5100,使单片机与以太网建立连接;利用在应用中编程(In-Application Programming, IAP)功能将从远程主机发送来的新程序数据烧写到单片机的Flash中重新编程,即可实现单片机的远程升级操作。图1为该设计的总体示意。
图1 轮机模拟器I/O单元远程程序升级设计总体示意
1 硬件电路设计
轮机模拟器I/O单元处理器采用的是Philips公司生产的一款80C51内核微处理器P89V51RD2,包含64 KB的Flash、1 024字节的数据RAM及单独的一块8 KB的Flash,存储有Philips公司在芯片出厂时烧写的引导加载程序[1],用于实现IAP和ISP下载。
W5100 是一款多功能单片网络接口芯片,内部集成有 10/100 Mbites/s的以太网控制器。使用 W5100 可实现没有操作系统的 Internet 连接。W5100 内部集成有全硬件的TCP/IP 协议栈、以太网介质传输层(MAC)和物理层(PHY),其中全硬件TCP/IP协议栈支持 TCP,UDP,IPv4,ICMP,ARP和IGMP 等;此外还集成有 16 KB 存储器,用于数据传输。使用W5100无需考虑以太网的控制,只需进行简单的端口编程即可实现与以太网的连接。[2]
硬件电路设计包括P89V51RD2外围电路设计和W5100外围电路设计。P89V51RD2外围电路主要执行的是轮机模拟器I/O单元的相关任务: 16通道数字量输出、16通道数字量输入、8通道模拟量输出及对W5100进行控制。其对W5100有直接地址总线、间接地址总线和SPI总线等3种访问方式。虽然使用直接地址总线方式便于编程和提高通信效率,但鉴于P89V51RD2自带SPI控制器接口,使用SPI总线方式不仅能节约单片机的I/O口资源,而且利于简化印刷电路板布局,减小PCB板尺寸,因此在电路设计上P89V51RD2通过SPI总线访问W5100。为保证通信及时,W5100的中断信号线连接到P89V51RD2的INT1上,网口使用自带网络变压器的RJ-45。图2为在Altium Designer环境中绘制的P89V51RD2及W5100外围电路原理。
a) P89V51RD2外围电路原理
b) W5100外围电路原理
2 程序设计
程序设计包括模拟器相关任务、W5100网络实现和程序升级任务。这里模拟器相关任务不作详细介绍。
2.1W5100网络实现
P89V51RD2通过SPI总线方式访问W5100,其中:P89V51RD2工作于主机模式;W5100工作于从机模式;SPI总线工作于模式3。[3]对W5100的读操作格式为:0X0F(操作符)+2字节地址+1字节数据。对W5100的写操作格式为:0XF0(操作符)+2字节地址+1字节数据。
通过设置相关的寄存器和存储器进行初始化,W5100即可与以太网连接。初始化完成后即可创建端口进行数据通信。W5100支持TCP,UDP,IP_RAW和MAC_RAW模式通信,且可创建4个端口。为提高通信效率,该设计使用UDP模式。图3为W5100 UDP方式的通信流程。
2.2IAP功能实现
IAP功能允许在应用中自行对用户程序代码进行部分或全部修改,为用户提供一种可行的程序更新途径。P89V51RD2的Flash存储结构见图4,其中:64 KB的用户Flash的地址范围为0X0000~0XFFFF;8 KB的引导Flash的地址范围为0X0000~0X1FFF。虽然二者的地址会有部分重叠,但正常运行时引导Flash会被覆盖掉,而激活引导Flash时用户Flash的0X0000~0X1FFF部分会被覆盖掉,因此二者不会产生冲突。
图3 W5100UDP方式的通信流程
图4 P89V51RD2的Flash存储结构
Philips公司在引导Flash中针对IAP功能提供有封装好的子函数,该设计使用的IAP子函数有用户代码烧录和扇区擦除功能。由于引导Flash与用户Flash的部分地址存在重叠,因此只有通过汇编语言才能正确调用,且调用点必须位于0X2000之后。但是,该设计的主函数采用的是C语言,因此需在C语言中调用汇编语言。[4]以下实例是在IAPSubFun.asm中编写的调用IAP烧录子函数的汇编实现,在C语言环境中按相同函数名“P89V51RD2_Write_IAP”声明之后即可调用。
PUBLIC_P89V51RD2_Write_IAP
?PR?_P89V51RD2_Write_IAP?IAPSUBFUN SEGMENT CODE
RSEG ?PR?_P89V51RD2_Write_IAP?IAPSUBFUN
_P89V51RD2_Write_IAP:
PUSH DPH
PUSH DPL
CLR EA; 关闭中断
MOV R1, 02H; 调用字节写命令
ANL 0B1H, 0FCH; 清零BSEL位
MOV DPH,R6; 存储器高字节地址
MOV DPL,R7; 存储器低字节地址
MOV A,R5; 烧录的数据
LCALL 1FF0H; 进入引导Flash
MOV R7,A ; 由R7返回是否成功写入的消息
ORL 0B1H, #01H ; 返回用户程序
SETB EA; 开中断
POP DPL
POP DPH
RET
为使上述函数的调用点在0X2000之后,在Keil工程“BL51 Misc”选项卡的“Code”中输入“?PR?_P89V51RD2_Write_IAP?IAPSUBFUN(0XF800)”即可将上述烧录函数的入口地址定位在用户Flash空间的0XF800处。同理可实现扇区擦除函数。
2.3升级程序设计
由于P89V51RD2有64 KB的Flash,而一般的用户程序代码很少超过30 KB(设计中模拟器相关任务Code不超过1.5 KB,完整的网络实现任务及IAP操作功能函数不超过2 KB),因此为简化电路,避免添加存储器件,可将剩余的部分空间利用起来当作数据存储器[5],作为新代码的暂存区,直到新程序代码完全正确接收后再拷贝到主运行空间,避免升级中断导致原程序损坏而死机。图4中将用户Flash 分为主运行空间30 KB(0X0000~0X77FF)、升级暂存空间30 KB(0X7800~0XEFFF)和IAP功能操作空间4 KB(0XF000~OXFFFF)等3部分。
具体的设计为:正常运行的程序代码存在主运行空间[6];与IAP功能相关的函数通过绝对地址定位存储在IAP操作空间;升级时,首先擦除升级暂存空间,将接收到的代码的存储地址偏移0X7800后存储在暂存空间,代码准确接收完成后再将暂存空间的代码拷贝到主运行空间,完成升级操作。若代码的地址在IAP操作空间,则程序就将忽略该条代码,防止IAP操作空间被修改。
单片机工程通过Keil编译后即可获得Intel HEX格式的可执行文件,该文件内的每一行记录为一条十六进制代码,具体形式为
:NNAAAARRDD…DDCC
(1)
式(1)中:“:”为记录的起始标志;“NN”为有效数据DD的长度,最大为16个,即0X10;“AAAA”为装入地址;“RR”为数据类型,00表示数据记录,01表示结束;“DD”为将要烧写的数据;“CC”为校验和,一条记录中除“:”外的所有数据相加的和应为0,否则出错。
在远程主机上按上述格式将HEX记录逐条发送给现场的单片机,单片机接收到数据后解析出烧写地址和有效数据并校验,HEX记录校验通过才可写入到对应的升级暂存空间中。图5为单片机端收到新数据升级操作流程。
平时单片机执行模拟器相关任务,远程主机发来升级指令后,单片机首先擦除暂存空间,然后回复远程主机准备完毕代号;远程主机收到代号后再发送新的代码数据。为保证代码数据的准确性,每接收一条记录,待校验通过并烧写后,单片机再读取刚烧写的数据并回复,远程主机确认无误后再发送下一条记录,如此往复,直到发送完毕。若校验不通过或出现其他错误,则中断此次升级操作,并返回相应的错误代号。单片机收到结束指令时,程序跳转到代码拷贝函数:擦除主运行空间、将暂存空间的代码拷贝到主运行空间中。拷贝完成后,启动看门狗定时器复位,单片机即进入到新程序中运行,并回复升级完成代号给远程主机。
图5 单片机端收到新数据升级操作流程
3 远程主机升级界面设计
MATLAB GUI是MATLAB中的交互式图形用户界面开发工具,用户可在MATLAB环境的支持下开发需要的应用程序,兼顾MATLAB强大的数据处理能力和用户界面良好的交互特性。远程主机升级界面的主要功能为:读取HEX文件、创建UDP端口及将HEX记录按UDP协议发送到指定的终端并监控过程状态。图6为该远程主机升级界面流程。
图6 远程主机升级界面流程
图7为远程主机升级界面的初始化界面,其中:文本框用来输入指定终端单片机的IP地址、网络端口及本地的网络端口;“选择文件”按钮用来选择HEX文件;“升级申请”按钮用来发送升级指令,开始升级操作。
4 调试
将包含有模拟器相关任务、W5100网络实现和程序升级任务等相关任务对应函数的Keil工程编译好,获得HEX可执行文件;该文件通过ISP下载方式下载到P89V51RD2之后,单片机即可通过以太网与远程主机联系,并具有远程程序升级功能。打开MATLAB中的远程主机升级界面,输入待升级板卡的IP地址、网络端口及本地计算机的网络端口,添加更新后的模拟器功能任务的HEX可执行文件,点击“升级申请”按钮;远程单片机收到升级指令之后,会在清除暂存区后返回准备完毕代号,此时远程主机升级界面上隐藏的“发送”按钮会显示出来,表明可开始发送;点击“发送”按钮,开始发送HEX记录,直到发送完成。单片机将升级暂存空间的数据对应拷贝到主运行空间之后,看门狗定时器复位,程序跳转到0X0000处开始执行新的程序并回复升级完成代号。完成后的远程主机升级界面见图8。
图7 远程主机升级界面初始化界面
图8 完成后的远程主机升级界面
5 结束语
针对轮机模拟器I/O单元远程程序升级设计,通过以太网,以较低的硬件成本和简单的操作即可实现对轮机模拟器I/O单元程序的远程升级维护,无需定制引导加载程序,可随时对程序进行升级或漏洞修复,避免派专业人员携带编程设备到现场处理,可大大提高工作效率和模拟器的智能化水平。
[1] 汪萍,李队员. 基于P89V51RD2的IAP设计[J]. 工业控制计算机,2008,21(11): 96-97.
[2] 王计元. 单片网络接口芯片W5100的原理与应用[J]. 上海电力学院学报,2011,21(2): 153-159.
[3] 蒋伟,文昱. SPI总线及其在单片机系统中的应用[J]. 科技广场,2008(10): 201-202.
[4] 杨加国. 单片机C语言与汇编语言混合编程[J]. 成都大学学报(自然科学版),2008(3): 208-211.
[5] 綦声波,褚东升,刘滨,等. 基于P89C51RD2 IAP功能的数据存取与软件升级[J]. 单片机与嵌入式系统应用,2002(11): 46-48.
[6] ZHANG Xufei, WANG Jian. Realization of Remote Online Upgrading Technology Based on RealView MDK and IAP Function[C]. Mechanic Automation and Control Engineering (MACE), 2010: 6266-6269.
RemoteUpdateofI/OUnitsofMarineEngineRoomSimulator
WANGDelong,WANGDongjie,JIANGRuizheng
(Marine Engineering College, Dalian Maritime University, Dalian 116026, China)
U665.261
A
2016-05-19
王德龙(1989—),男,河南信阳人,硕士,主要研究方向为轮机自动化与智能化。E-mail: wdldmu2009@163.com
1000-4653(2016)03-0016-04