龙源期刊网 http://www.qikan.com.cn
基于CAN网络的BOOTLOADER设计与实现
作者:万礼华 李渔 王怀翊 来源:《硅谷》2013年第11期
摘 要 单片机更新程序一般使用烧写器直接烧写来完成程序的更新下载,这种方法在实际产品使用中更新程序不便,本文提出一种基于CAN网络的在线更新应用程序的解决方案,设计开发了基于CAN网络的bootloader;并从bootloader的软件架构分析了软件实现的原理,对其中关键部分的实现做了较深入的阐述,提出了基于CAN自定义协议的单片机bootloader开发思路,具备一定的通用性。
关键词 USB;CAN;BOOTLOADER
中图分类号:TP29 文献标识码:A 文章编号:1671-7597(2013)11-0000-00 1 系统结构
Can-bootloader的实现基于如图1所示系统环境结构。 图1 其中:
USB-CAN转接卡:实现USB总线到CAN总线的协议转换,通过该设备实现BCU的can总线与PC机的数据通信。
下位机板卡:运行bootloader软件,接收S19镜像文件。
PC机(windows):运行上位机程序,向BCU发送S19镜像文件。 2 通信协议
BOOTLOADER通过CAN总线与USB-CAN卡通信,BOOTLOADER通过CAN总线接收从PC机发送过来的S19镜像文件(通过USB-CAN卡)进行BOOTLOADER的flash烧写。 整个通信协议基于文本传输格式的异步文件传输协议,PC机和CAN卡之间以128字节块的形式传输数据,CAN卡与BOOTLOADER之间以8字节的形式传输数据,采用应答传输机
龙源期刊网 http://www.qikan.com.cn
制来配合USB高速端的流控,CAN卡将PC机传输过来的数据块以8字节发送,发完一整包(128字节)的数据后以ACK的形式通知PC机可以发送下一包数据。 2.1 上位机与CAN卡通信协议
上位机与CAN卡之间通过USB总线连接,USB-CAN卡被windows识别为普通USB设备,上位机应用程序调用CAN卡的windows驱动程序进行数据读写,数据包长(含包头)最大为128byte。具体实施协议如下所述(USB总线物理层具备CRC校验,所以协议不需对数据进行校验。
2.1.1 协议包数据格式 协议数据包格式如图2所示。 图2
其中包长、包序号、标志皆为1byte,数据为0~125byte。具体含义如下: 包长:指示本包数据长度
包序号:指示本包序列号,第一包序号约定为1,后续序号在0~255间循环。
标志:指示本包数据是否为待传输文件的最后一包,若是起始包将标志置1,最后一包将标志置2,其他置0。 2.1.2 确认包格式
确认包为接收方收到正确的数据后向发送方传输,固定为1byte,值为0x 0x06。#define ACK 0x06。
2.2 CAN卡与BOOTLOADER通信协议
CAN卡与BOOTLOADER之间数据包长固定为8字节。具体实施协议如下所述: 2.2.1 协议数据包格式
(每个数据包含有125字节数据) 协议数据包格式如图3所示。 图3
龙源期刊网 http://www.qikan.com.cn
传输文件用到的基本数据包大小为125字节,若待传输文件的大小不是125字节的整数倍,那么最后一包数据报文的长度不足部分需以CTRLZ填充报文。 2.2.2 协议相关控制字符
(文件以文本格式传送,以下控制字符不占用128个ascii码) SOH 0x01; EOT 0x04 ACK 0x06; NAK 0x15 CAN 0x18; CTRLZ 0x1A 2.2.3 协议传输概述 传输启动:
协议传输由数据接收方发起,接收方通过向发送方发送NAK报文,发送方收到后进入发送流程。 传输过程:
当发送方接收到接收方发送的第一个NAK后,发送方进入协议的传输过程,进入传输过程后发送方需将待传送数据按照图3所示数据包格式打包,最后将打包的成帧数据包传送。 数据的发送接收采用ACK确认机制,发送方发送一包数据后需等待接收方的确认ACK,收到ACK后发送方才能继续发送数据;若通信的过程中发送方有可能收到NAK或CAN字节的异常处理报文,其中NAK表示接收方请求重发当前报文,CAN字节表示接收方请求停止传输。
结束传输:
如果收发通信双方传输正常,发送方需向接收方发送EOT字节以通知接受方传输正常结束。接受方收到EOT字节之后需回送ACK进行确认。当然在结束传输的过程中接收方也可以发送CAN字节来强制停止传输(发送方收到CAN字节后不需再发EOT确认)。 3 USB-CAN转接卡设计 3.1 USB从设备驱动设计
龙源期刊网 http://www.qikan.com.cn
USB总线中的通信包含以下四种:控制传输、批量传输、中断传输、定时传输等四种。USB设备的枚举过程采用的就是控制传输。从设备枚举成功后,本设计的数据传输方案采用USB规范定义的中断传输和批量传输两种传输方式来传输数据,其中中断传输用于收发控制数据,而批量传输用于传输数据。
其中控制传输是重点和难点,当从设备插入USB集线器时,主机向从设备发送一个获取状态命令请求来验证设备是否激起重启状态。设备现在使用默认地址0x0与主机通信。通信流程如下所述:
1)主机通过默认地址0x0发送USB协议中的获取设备描述符命令以获取控制传输管道的基本参数(最大数据包长等)。
2)主机发送设置地址命令给设备请求分配新的地址,请求成功后设备端保存新地址(此后的通信都通过这个新地址进行通信)。
3)主机通过新地址发送获取设备描述符命令,获取设备描述符的完整信息(如VID、PID等)。
4)主机通过新地址发送获取设备配置命令,获取设备的配置信息。此时主机提示加载新设备驱动程序后,主机发送设置配置命令为设备选择合适的配置参数,配置成功后,设备就可以通过应用软件进行数据传输阶段的通信了。
数据传输阶段较简单,只需对相应的数据端点寄存器进行读写即可完成数据的收发。 3.2 CAN驱动设计
CAN控制器采用SJA1000,SJA1000支持BasicCan和PeliCan两种模式。其中PeliCan模式功能强大、支持多种滤波方式,本设计采用PeliCan模式。上位机通过USB发送应用程序镜像(具体实现见上述通信协议),BOOTLOADER解析协议,完成镜像的烧写,最终能通过USB-CAN卡实现对多点CAN网络进行指定节点的应用程序烧写。 3.3 windows驱动及应用软件设计
USB的windows驱动采用DriverStudio2.6 DDK,启动DDK后选择WDM类型,再选择USB总线类型、并设置好VID和PID,最后设置好各个端点地址、端点传输类型、最大包长等选项后,完成USB驱动的框架,在读写函数中加入驱动的数据处理部分后即可完成驱动的设计(生成inf和sys文件),最终驱动程序读写部分打包为DLL文件以便上位机应用程序调用,应用程序协议处理较简单(参看上述协议部分),最终程序界面如图4所示。 4 CAN-BOOTLOADER设计
龙源期刊网 http://www.qikan.com.cn
4.1 BOOTLOADER结构
BOOTLOADER结构如图5所示。 各区在FLASH中的地址范围如下:
应用程序区+应用程序中断向量表:0x7843ff~0x7f3fff、0x7f83ff~0x7fffff
BOOTLOADER区+BOOTLOADER中断向量表:0x7803ff~0x783fff、0x7f43ff~0x7f7fff 程序复位首先进入bootloader,进入后由bootloader管理中断向量表,将应用程序中单片机的默认中断向量整体映射到bootloader中断向量表中,进入应用程序后bootloader交出管理权由应用程序管理使用单片机默认的中断向量表。 4.2 程序结构及处理流程
Bootloader处理的镜像文件格式采用S19格式,S19的文件格式解析是完成烧写的重要组成部分,S19文件是摩托罗拉公司为便于对可执行镜像文件便于烧写而提出的一种文件格式。其中开发的重心集中在烧写APP命令的处理,Bootloader接收到编程命令后,进入CAN通信自定义协议接收流程,bootloader收到128字节块存入缓冲区后根据图中所示状态机解析出S19文件的完整一行数据,将该行烧入FLASH;烧写成功后继续协议的下一个128字节块的数据接收;当收到S19文件的最后一行时完成对整个S19文件烧写处理流程,协议接收到128字节数据后的流程处理如图7所示。 5 结束语
本文基于飞思卡尔MC9S12系列开发的bootloader,实现了单片机bootloader所需的大部分功能,且软件模块划分合理、设计思路清晰;同时串口通信协议采用标准的xmodem协议,具备一定的通用性,对其它架构的单片机或处理器设计开发bootloader亦有一定的参考价值。 参考文献
[1]MC9S12XEP100 Reference Manual CoversMC9S12XEFamily.
[2]邵贝贝.嵌入式系统中的双核技术[M].北京:北京航空航天大学出版社,2008. 作者简介
万礼华(1974-),男,汉族,重庆市沙坪坝区人,高级工程师,硕士,研究方向:轨道交通闸机通行控制算法,汽车电子控制器,短波自适应通数字电台,综合交换调度设备等。