刘慧丰,崔建峰,李爱佳,邓泽平
(1. 北京特种车辆试验场,北京 100072;2.中北大学 电气与控制工程学院,太原 030051)
为满足运动车辆以及恶劣环境条件下的测试,车载数据采集分析系统常采用存储测试技术。在车辆道路试验过程中及完成后,数据传输及导出的快速性与便捷性成为后续分析工作的重要保障。由于USB总线具有热插拔、即插即用、接口体积小巧、成本低、性能可靠等优良特性,因此通过USB总线及其接口向上位机传输所采集到的数据成为现有车载测试系统的主要传输方式之一[1-5]。
在传统的车载USB数据传输系统方案设计中,常采用一些成熟的USB转串口/并口芯片或特定厂家的USB接口芯片来构建系统[2-3];这种方案开发难度较低、开发周期短,能够较好且快速地满足车载测试系统数据传输的应用需求。然而这种方案存在以下不足之处:1)在应用前需要安装相应模块/芯片驱动。这些芯片驱动可能与已有系统组件冲突而导致安装失败或在应用中产生错误,给测试人员带来不便;2)难以快速地满足数据传输的跨平台应用需求;3)对于野外作业,必须携带上位机以导出数据,无法将数据暂时转存至U盘等便携存储设备上。因此,为了满足现场应用需求,需要新研制的车载测试数据传输系统能够实现免驱USB主从机功能。
在USB主从机功能实现上,张颖、朱庆双、赵永礼等人基于CH375先后实现了燃料电池发动机车载控制系统、机床数控系统及激光三维雕刻控制系统的USB主从机通讯功能[6-8];惠玥琳、辛华峰则分别基于ISP1362与SL811HS实现了通用数据采集系统的USB主从机功能[9-10]。但这些系统不具备从机免驱功能,当其作为USB从机设备进行使用时,计算机仍然需要安装相应芯片驱动程序。因此,为了实现免驱从机功能,还需要借助操作系统自带的一些USB设备类驱动程序进行实现,如基于USB RNDIS规范的网络接口设备类、基于USB UVC规范的视频设备类或基于USB Mass Storage规范的大容量存储设备类等[11-13]。
针对上述设计方案的不足,本文将提出一种车载测试数据传输系统免驱USB主从机的设计方案。该方案将基于USB接口芯片CH378进行设计,通过将底层存储测试系统基于USB Mass Storage规范虚拟成U盘实现免驱操作,同时实现同一外部接口的USB主机功能,以便将数据存储至外部U盘等便携存储设备上。
系统总体设计如图1所示。
图1 系统总体设计框图
免驱USB主从机车载测试数据传输系统主要由主控模块、存储模块、USB主从通讯模块、测试接口模块、辅助功能模块组成。其中主控模块负责整个车载数据传输系统的控制逻辑处理,同时还负责USB Mass Storage协议及FAT32协议的实现。存储模块用于实现Flash存储功能。USB主从通讯模块则主要负责进行USB协议的封装、解析,完成与USB主机或USB外部存储设备之间的通讯;另外,该模块还需要负责实现USB主/从模式的自动切换。测试接口模块用于实现具体的测试功能;辅助功能模块主要实现整个系统的供电、时钟等的配给。由于本文主要说明免驱USB主从机的实现方法,因此,在后续内容中将不详细介绍存储模块、测试接口模块及辅助功能模块的具体实现。
USB主从机实现方案设计难点在于:一是要有合适的USB接口协议芯片可同时支持USB主机方式和USB设备方式;二是要有相应的外部主/从切换电路,可以动态判别当前系统USB接口工作方式。下面将针对相关内容进行详细叙述。
通过对比多家主流USB接口协议芯片生产厂商的相关产品[6-10],最终选用南京沁恒公司生产的USB接口芯片CH378。它是一款USB2.0总线的通用接口芯片,支持USB主机接口和USB设备接口并支持动态切换。当其工作于主机模式时,由于它内置了USB通讯协议基本固件及FAT文件系统的管理固件,因此,可以快速实现读写U盘或者SD卡功能。但在从机模式下,它只有基本USB通讯协议固件可用,如要实现基于USB Mass Storage协议的免驱功能,还需要利用主控模块进行相应的功能固件编写。
在本地端,CH378具有8位并口、SPI接口和异步串口,主控芯片可以通过上述任何一种通讯接口控制CH378芯片。考虑到最终的数据传输速度要求较高,本文选择8位并口来实现CH378的通讯控制。USB主机/设备与CH378芯片之间则通过USB总线D+和D一来完成信号的传输。
主控与USB模块接口电路设计如图2所示[14-15]。CH378采用8位并口模式与主控芯片相连。其中包括双向数据总线D[0:7]、并口片选信号线PCS#(#表示信号低电平有效)、并口读选通信号线RD#、并口写选通信号线WR#及并口地址信号线A0;主控芯片将CH378看作一个I/O设备,通过上述信号线及专门的I/O指令实现对CH378内部寄存器的操作。CH378的地址线A0用于选择操作对象是命令寄存器还是数据寄存器。当CH378因USB2.0通讯事件产生中断时,通过中断信号线INT#向主控芯片请求中断,主控芯片通过该命令获取中断状态,分析中断原因并处理。在本设计中,INT#将与主从状态信号线USB_MS共同形成USB主从机自动切换机制。另外,为了确保CH378能够有效复位,将CH378的外部复位信号线RSTI#也连接到主控芯片相应的IO引脚上。
图2 主控与CH378连接示意图
需要说明的是,图2中并未绘制出CH378本身的一些配置引脚连接情况,为了实现8位并口通讯方法,CH378的SEL引脚需要接地,TXD引脚可连接至VCC或者悬空。
图3 USB主从机状态电路
CH378芯片虽然支持主从机切换,但并不能根据外部连接情况自主设置。在此通过专门的USB主从机状态电路来获取外部连接的状态,然后通过主控模块操作CH378实现主从机的实时切换[6]。USB主从机状态电路如图3所示。D2和D3为肖特基二极管,它们使两个二极管间的节点电压低于系统内部USB供电电压VCC及外部标准USB设备的USB电源电压USBVCC;R3与R7、R4与R8分别构成两个分压网络,用于将输入共模比较电压降到比较器LM393可以接受的范围。当外部没有连接任何设备时,R7上的采样电压高于R8上的采样电压,因此,比较器LM2903输出USB_MS低电平。
当外部连接有USB从设备(如USB存储设备)时,此时比较器LM393输出USB_MS仍为低电平,同时CH378会产生一个有设备插入的中断信号INT#通知主控单片机;当USB主机(如上位机)通过延长线插入USB接口时,USB主机的USB接口提供5V电源使USBVCC比二极管间节点的电压高,比较器LM393输出USB_MS为高电平,此时,CH378同样会产生一个有设备插入的中断信号通知主控单片机。因此,根据比较器LM393的输出USB_MS及CH378的中断信号INT#可以自主判别本地USB接口的工作方式。
当本地USB接口工作于主机方式时,若有外部USB从设备接入,将会产生较大的瞬态电流,引起系统内部电压波动。为减弱过大瞬态电流的影响,并防止外部接线短路等故障,使用USB电源管理芯片U1进行限流及失效处理操作;同时利用C1的并联储能作用进行去耦。R1与D1构成过流指示电路,当有过流或短路现象发生时,U1将根据过流大小与时长来判断是否关断外部USB设备的电源供给,同时在FLG引脚上输出低电平以指示过流或外部短路,此时D1将被点亮。
由于CH378工作于主机模式时,内置了USB通讯协议基本固件及FAT文件系统的管理固件,因此,通过操作CH378可以快速实现USB主机功能,即读写U盘或者SD卡功能[14-15],具体固件设计方法可以参考文献[15]或CH378官方开发板相关例程。在此仅重点叙述基于USB Mass Storage协议的免驱USB从机功能固件设计方法。
为了实现免驱USB从机功能,本文基于USB Mass Storage协议将车载测试数据传输系统虚拟成USB存储设备。当车载测试数据传输系统通过USB电缆连接到上位机的USB接口上时,上位机的USB主机控制器按照USB协议对设备进行枚举。车载测试数据传输系统按照大容量存储设备的特征返回设备描述符和端点描述符。当设备枚举完成以后,上位机通过SCSI的上层协议与设备进行通讯。通讯过程中,车载测试数据传输系统将向主机返回预先定义的存储设备参数和MBR数据。若返回的数据符合大容量存储协议,且MBR数据符合操作系统定义的标准,USB数据传输系统在上位机上将被识别成一个大容量存储设备。
图4 免驱USB从机功能实现方法
根据上面的叙述,固件设计需要在遵从USB2.0协议框架的前提下,实现如下四层子功能(如图4所示):1)自行处理USB请求,定义本地设备类型;2)基于USB Mass Storage Class Bulk-only子类通讯协议实现SCSI接口指令集;3)本地设备实现FAT16或FAT32文件系统;4)将实际数据映射成虚拟文件。这样上位机就可通过虚拟U盘上的虚拟文件来访问实际测试数据。下面将对上述子功能的固件编程要点进行较为详细的叙述。
根据USB2.0相关协议,可通过在接口描述符中将bInterfaceClass字段设置为08H来实现将设备类别定义为USB存储类,以便操作系统使用默认USB存储类驱动程序对USB设备进行操作。另外,在接口描述符中还需要设置bInterfaceSubClass与bInterfaceProtocol字段以定义USB批量传输时所使用的指令集及通讯子协议。本文将上述两个字段分别设置为06H与50H以表示使用SCSI指令集及Bulk-only通讯子协议,这也是大多数USB大容量存储设备所采用的一种组合形式。
USB主机通过SCSI指令对USB设备进行读写操作,但所读写的数据为了能够得到操作系统的正确理解,还需要使这数据组织符合特定的文件系统数据类型。这样操作系统在得到这些数据后,就可以利用相应的文件系统驱动程序对数据进行解析。如果不符合特定的文件系统规定,那么就如同使用一个未格式化的USB存储设备,在主机上将无法正确解读,从而操作系统会要求进行相应的格式化处理。
本文基于FAT32文件系统进行设计,此时需要实现相应的主引导记录(MBR)、分区引导记录(BPB)、文件分配表(FAT)、根目录;
文件系统结构如图5所示。这些记录内容均有特定格式要求[16]。
图5 FAT32文件系统结构示意图
需要说明的是:由于FAT32以扇区及簇为基本单元进行存储与管理,而车载测试数据传输系统中以Flash存储块为基本单元进行存储;因此,此处固件设计的要点是要将各区域进行正确的映射,即实现扇区与簇、簇与逻辑块间的一一对应关系[16]。
以将底部固态存储虚拟为512 MB的U盘为例,其总簇数粗略计算需要约512×1 000×1 000/(4×512)=250 000个簇;以每簇4个扇区计,则需要1 000 000个扇区。在这些扇区中,需要提供1 000 000/512≈1 954个扇区给文件分配表,另外考虑到隐藏扇区、Fsinfo、FAT镜像区等的分配,最终可要求固态存储数据区对齐于0x0F90(十进制:3 984)扇区处;此时,由于固态存储的数据块大小为2 048B,与虚拟磁盘逻辑簇大小一致,这样就可根据对齐扇区位置,计算固态存储中不同数据块的扇区编号,供传输子程序使用。
为了验证系统设计的有效性,通过提前在车载测试数据传输系统Flash中写入固定格式数据,然后依次与计算机及外部USB存储设备连接对系统进行检测,并通过总线数据包监视和控制开发工具软件BusHound进行通讯过程的监测。检测结果显示,车载测试数据传输系统可以自动切换USB主从状态,并能够正确输出存储数据至计算机及外部USB存储设备中。其中当与计算机连接时,计算机无需额外安装专用驱动,就可以将车载测试数据传输系统正确识别为虚拟U盘,且内部数据文件可以正确复制到计算机中。图6为虚拟U盘识别过程图。虚拟U盘的卷号NUCUDISK是在文件系统FAT32实现时,通过将根目录数据进行相应设置实现的。
图6 虚拟U盘识别过程图
本文提出了一种车载测试数据传输系统免驱USB主从机设计方法。该设计方案可以实现车载测试数据传输系统与计算机及外部USB存储设备的双向通信,并根据外部连接情况,自动进行主从机切换。而且,当车载测试数据传输系统做为USB从机设备时,通过嵌套USB2.0协议、USB Mass Storage协议、FAT32文件系统协议,最终实现了免驱动获取测试数据的功能,给车载测试数据传输系统的应用与维护带来了便利。
[1] 李远哲, 荆 敏, 车登山, 等. 通用串行总线接口在车载数据采集系统中的应用[J]. 兵工学报,2006,27(2): 367-370.
[2] 曾春年,张晓伟. 基于SL811HS芯片的车载USB主机研究[J]. 武汉理工大学学报,2008, 30(2): 125-128.
[3] 韩 屏. 基于USB的车载信息系统[D]. 武汉:武汉理工大学, 2005.
[4] 吴蔚珍, 周志飞, 杨 颖, 等. 基于脚本编程的可视化车载USB设备性能测试技术[J]. 机车电传动,2016(2): 80-84.
[5] Kong F, Zhang L, Zeng J, et al. Automatic measurement and con-
trol system for vehicle ECU Based on CAN bus[A].IEEE International Conference on Automation and Logistics[C].Jinan, 2017:964-968.
[6] 张 颖,全书海. 基于DSP的USB主从机双向通信接口设计[J]. 计算机工程与应用. 2006, 42(29): 94-96.
[7] 朱庆双. 一种应用于数控系统的USB主从机系统的设计与实现[D]. 太原: 太原理工大学, 2008.
[8] 赵永礼,杨寅华,王 红. 基于USB总线的激光三维雕刻控制系统[J]. 计算机工程,2010, 36(22): 239-241.
[9] 辛华峰,于 枫,谭 健,等.嵌入式USB主/从机应用模块[J].吉林大学学报(工学版),2005,35(2):166-169.
[10] 惠玥琳.基于单片机的USB主从机的设计与实现[D].成都:电子科技大学,2007.
[11] 李晓伟,谢晓燕. 移动数据卡中免驱模块的实现方法[J]. 西安邮电大学学报,2013, 18(1): 95-98.
[12] 殷开亮. 基于UVC协议的USB3.0图像采集系统设计[D]. 苏州: 苏州大学, 2014.
[13] 石 武.一种实现USB设备免驱动的方法,CN102339260A[P].2012.
[14] 段晓敏,徐晓辉,李建其,等. 基于CH378的便携式高速数据采集系统设计与实现[J]. 计算机测量与控制,2015,23(8): 2855-2857.
[15] 邓星星,王 锋,焦国太,等.基于CH378嵌入式存储系统设计[J].计算机测量与控制,2015,23(2): 597-599.
[16] Microsoft Corporation. Microsoft extensible firmware initiative FAT32 File System Specification[EB/OL]. Microsoft,2000[2017]. http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9.../fatgen103.doc.