摘 要: 提出了用SD卡來實現記錄汽車CAN總線數據的設計,介紹了基于LPC2368的SD卡FAT文件系統的實現方法,并給出了該設計的硬件接口與軟件實現,闡述了SD卡應用于大容量數據記錄的優點。
關鍵詞: CAN總線;SD卡;FAT文件系統;數據記錄
CAN總線是德國BOSCH公司在20世紀80年代初,為了解決現代汽車中眾多的控制與測試儀器之間的數據交換而開發的一種串行數據通信協議。它的短幀數據結構、非破壞性總線性仲裁技術以及靈活的通信方式適應了汽車的實時性和可靠性要求,備受汽車生產廠商的青睞。目前,汽車上的ECU(電控單元)之間使用CAN總線進行通信,例如電控燃油噴射系統、電控傳動系統、防抱死制動系統(ABS)和防滑控制系統(ASR)等,記錄汽車CAN總線上的數據對于監控汽車ECU間正確通信和研究汽車CAN網絡故障的原因具有重要的意義。
設計以SD卡作存儲載體,實現實時記錄CAN總線上數據的記錄儀,具有容量大、體積小、重量輕、接口電路簡單等特點。并且記錄的數據文件可以為PC機所識別,通過PC機上的分析軟件對其進行分析和回放,作為歷史數據用于數據對比。
1 系統設計
SD卡應用于CAN總線數據記錄儀的系統結構圖如圖1所示,CAN總線數據儀工作時應掛接到汽車CAN總線上,成為一個CAN節點,以便采集CAN數據信息。主控芯片的主要作用是進行數據采集并將采集到的CAN數據以文件格式存儲在SD卡上。此外,SD卡在數據組織結構上與PC機格式兼容,這里選用FAT32文件系統,使記錄數據可以直接供Windows操作系統下的應用程序使用。
2 硬件接口設計
硬件平臺的控制核心采用NXP公司的ARM7芯片LPC2368, 該芯片是基于ARM7TDMI-S內核的32位微控制器,可在高達72 MHz的頻率下操作,功能強大且成本低,具有高達512 KB的片內Flash、32 KB的SRAM,內部具有豐富的系統外圍設備控制器,包括SD控制器和CAN控制器。
SD卡支持2種工作模式:SD模式和SPI模式。SD模式允許4線高速數據傳輸,SPI模式允許簡單通用的SPI通道接口, 但讀寫速度大大降低。由于CAN總線數據傳輸速率較高,因此本設計采用SD模式的4線高速數據傳輸功能。
LPC2368與SD卡接口電路如圖2所示,使用SD通信協議將SD和LPC2368相連實現數據傳輸。CMD傳輸SD控制器的命令及相關參數和SD卡對命令的響應信號,DAT0、DAT1、DAT2、DAT3傳輸讀寫數據,CLK為時鐘信號,并由主控芯片來控制SD卡的電源。
3 軟件設計
3.1 SD卡底層讀寫
SD卡的讀寫操作都是基于命令的,主控芯片通過向SD卡發送相應的命令并讀取相應的響應來實現對SD卡的控制,在對SD卡讀寫之前,首先要對SD控制器進行初始化,完成各項參數的配置,包括控制器與CPU數據傳輸的DMA方式、傳輸速率和讀寫數據塊長度等,之后需要對SD卡進行初始化,這是確保SD卡正常數據讀寫的前提。SD卡的初始化流程如圖3所示。
SD卡初始化完成之后如果要使用默認的塊讀寫長度(512 B),就可以進行SD卡的讀寫。當然,也可用CMD16命令來設置SD卡的塊讀寫長度,可以是1B~512 B之間的任意值。但是對SD卡的寫過程則要求塊長度必須為512 B。無論是SD卡的讀還是寫,都要求在讀寫命令發送后有數據起始令牌FEH,數據傳輸結束有2 B的循環冗余編碼CRC。本設計采用默認的塊讀寫長度。
3.2 FAT32文件系統
存儲在SD卡中的數據為二進制數據,為了使其能為計算機所識別,SD卡文件系統必須與計算機的文件系統一致。目前Windows系列操作系統中最常用的文件系統有FAT16、FAT32及NTFS等。由于汽車CAN網絡的數據量大,并且記錄儀需要記錄長時間的數據,所以本設計選擇FAT32作為SD卡的文件系統,FAT32最大支持單個文件4 GB容量,滿足CAN數據記錄儀的要求。
FAT32文件系統由系統引導記錄區、FAT表區、文件登記表區和數據區四部分組成。系統引導記錄區存儲SD卡有關磁盤的結構信息,包括扇區字節數、FAT表的數目和總扇區數等;FAT表是FAT32文件系統中用于磁盤數據(文件)索引和定位引進的一種鏈式結構,它準確記錄著已經被占用的簇,并為每個已經占用的簇指明存儲后續內容的下一個簇的簇號。文件登記表FDT記錄文件的登記項,每個登記項占32 B,記錄了文件的起始簇號、大小以及創建和最后修改的時間等;數據區用于存儲文件數據。
SD卡的文件系統主要功能包括創建文件、打開文件、寫文件、讀文件和關閉文件。在應用中,可以根據實際情況,增刪以上功能,以簡化系統。
考慮數據采集對系統實時性的要求, 對FAT表區的鏈式結構進行簡化,磁盤的空閑空間是連續的,采用連續存儲方式,這樣略去了每次去FAT表搜索空閑簇的過程,滿足系統對實時性的要求。簡化后的鏈式結構是直線鏈, 即寫滿一個扇區自動寫下一個扇區, 寫滿一個簇自動寫下一個簇。
3.2.1 文件的創建
在SD卡上創建文件就是在文件目錄表FDT中申請登記項和向FAT表中的FAT項填寫空閑簇號的過程,流程圖如圖4所示。程序首先在系統引導記錄區獲取SD卡磁盤的結構信息;接著要檢測文件登記表FDT中是否已經存在該文件,如果存在同名的文件,則返回,創建文件失敗;然后申請空閑的FDT表項,申請FDT 表項成功后,程序會檢測磁盤剩余的空間是否滿足新創文件數據長度的需要,然后尋找第一個空閑的簇號,并修改對應的FDT表項。由于文件都是連續的,在FAT表中的FAT鏈表是直線鏈即前一簇指向后一簇,根據文件的大小,向FAT表區填寫FAT鏈表,直到最后一個FAT項寫入0x0FFFFFFFH,表示文件結束。
3.2.2 文件的讀/寫
SD卡上文件都是以簇為單位存取的,向SD卡上的文件寫數據時,首先要根據文件名查找到該文件的文件登記項,根據文件登記項中的起始簇號即可找到文件在數據區中第1簇,向數據區對應的簇中寫數據,并且可以在FAT表中找到第2個簇號。根據第2個簇號又能向第2簇寫數據并找到FAT 中的第3個簇號,以此類推,直到FAT表中最后一項0x0FFFFFFFH,完成寫文件。讀取文件的過程與寫文件類似。
SD卡在記錄汽車CAN總線數據中的應用程序流程圖如圖5所示。其中LPC2368以中斷方式將接收到的CAN數據以及接收時的時間存儲到數據隊列里,并立即跳出中斷,進行主程序的處理或等待下一幀數據的接收中斷,從而避免報文的丟失。
本設計采用SD卡作為外部存儲介質,將實時采集到的CAN數據信息以標準文件的格式保存于SD卡中,具有性能可靠、使用方便、重量輕及存儲容量大等特點,具有廣闊的應用前景。
參考文獻
[1] Philips , LPC2368 User Manual. 2007.
[2] 周立功. ARM微控制器基礎與實踐[M].北京:北京航空航天大學出版社,2005.
[3] 張明亮,張宗杰.淺析FAT32 文件系統[J].計算機與數字工程,2005,33(1):56-59.
[4] SanDisk Corporate. SD memory card specification part 1:physical layer specification version 1. 0[M].2000.