基于USB的列车车载类设备软件升级技术研究
2020-02-22杨玉春苏燕辰伍川辉燕春光
杨玉春,苏燕辰,伍川辉,燕春光
(1.西南交通大学 机械工程学院,成都 610031;2.中车唐山机车车辆有限公司,唐山 063035)
近年来,高速列车集成了越来越多的电子设备,例如车载视频监控、故障诊断设备、失稳平稳监控设备、弓网监控设备等。当前电子设备软件升级是通过以太网、CAN总线、串口等通信接口实现在线升级,同济大学石盼等人提出基于以太网接口的 IAP(In Application Programming)远程升级技术[1],该技术优点是传输速度快;南京邮电大学王琦和李龙光等人提出基于CAN总线的程序在线升级技术[2-3];东南大学提出基于串口的应用程序在线升级技术[4]。以上技术均是在线升级技术,需要携带电脑和专用通信线缆,连接设备和电脑后在线完成设备升级,该类方式操作不够便捷,且串口和CAN的实际数据传输速率相对较低。由于列车车载设备数量众多、操作环境复杂、不便拆卸等原因,这种在线升级的方式对工作人员来说无疑是一件繁重的工作。本文以STM32F407为主控芯片,进行基于USB的列车车载设备软件升级的技术研究,提出一种传输速率更快的,基于USB 2.0通信的离线升级技术,利用便携式U盘对多个车载电子设备进行软件升级,工作人员只需携带装有bin文件的U盘,插入对应主机上,便可实现对整列车的同系列设备的软件升级。
1 STM32和USB介绍
1.1 STM32F407处理器介绍
STM32F407芯片是32位低功耗、高性能的处理器,该处理器基于ARM Cottex–M4内核,集成FPU和DSP指令,支持浮点运算,其CPU工作频率达168 MHz,Flash为1 024 K,SRAM为192 K,具有丰富的资源(定时器、内部存储、CAN、485、USB、以太网、串口等)。该处理器使用新内核的Thumb–2指令集,使设计人员可以把代码容量降低45%,把应用软件所需内存容量降低了近一半[5]。STM32F407内部自带USB OTG FS控制器和USB OTG HS控制器,支持高速HS(USB2.0,传输速率480 Mbps)、全速FS(USB1.1,传输速率12 Mbps)和低速(USB1.0,传输速率1.5 Mbps)传输。
1.2 USB总线介绍
USB是一种串行总线通信方式,具有速率高、支持热插拔、性能可靠、价格低廉和易于扩展等特点[6]。(1)速率高,目前的USB 2.0标准支持传输速率达到480 Mbps,能很好地满足大部分的接口需求;(2)支持热插拔,即插即用;(3)易于扩展,通过USB集线器,1个USB主控制器上最多可以连接126个外设;(4)性能可靠,USB系统通过规范的硬件设计和USB协议中完善的数据错误检测机制来确保数据准确无误地发送和接收[7]。
2 USB通信协议
USB外接设备从插入主机到拔出的整个过程中,共有6种状态,包括:连接态、上电态、缺省态、地址态、配置态、挂起态[8],这个过程称为枚举过程。
2.1 枚举过程
当一个USB外接设备被挂接到总线上时,主机通过枚举过程识别和管理新加入的设备,这个过程使得USB外接设备支持热插拔[9]。图1展示了枚举过程的转换流程及转化条件,状态切换的因素包括硬件电平变化和设备软件或主机软件的设置[10]。
图1 外接设备枚举转换过程示意图
(1)连接状态,USB外接设备通过USB接口连接主机或Hub,进而改变总线电平,总线由此判断有新设备接入。
(2)上电状态,USB外接设备连接后,总线给其供电,但由于设备未被分配地址,尚不能进行通信,该状态称为供电状态。
(3)缺省状态,USB外接设备插入接口等待100 ms,待供电稳定后,主机给端口发送复位命令,完成寄存器复位后,给设备分配地址0,该地址为USB总线公共地址,称为缺省地址。此时,USB外接设备可通过该地址与主机通信,完成设备配置。
(4)地址状态,主机通过缺省地址0与USB外接设备通信,获取设备描述符、配置参数、配置通道,同时配一个总线地址,之后各种数据传输都是通过该地址。USB外接设备获得唯一地址的状态称为地址状态。
(5)配置状态,主机获得设备描述符之后,开始配置USB外接设备,此时设备处于配置状态。
(6)挂起状态,当总线无任何活动的时间达到3 ms,USB外接设备将自动切换为低功耗挂起状态,此时,USB接口处电流小于0.5 mA,USB接口保持其地址信息和配置信息,等待总线活动将其唤醒。
2.2 USB的通信流
主机与USB外接设备通信是通过端点和管道来实现的,主机缓冲区和设备端点间的通信数据形成通信流。USB通信流如图2所示。
(1)端点:USB外接设备端点是设备的标识。设备端点号有多个,设备地址只有一个。端点按种类分为输入、输出端点;按功能分为0端点和非0端点。
(2)管道:管道是主机存储缓冲器与设备端点间进行数据传输的通道[11]。主机与设备0端点进行通信的管道称为缺省管道。
2.3 USB接口电路设计
很多车载监控设备需进行高速数据传输,故选用USB OTG HS通信模式,外接PHY芯片。本文选用USB 3300芯片作为USB通信的物理芯片,该芯片兼容USB 2.0协议,传输速率最高达480 Mbps,采用并行接口与STM32F407连接,可实现数据快速交互;外接24 MHz晶振,将DP和DM引脚连接至USB–A型接口完成数据传输。USB电路设计如图3所示。
图2 USB通信流示意图
图3 USB电路设计图
3 IAP技术
3.1 IAP实现原理
IAP技术将F1ash映射为System Memory和User Flash Memory 2个存储体。当运行System Memory存储体上的IAP程序时,可对User Flash Memory存储体重新烧写[12],这样做是方便在使用一段时间后,通过预留的接口(USB、CAN、USART等)对产品进行升级。实现IAP时,需要设计2个程序,即IAP程序和App程序,IAP程序通过特定通信方式接收App程序,将App程序存储到指定位置,实现程序更新;App程序是功能程序,用于实现设备的功能。
3.2 IAP工作模式
程序一般存放在STM32内部Flash中,IAP程序从最低位置(0X08000000)开始存放,App程序通过USB接口读入并存储在IAP程序的后面。加载IAP程序后,程序运行流程如图4所示。STM32F407控制器复位后,从0X08000004处取出IAP复位中断向量的地址,如标号①所示,并跳转到IAP复位中断服务程序执行;执行完后,跳转到0X08000004+N的位置执行IAP中main函数,如标号②所示;IAP中main函数读取App更新标志,如标号③所示,并判断是否需要升级,若需要升级,则读取IAP升级程序,并存储到Flash的0X08010000位置[13],如果不需要,则直接执行App程序,如标号④所示;从0X08000004+N+M位置读取App复位中断向量的地址,并跳转到对应复位中断服务程序执行,之后跳转到App main函数执行用户程序,如标号⑤所示[14]。在App main函数执行过程中,如果接收到1个中断请求,PC指针强制跳转到0X08000004中断向量表位置,如标号⑥所示,之后程序再根据App程序偏移量,跳转到对应中断服务程序,如标号⑦所示[15]。中断服务程序执行结束后,返回到App main函数继续执行应用程序,如标号⑧所示。
4 软件升级实现
4.1 底包程序设计
在车载设备的IAP设计过程中,采用USB接口进行通信。(1)执行IAP程序中的USB驱动程序,初始化USB接口,并连接U盘;(2)挂载FAT32文件系统,实现对U盘的读写操作,并检测U盘中是否存在bin文件;(3)IAP程序通过USB接口读取提前配置并存储在U盘中的升级程序,将升级程序存储到Flash的0X08010000位置,升级后IAP跳转到App程序位置开始执行新版App。
以上过程中,若存在U盘连接失败、文件系统挂载失败、bin文件读取失败或校验不通过等情况,则视为升级失败,执行系统复位;若U盘中不存在bin文件,则会跳到Flash0x08010000位置继续执行旧版应用程序。具体升级过程如图5所示。
图4 加载IAP后程序运行流程图
4.2 升级程序生成过程
底包程序采用Keil 5开发平台搭建,Keil 5一般生成hex文件,但系统升级需使用bin文件。bin文件生成需3个步骤,包括:配置升级程序起始地址、配置中断向量表偏移量、运行fromelf.exe。
4.2.1 升级程序起始地址设置方法
升级程序偏移地址设置过程为,打开Options for Target 配置软件,点击Target 选项卡,软件界面如图6所示,在该界面设置App程序起始地址为0X08010000,即偏移量为0X10000。STM32F4系列芯片内部Flash大小为1 024 KB,留给App的存储空间为0X08010000~0X08100000(960 KB);留给IAP的存储空间为:0X08000000~0X0800FFFF(64 KB)。
图5 车载设备软件升级流程图
图6 升级程序起始地址设置界面示意图
4.2.2 中断向量表偏移量设置方法
(1)中断向量表设置函数
NVIC_SetVectorTable(uint32 NVIC_VecTab,uint32 Offset)
(2)IAP中断向量表设置
NVIC_SetVectorTable(0x08000000,0x00)
//IAP偏移量为0
(3)App中断向量表设置
4.3 软件升级技术关键点
(1)软件升级完成时,在从IAP程序跳转到App程序之前,必须复位嵌套向量中断控制器(NVIC,Nested Vectored Interrupt Controller ),防止跳转过程中出现中断,导致应用程序运行失败。
(2)在App程序初始化时需正确设置NVIC向量表,将NVIC向量表映射到App程序起始地址;
(3)实现IAP程序过程中,必须正确处理计时器的清零操作,特别是在bin文件读和写、Flash擦除和编程过程中,要充分考虑计时器清零时间,在程序关键位置清零,一般在while循环函数中进行计时器清零操作。
5 结束语
本文详细分析了IAP和USB通信协议的技术要点,实现了基于USB通信的车载设备软件升级程序,通过装有bin文件的U盘,就可完成整列车同系列产品的软件升级任务,显著降低了工作量。自带USB协议接口的电子设备使用该技术不需要增加额外成本,只需通过软件的更改,就可实现产品的升级和功能的修复。目前,该技术已应用于走行部故障诊断、平稳失稳在线监测等车载设备的系统升级。未来可探索该技术在智能家居、消费电子等更广泛的物联网应用场所的应用。