劉慧豐,崔建峰,李愛佳,鄧澤平
(1. 北京特種車輛試驗場,北京 100072;2.中北大學 電氣與控制工程學院,太原 030051)
為滿足運動車輛以及惡劣環(huán)境條件下的測試,車載數(shù)據(jù)采集分析系統(tǒng)常采用存儲測試技術。在車輛道路試驗過程中及完成后,數(shù)據(jù)傳輸及導出的快速性與便捷性成為后續(xù)分析工作的重要保障。由于USB總線具有熱插拔、即插即用、接口體積小巧、成本低、性能可靠等優(yōu)良特性,因此通過USB總線及其接口向上位機傳輸所采集到的數(shù)據(jù)成為現(xiàn)有車載測試系統(tǒng)的主要傳輸方式之一[1-5]。
在傳統(tǒng)的車載USB數(shù)據(jù)傳輸系統(tǒng)方案設計中,常采用一些成熟的USB轉(zhuǎn)串口/并口芯片或特定廠家的USB接口芯片來構建系統(tǒng)[2-3];這種方案開發(fā)難度較低、開發(fā)周期短,能夠較好且快速地滿足車載測試系統(tǒng)數(shù)據(jù)傳輸?shù)膽眯枨蟆H欢@種方案存在以下不足之處:1)在應用前需要安裝相應模塊/芯片驅(qū)動。這些芯片驅(qū)動可能與已有系統(tǒng)組件沖突而導致安裝失敗或在應用中產(chǎn)生錯誤,給測試人員帶來不便;2)難以快速地滿足數(shù)據(jù)傳輸?shù)目缙脚_應用需求;3)對于野外作業(yè),必須攜帶上位機以導出數(shù)據(jù),無法將數(shù)據(jù)暫時轉(zhuǎn)存至U盤等便攜存儲設備上。因此,為了滿足現(xiàn)場應用需求,需要新研制的車載測試數(shù)據(jù)傳輸系統(tǒng)能夠?qū)崿F(xiàn)免驅(qū)USB主從機功能。
在USB主從機功能實現(xiàn)上,張穎、朱慶雙、趙永禮等人基于CH375先后實現(xiàn)了燃料電池發(fā)動機車載控制系統(tǒng)、機床數(shù)控系統(tǒng)及激光三維雕刻控制系統(tǒng)的USB主從機通訊功能[6-8];惠玥琳、辛華峰則分別基于ISP1362與SL811HS實現(xiàn)了通用數(shù)據(jù)采集系統(tǒng)的USB主從機功能[9-10]。但這些系統(tǒng)不具備從機免驅(qū)功能,當其作為USB從機設備進行使用時,計算機仍然需要安裝相應芯片驅(qū)動程序。因此,為了實現(xiàn)免驅(qū)從機功能,還需要借助操作系統(tǒng)自帶的一些USB設備類驅(qū)動程序進行實現(xiàn),如基于USB RNDIS規(guī)范的網(wǎng)絡接口設備類、基于USB UVC規(guī)范的視頻設備類或基于USB Mass Storage規(guī)范的大容量存儲設備類等[11-13]。
針對上述設計方案的不足,本文將提出一種車載測試數(shù)據(jù)傳輸系統(tǒng)免驅(qū)USB主從機的設計方案。該方案將基于USB接口芯片CH378進行設計,通過將底層存儲測試系統(tǒng)基于USB Mass Storage規(guī)范虛擬成U盤實現(xiàn)免驅(qū)操作,同時實現(xiàn)同一外部接口的USB主機功能,以便將數(shù)據(jù)存儲至外部U盤等便攜存儲設備上。
系統(tǒng)總體設計如圖1所示。
圖1 系統(tǒng)總體設計框圖
免驅(qū)USB主從機車載測試數(shù)據(jù)傳輸系統(tǒng)主要由主控模塊、存儲模塊、USB主從通訊模塊、測試接口模塊、輔助功能模塊組成。其中主控模塊負責整個車載數(shù)據(jù)傳輸系統(tǒng)的控制邏輯處理,同時還負責USB Mass Storage協(xié)議及FAT32協(xié)議的實現(xiàn)。存儲模塊用于實現(xiàn)Flash存儲功能。USB主從通訊模塊則主要負責進行USB協(xié)議的封裝、解析,完成與USB主機或USB外部存儲設備之間的通訊;另外,該模塊還需要負責實現(xiàn)USB主/從模式的自動切換。測試接口模塊用于實現(xiàn)具體的測試功能;輔助功能模塊主要實現(xiàn)整個系統(tǒng)的供電、時鐘等的配給。由于本文主要說明免驅(qū)USB主從機的實現(xiàn)方法,因此,在后續(xù)內(nèi)容中將不詳細介紹存儲模塊、測試接口模塊及輔助功能模塊的具體實現(xiàn)。
USB主從機實現(xiàn)方案設計難點在于:一是要有合適的USB接口協(xié)議芯片可同時支持USB主機方式和USB設備方式;二是要有相應的外部主/從切換電路,可以動態(tài)判別當前系統(tǒng)USB接口工作方式。下面將針對相關內(nèi)容進行詳細敘述。
通過對比多家主流USB接口協(xié)議芯片生產(chǎn)廠商的相關產(chǎn)品[6-10],最終選用南京沁恒公司生產(chǎn)的USB接口芯片CH378。它是一款USB2.0總線的通用接口芯片,支持USB主機接口和USB設備接口并支持動態(tài)切換。當其工作于主機模式時,由于它內(nèi)置了USB通訊協(xié)議基本固件及FAT文件系統(tǒng)的管理固件,因此,可以快速實現(xiàn)讀寫U盤或者SD卡功能。但在從機模式下,它只有基本USB通訊協(xié)議固件可用,如要實現(xiàn)基于USB Mass Storage協(xié)議的免驅(qū)功能,還需要利用主控模塊進行相應的功能固件編寫。
在本地端,CH378具有8位并口、SPI接口和異步串口,主控芯片可以通過上述任何一種通訊接口控制CH378芯片??紤]到最終的數(shù)據(jù)傳輸速度要求較高,本文選擇8位并口來實現(xiàn)CH378的通訊控制。USB主機/設備與CH378芯片之間則通過USB總線D+和D一來完成信號的傳輸。
主控與USB模塊接口電路設計如圖2所示[14-15]。CH378采用8位并口模式與主控芯片相連。其中包括雙向數(shù)據(jù)總線D[0:7]、并口片選信號線PCS#(#表示信號低電平有效)、并口讀選通信號線RD#、并口寫選通信號線WR#及并口地址信號線A0;主控芯片將CH378看作一個I/O設備,通過上述信號線及專門的I/O指令實現(xiàn)對CH378內(nèi)部寄存器的操作。CH378的地址線A0用于選擇操作對象是命令寄存器還是數(shù)據(jù)寄存器。當CH378因USB2.0通訊事件產(chǎn)生中斷時,通過中斷信號線INT#向主控芯片請求中斷,主控芯片通過該命令獲取中斷狀態(tài),分析中斷原因并處理。在本設計中,INT#將與主從狀態(tài)信號線USB_MS共同形成USB主從機自動切換機制。另外,為了確保CH378能夠有效復位,將CH378的外部復位信號線RSTI#也連接到主控芯片相應的IO引腳上。
圖2 主控與CH378連接示意圖
需要說明的是,圖2中并未繪制出CH378本身的一些配置引腳連接情況,為了實現(xiàn)8位并口通訊方法,CH378的SEL引腳需要接地,TXD引腳可連接至VCC或者懸空。
圖3 USB主從機狀態(tài)電路
CH378芯片雖然支持主從機切換,但并不能根據(jù)外部連接情況自主設置。在此通過專門的USB主從機狀態(tài)電路來獲取外部連接的狀態(tài),然后通過主控模塊操作CH378實現(xiàn)主從機的實時切換[6]。USB主從機狀態(tài)電路如圖3所示。D2和D3為肖特基二極管,它們使兩個二極管間的節(jié)點電壓低于系統(tǒng)內(nèi)部USB供電電壓VCC及外部標準USB設備的USB電源電壓USBVCC;R3與R7、R4與R8分別構成兩個分壓網(wǎng)絡,用于將輸入共模比較電壓降到比較器LM393可以接受的范圍。當外部沒有連接任何設備時,R7上的采樣電壓高于R8上的采樣電壓,因此,比較器LM2903輸出USB_MS低電平。
當外部連接有USB從設備(如USB存儲設備)時,此時比較器LM393輸出USB_MS仍為低電平,同時CH378會產(chǎn)生一個有設備插入的中斷信號INT#通知主控單片機;當USB主機(如上位機)通過延長線插入USB接口時,USB主機的USB接口提供5V電源使USBVCC比二極管間節(jié)點的電壓高,比較器LM393輸出USB_MS為高電平,此時,CH378同樣會產(chǎn)生一個有設備插入的中斷信號通知主控單片機。因此,根據(jù)比較器LM393的輸出USB_MS及CH378的中斷信號INT#可以自主判別本地USB接口的工作方式。
當本地USB接口工作于主機方式時,若有外部USB從設備接入,將會產(chǎn)生較大的瞬態(tài)電流,引起系統(tǒng)內(nèi)部電壓波動。為減弱過大瞬態(tài)電流的影響,并防止外部接線短路等故障,使用USB電源管理芯片U1進行限流及失效處理操作;同時利用C1的并聯(lián)儲能作用進行去耦。R1與D1構成過流指示電路,當有過流或短路現(xiàn)象發(fā)生時,U1將根據(jù)過流大小與時長來判斷是否關斷外部USB設備的電源供給,同時在FLG引腳上輸出低電平以指示過流或外部短路,此時D1將被點亮。
由于CH378工作于主機模式時,內(nèi)置了USB通訊協(xié)議基本固件及FAT文件系統(tǒng)的管理固件,因此,通過操作CH378可以快速實現(xiàn)USB主機功能,即讀寫U盤或者SD卡功能[14-15],具體固件設計方法可以參考文獻[15]或CH378官方開發(fā)板相關例程。在此僅重點敘述基于USB Mass Storage協(xié)議的免驅(qū)USB從機功能固件設計方法。
為了實現(xiàn)免驅(qū)USB從機功能,本文基于USB Mass Storage協(xié)議將車載測試數(shù)據(jù)傳輸系統(tǒng)虛擬成USB存儲設備。當車載測試數(shù)據(jù)傳輸系統(tǒng)通過USB電纜連接到上位機的USB接口上時,上位機的USB主機控制器按照USB協(xié)議對設備進行枚舉。車載測試數(shù)據(jù)傳輸系統(tǒng)按照大容量存儲設備的特征返回設備描述符和端點描述符。當設備枚舉完成以后,上位機通過SCSI的上層協(xié)議與設備進行通訊。通訊過程中,車載測試數(shù)據(jù)傳輸系統(tǒng)將向主機返回預先定義的存儲設備參數(shù)和MBR數(shù)據(jù)。若返回的數(shù)據(jù)符合大容量存儲協(xié)議,且MBR數(shù)據(jù)符合操作系統(tǒng)定義的標準,USB數(shù)據(jù)傳輸系統(tǒng)在上位機上將被識別成一個大容量存儲設備。
圖4 免驅(qū)USB從機功能實現(xiàn)方法
根據(jù)上面的敘述,固件設計需要在遵從USB2.0協(xié)議框架的前提下,實現(xiàn)如下四層子功能(如圖4所示):1)自行處理USB請求,定義本地設備類型;2)基于USB Mass Storage Class Bulk-only子類通訊協(xié)議實現(xiàn)SCSI接口指令集;3)本地設備實現(xiàn)FAT16或FAT32文件系統(tǒng);4)將實際數(shù)據(jù)映射成虛擬文件。這樣上位機就可通過虛擬U盤上的虛擬文件來訪問實際測試數(shù)據(jù)。下面將對上述子功能的固件編程要點進行較為詳細的敘述。
根據(jù)USB2.0相關協(xié)議,可通過在接口描述符中將bInterfaceClass字段設置為08H來實現(xiàn)將設備類別定義為USB存儲類,以便操作系統(tǒng)使用默認USB存儲類驅(qū)動程序?qū)SB設備進行操作。另外,在接口描述符中還需要設置bInterfaceSubClass與bInterfaceProtocol字段以定義USB批量傳輸時所使用的指令集及通訊子協(xié)議。本文將上述兩個字段分別設置為06H與50H以表示使用SCSI指令集及Bulk-only通訊子協(xié)議,這也是大多數(shù)USB大容量存儲設備所采用的一種組合形式。
USB主機通過SCSI指令對USB設備進行讀寫操作,但所讀寫的數(shù)據(jù)為了能夠得到操作系統(tǒng)的正確理解,還需要使這數(shù)據(jù)組織符合特定的文件系統(tǒng)數(shù)據(jù)類型。這樣操作系統(tǒng)在得到這些數(shù)據(jù)后,就可以利用相應的文件系統(tǒng)驅(qū)動程序?qū)?shù)據(jù)進行解析。如果不符合特定的文件系統(tǒng)規(guī)定,那么就如同使用一個未格式化的USB存儲設備,在主機上將無法正確解讀,從而操作系統(tǒng)會要求進行相應的格式化處理。
本文基于FAT32文件系統(tǒng)進行設計,此時需要實現(xiàn)相應的主引導記錄(MBR)、分區(qū)引導記錄(BPB)、文件分配表(FAT)、根目錄;
文件系統(tǒng)結構如圖5所示。這些記錄內(nèi)容均有特定格式要求[16]。
圖5 FAT32文件系統(tǒng)結構示意圖
需要說明的是:由于FAT32以扇區(qū)及簇為基本單元進行存儲與管理,而車載測試數(shù)據(jù)傳輸系統(tǒng)中以Flash存儲塊為基本單元進行存儲;因此,此處固件設計的要點是要將各區(qū)域進行正確的映射,即實現(xiàn)扇區(qū)與簇、簇與邏輯塊間的一一對應關系[16]。
以將底部固態(tài)存儲虛擬為512 MB的U盤為例,其總簇數(shù)粗略計算需要約512×1 000×1 000/(4×512)=250 000個簇;以每簇4個扇區(qū)計,則需要1 000 000個扇區(qū)。在這些扇區(qū)中,需要提供1 000 000/512≈1 954個扇區(qū)給文件分配表,另外考慮到隱藏扇區(qū)、Fsinfo、FAT鏡像區(qū)等的分配,最終可要求固態(tài)存儲數(shù)據(jù)區(qū)對齊于0x0F90(十進制:3 984)扇區(qū)處;此時,由于固態(tài)存儲的數(shù)據(jù)塊大小為2 048B,與虛擬磁盤邏輯簇大小一致,這樣就可根據(jù)對齊扇區(qū)位置,計算固態(tài)存儲中不同數(shù)據(jù)塊的扇區(qū)編號,供傳輸子程序使用。
為了驗證系統(tǒng)設計的有效性,通過提前在車載測試數(shù)據(jù)傳輸系統(tǒng)Flash中寫入固定格式數(shù)據(jù),然后依次與計算機及外部USB存儲設備連接對系統(tǒng)進行檢測,并通過總線數(shù)據(jù)包監(jiān)視和控制開發(fā)工具軟件BusHound進行通訊過程的監(jiān)測。檢測結果顯示,車載測試數(shù)據(jù)傳輸系統(tǒng)可以自動切換USB主從狀態(tài),并能夠正確輸出存儲數(shù)據(jù)至計算機及外部USB存儲設備中。其中當與計算機連接時,計算機無需額外安裝專用驅(qū)動,就可以將車載測試數(shù)據(jù)傳輸系統(tǒng)正確識別為虛擬U盤,且內(nèi)部數(shù)據(jù)文件可以正確復制到計算機中。圖6為虛擬U盤識別過程圖。虛擬U盤的卷號NUCUDISK是在文件系統(tǒng)FAT32實現(xiàn)時,通過將根目錄數(shù)據(jù)進行相應設置實現(xiàn)的。
圖6 虛擬U盤識別過程圖
本文提出了一種車載測試數(shù)據(jù)傳輸系統(tǒng)免驅(qū)USB主從機設計方法。該設計方案可以實現(xiàn)車載測試數(shù)據(jù)傳輸系統(tǒng)與計算機及外部USB存儲設備的雙向通信,并根據(jù)外部連接情況,自動進行主從機切換。而且,當車載測試數(shù)據(jù)傳輸系統(tǒng)做為USB從機設備時,通過嵌套USB2.0協(xié)議、USB Mass Storage協(xié)議、FAT32文件系統(tǒng)協(xié)議,最終實現(xiàn)了免驅(qū)動獲取測試數(shù)據(jù)的功能,給車載測試數(shù)據(jù)傳輸系統(tǒng)的應用與維護帶來了便利。
[1] 李遠哲, 荊 敏, 車登山, 等. 通用串行總線接口在車載數(shù)據(jù)采集系統(tǒng)中的應用[J]. 兵工學報,2006,27(2): 367-370.
[2] 曾春年,張曉偉. 基于SL811HS芯片的車載USB主機研究[J]. 武漢理工大學學報,2008, 30(2): 125-128.
[3] 韓 屏. 基于USB的車載信息系統(tǒng)[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] 朱慶雙. 一種應用于數(shù)控系統(tǒng)的USB主從機系統(tǒng)的設計與實現(xiàn)[D]. 太原: 太原理工大學, 2008.
[8] 趙永禮,楊寅華,王 紅. 基于USB總線的激光三維雕刻控制系統(tǒng)[J]. 計算機工程,2010, 36(22): 239-241.
[9] 辛華峰,于 楓,譚 健,等.嵌入式USB主/從機應用模塊[J].吉林大學學報(工學版),2005,35(2):166-169.
[10] 惠玥琳.基于單片機的USB主從機的設計與實現(xiàn)[D].成都:電子科技大學,2007.
[11] 李曉偉,謝曉燕. 移動數(shù)據(jù)卡中免驅(qū)模塊的實現(xiàn)方法[J]. 西安郵電大學學報,2013, 18(1): 95-98.
[12] 殷開亮. 基于UVC協(xié)議的USB3.0圖像采集系統(tǒng)設計[D]. 蘇州: 蘇州大學, 2014.
[13] 石 武.一種實現(xiàn)USB設備免驅(qū)動的方法,CN102339260A[P].2012.
[14] 段曉敏,徐曉輝,李建其,等. 基于CH378的便攜式高速數(shù)據(jù)采集系統(tǒng)設計與實現(xiàn)[J]. 計算機測量與控制,2015,23(8): 2855-2857.
[15] 鄧星星,王 鋒,焦國太,等.基于CH378嵌入式存儲系統(tǒng)設計[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.