基于CAN总线节点的远程在线升级系统设计

2015-11-23 02:35王建斌江冰
单片机与嵌入式系统应用 2015年7期
关键词:系统升级服务器端数据包

王建斌,江冰

(河海大学物联网工程学院,常州 213022)

基于CAN总线节点的远程在线升级系统设计

王建斌,江冰

(河海大学物联网工程学院,常州 213022)

针对特种纤维检测控制系统各节点软件升级困难的问题,设计了基于CAN总线应用层协议的一种远程在线升级系统,实现了单节点、多节点同时在线升级。通过实际运行分析,该系统具有可靠性高、升级操作简便、系统稳定的特点,对一般工业网络中的节点升级具有参考意义。

在线升级;CAN总线;应用层协议;IAP;LPC4357;Cortex-M4

引 言

特种纤维检测控制系统是对生产线上产出的纤维产品各种参数进行实时检测和设备的控制装置。系统由多个数据采集节点组成,通过CAN总线网络将数据汇总到主节点,主节点对数据进行处理、分析后输出相应的控制信号,实现对生产线设备的实时调整和控制。传统情况下,如果需要针对节点进行软件升级更新,就需要专业技术人员到生产现场,通过专用的下载设备进行程序烧录更新,使系统维护成本大幅提高,降低了生产效率。因此,结合特种纤维检测控制系统现有的CAN总线网络,并利用节点微控制器的IAP功能,设计一个节点远程在线升级系统十分有必要。

本文在实现CAN总线报文数据收发的基础上,参考TCP/IP协议中的TFTP协议规范,设计了一个简单实用的系统在线升级应用层协议,并结合微控制器的IAP功能,实现待升级节点软件升级的目的。

1 lAP技术及升级系统总体结构

1.1 lAP技术及其编程实现

IAP(In Application Programming,在应用中编程)是指用户在运行应用程序过程中通过程序控制实现对片上Flash存储器的擦除和读/写等操作。IAP技术是实现系统在线升级的必要前提,本系统中待升级节点采用NXP公司的基于Cortex-M4内核的微控制器LPC4357。该芯片集成了功能强大的IAP技术,可以单次最多向目标Flash中写入4KB数据。

IAP的功能函数被固化在ROM的Boot中。以LPC4357为例,ROM的地址0x1040 0100作为指针指向IAP功能函数入口地址IAP_entry,因此当使用C语言编写调用函数时,首先定义IAP入口地址。在进行IAP函数调用时,通过寄存器R0作为指针来传递命令代码和参数。IAP命令的返回结果通过寄存器R1作为指针来传递。

实现节点软件升级的关键一步就是将CAN总线接收的代码数据通过IAP编程到指定的片上Flash的扇区。IAP通过以下几个步骤实现编程操作:IAP初始化、准备扇区、擦除扇区、准备扇区、编程扇区和数据校验。

1.2 在线升级系统总体结构

系统由检测节点、CAN总线网络和升级服务器组成。其中检测节点和CAN总线网络是特种纤维检测控制系统的组成部分,因此,只要将升级服务器接入CAN总线网络,就可以搭建在线升级系统的硬件平台。升级系统总体框图如图1所示。

图1 节点在线升级系统框图

升级系统的软件由节点端软件和服务器端软件组成,节点端和服务器端通过CAN总线进行数据交互,在此基础上,设计CAN应用层协议。本文通过分析TCP/IP协议中的TFTP协议规范,设计了一款简单实用而且适用于CAN总线网络的系统升级协议。升级系统协议分层结构如图2所示。

图2 升级系统协议分层结构

2 系统升级协议设计

2.1 TFTP协议及文件传输基本流程

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的应用层协议,基于UDP传输协议。最初用来引导无盘系统,主要用于传输小文件。TFTP协议报文分为:读/写请求报文、数据包报文、确认信息报文以及差错报文。TFTP报文格式如图3所示。

TFTP客户端首先向服务器的端口69发送文件下载/上传请求,请求的相应报文格式如图3(a)所示。服务器接收请求后打开一个新的端口与客户端进行通信,服务器端口69则继续等待其他客户端的请求,从而实现同时响应多个客户端的文件传输请求。当客户端发送的文件下载请求得到服务器ACK确认后,开始发送编号为1的数据包,数据包的报文格式如图3(b)所示。每个数据包的大小为固定的512字节,服务器每次发送数据包之前都必须得到客户端的ACK确认。当客户端接收到小于固定字节的数据包时,则认为文件传输结束。

TFTP协议也提供了相应的错误处理机制。服务器端和客户端都可实现超时重传,只要有一端出现超时,就将重传丢失的报文,从而有效的提高文件传输的正确率。在传输过程中出现错误时,服务器端向客户端发送差错报文。

图3 TFTP报文格式

2.2 系统升级协议的报文格式

CAN总线协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧。其中,数据帧用于发送单元向接收单元传送数据。数据帧格式分为标准格式和扩展格式,两者区别在于标识符分别占11位和29位,这里仅使用标准格式的数据帧作为节点和升级服务器通信的基本单位。

由于一个数据帧最多只能携带8字节数据,而在一般文件传输应用中数据以数据块的形式进行传输,因此在文件传输时需要进行数据拆分、重组的操作。在应用层的数据报文中对这一操作进行屏蔽,具体操作通过底层协议实现,因此这里仅需关心数据帧的数据段。升级协议的报文分为:升级命令、数据包、确认信息、错误信息,相应的报文格式如图4所示。

升级命令由升级服务器发出,ID号用于确认待升级节点,升级模式分为单节点升级模式和多节点同时升级模式。数据包用于服务器向节点传输升级所需的二进制文件,每个数据包携带固定的1024字节数据,这是因为节点利用IAP技术进行软件升级时,每次对片上Flash编程的字节数是固定的,可选512字节、1024字节、4096字节3个选项,这里选用1024字节。确认信息和错误信息参考TFTP协议的相应报文格式。

图4 升级协议报文格式

2.3 系统升级协议及文件传输流程

系统升级命令由升级服务器发出,节点在接收到升级命令后通过校验ID号判断升级模式,进入相应的升级状态,并向服务器发送确认信息ACK。升级服务器接收到ACK确认后,开始发送编号为1的数据包,节点接收到数据包就立即将1024字节数据编程到片内Flash中,编程成功后返回ACK 1,以此类推。如果最后一个数据包N的数据长度小于1024字节,则自动向数据包添加0,使数据包长度正好为1024字节。

升级服务器接收到节点确认信息ACK N,表明节点升级完成。这里,节点端采用边接收边升级的方案。如果将升级文件全部接收后再进行升级,则需要大量的RAM空间,一旦升级文件过大,节点升级就会失败。系统升级流程如图5所示。

图5 系统升级流程

2.4 系统升级中的错误处理

在系统升级过程中,可能会出现发送数据包丢失、连接中断的情况。当服务器端发送的数据包丢失或节点端接收该数据包失败时,节点端向服务器端发送错误信息。服务器端接收错误信息,根据错误内容判断是否需要重新发送数据包。如果服务器端在一定时间内没有接收到节点端的确认信息或错误信息,则认为系统升级失败,服务器端会向节点端发送升级失败的错误信息ERROR,节点端接收该信息后进入升级失败状态。

3 节点端软件升级协议的实现

检测节点采用NXP公司的基于Cortex-M4内核的微控制器LPC4357作为数据采集和控制核心,片上集成了1MB的Flash,分为Bank A和Bank B两个存储体,每个存储体各占512KB。

节点程序分为两部分:Bootloader升级程序和APP应用程序。APP应用程序分为两个区:默认应用程序区和升级应用程序区。片上Flash功能分区如图6所示。

图6 片上Flash功能分区

Bootloader升级程序烧录在片上Flash的Bank A扇区0处,占用8KB空间。系统启动时,最先执行该处程序,首先进行系统初始化操作,包括CAN总线接口初始化、IAP初始化、读器件ID号等。初始化完成后,进入等待升级状态。在该状态下,如果接收到升级服务器发送的升级命令,则进入升级状态。系统升级成功后进入待跳转状态,最后系统跳转到升级后的应用程序区。节点升级状态转换图如图7所示。

当Bootloader初始化完成且等待升级命令超时后,系统跳转到APP应用程序的默认应用程序区,开始执行节点应用程序。应用程序除了完成数据采集和CAN总线数据传输功能,还能在接收到升级服务器的升级命令时,中止系统运行并跳至Bootloader区,进入系统升级状态。

图7 节点升级状态转换图

由于系统启动时不是直接开始执行APP应用程序,而是从Bootloader程序跳转进入该处程序,因此,在APP应用程序初始化之前必须将中断向量表重映射,防止APP应用程序发生中断时进入Bootloader程序的中断函数。

当升级失败时跳转到默认应用程序区,使系统在升级出错时依然能够正常运行。系统升级时,对升级应用程序区进行擦除、编程操作,升级成功后进入该程序区执行升级后的应用程序。Bootloader程序的待跳转状态根据等待超时、升级状态分别进入默认应用程序区或升级应用程序区。

4 升级服务器端软件设计

升级服务器是普通PC机,通过USB-CAN接口卡实现与CAN总线的连接。因此,升级服务器首先初始化并配置USB-CAN接口卡,通过以下步骤实现:

①打开USB-CAN接口卡对应的COM口。

②配置相应COM口波特率、校验位等参数。

③通过向COM口发送配置信息,对USB-CAN接口卡进行参数配置。

其中,应设置USB-CAN接口卡波特率与外部CAN总线网络的波特率相匹配;接着,升级服务器将对升级程序的二进制文件进行操作,该二进制文件在编译器对节点升级程序进行编译时生成,也可通过对生成的HEX文件进行转换得到。首先,升级服务器获取文件大小N KB,将该数值N传递给升级命令,节点端接收升级命令的同时可获取文件大小,从而确定IAP编程次数;然后,升级服务器将该二进制文件读入内存中,在升级开始后,根据升级协议的相关格式将数据进行封装并发送到相应节点端。

升级服务器也可根据需要选择不同的升级模式。可供选择的升级模式有:单节点升级模式和多节点同时升级模式。单节点和多节点同时升级的区别在于,多节点升级利用了CAN总线节点可接收广播数据的特性,通过配置USB-CAN接口卡的ID过滤器,升级服务器可接收相应节点发送的确认信息,实现多个节点同时升级的操作。升级服务器的软件界面如图8所示。

图8 CAN总线节点升级服务器软件界面

结 语

本文结合特种纤维检测控制系统现有的CAN总线网络和节点的IAP功能,设计了节点在线升级系统。参考TFTP协议,设计了一种适用于CAN总线网络的系统升级协议。通过将节点端的片上Flash进行功能分区,实现了在升级出现错误时维持节点稳定运行。根据实际应用需要,服务器端选择相应升级模式,提高了升级效率。系统的实际运行结果表明,升级操作简单高效,节点在升级后运行稳定,系统性能良好。CAN总线网络和智能节点广泛应用在工业控制等领域,该系统为节点升级的实际需求提供了一种可行的解决方案。

[1]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.

[2]汪小燕,连晓平,董燕,等.基于TFTP协议的嵌入式系统开发方法设计与实现[J].华中科技大学学报,2006,34(12):56 -58.

[3]李真花,崔健.CAN总线轻松入门与实践[M].北京:北京航空航天大学出版社,2011.

[4]王邦继,刘庆想,李相强,等.CAN总线应用层协议的研究与实现[J].计算机工程与应用,2011,47(20):14-16.

[5]朱飞龙,杨鸣.基于IAP功能单片机的远程更新系统设计[J].机电工程,2010,27(9):76-79.

[6]梁松涛.基于TFTP协议的嵌入式远程数据传输系统的研究[D].北京:北京工业大学,2008.

王建斌(硕士研究生),研究方向为嵌入式系统应用;江冰(教授),研究领域为通信与信息系统。

Remote Online Upgrade System Based on CAN Bus Node

Wang Jianbin,Jiang Bing
(College of Internet of Things Engineering,Hohai University,Changzhou 213022,China)

Aiming at the nodes software upgrading difficulty of special fiber detection and control system,a remote online upgrade system based on CAN bus application layer protocol is designed.The single node upgrade mode and multi-nodes upgrade mode are achieved.Experimental results indicate that the system is high reliable,convenient to operate and stable,and the system has

ignificance for the node upgrading in general industrial network.

online upgrade;CAN bus;application layer protocol;IAP;LPC4357;Cortex-M4

TP399

A

��薛士然

2015-02-06)

猜你喜欢
系统升级服务器端数据包
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
Linux环境下基于Socket的数据传输软件设计
SmartSniff
甘肃省高速公路通信系统升级改造解决方案
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
高速公路监控系统升级探究
“一张网”收费系统升级改造项目探析