SD卡在記錄汽車CAN總線數(shù)據(jù)中的應(yīng)用
SD卡初始化完成之后如果要使用默認的塊讀寫長度(512 B),就可以進行SD卡的讀寫。當(dāng)然,也可用CMD16命令來設(shè)置SD卡的塊讀寫長度,可以是1B~512 B之間的任意值。但是對SD卡的寫過程則要求塊長度必須為512 B。無論是SD卡的讀還是寫,都要求在讀寫命令發(fā)送后有數(shù)據(jù)起始令牌FEH,數(shù)據(jù)傳輸結(jié)束有2 B的循環(huán)冗余編碼CRC。本設(shè)計采用默認的塊讀寫長度。
3.2 FAT32文件系統(tǒng)
存儲在SD卡中的數(shù)據(jù)為二進制數(shù)據(jù),為了使其能為計算機所識別,SD卡文件系統(tǒng)必須與計算機的文件系統(tǒng)一致。目前Windows系列操作系統(tǒng)中最常用的文件系統(tǒng)有FAT16、FAT32及NTFS等。由于汽車CAN網(wǎng)絡(luò)的數(shù)據(jù)量大,并且記錄儀需要記錄長時間的數(shù)據(jù),所以本設(shè)計選擇FAT32作為SD卡的文件系統(tǒng),F(xiàn)AT32最大支持單個文件4 GB容量,滿足CAN數(shù)據(jù)記錄儀的要求。
FAT32文件系統(tǒng)由系統(tǒng)引導(dǎo)記錄區(qū)、FAT表區(qū)、文件登記表區(qū)和數(shù)據(jù)區(qū)四部分組成。系統(tǒng)引導(dǎo)記錄區(qū)存儲SD卡有關(guān)磁盤的結(jié)構(gòu)信息,包括扇區(qū)字節(jié)數(shù)、FAT表的數(shù)目和總扇區(qū)數(shù)等;FAT表是FAT32文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位引進的一種鏈式結(jié)構(gòu),它準確記錄著已經(jīng)被占用的簇,并為每個已經(jīng)占用的簇指明存儲后續(xù)內(nèi)容的下一個簇的簇號。文件登記表FDT記錄文件的登記項,每個登記項占32 B,記錄了文件的起始簇號、大小以及創(chuàng)建和最后修改的時間等;數(shù)據(jù)區(qū)用于存儲文件數(shù)據(jù)。
SD卡的文件系統(tǒng)主要功能包括創(chuàng)建文件、打開文件、寫文件、讀文件和關(guān)閉文件。在應(yīng)用中,可以根據(jù)實際情況,增刪以上功能,以簡化系統(tǒng)。
考慮數(shù)據(jù)采集對系統(tǒng)實時性的要求, 對FAT表區(qū)的鏈式結(jié)構(gòu)進行簡化,磁盤的空閑空間是連續(xù)的,采用連續(xù)存儲方式,這樣略去了每次去FAT表搜索空閑簇的過程,滿足系統(tǒng)對實時性的要求。簡化后的鏈式結(jié)構(gòu)是直線鏈, 即寫滿一個扇區(qū)自動寫下一個扇區(qū), 寫滿一個簇自動寫下一個簇。
3.2.1 文件的創(chuàng)建
在SD卡上創(chuàng)建文件就是在文件目錄表FDT中申請登記項和向FAT表中的FAT項填寫空閑簇號的過程,流程圖如圖4所示。程序首先在系統(tǒng)引導(dǎo)記錄區(qū)獲取SD卡磁盤的結(jié)構(gòu)信息;接著要檢測文件登記表FDT中是否已經(jīng)存在該文件,如果存在同名的文件,則返回,創(chuàng)建文件失?。蝗缓笊暾埧臻e的FDT表項,申請FDT 表項成功后,程序會檢測磁盤剩余的空間是否滿足新創(chuàng)文件數(shù)據(jù)長度的需要,然后尋找第一個空閑的簇號,并修改對應(yīng)的FDT表項。由于文件都是連續(xù)的,在FAT表中的FAT鏈表是直線鏈即前一簇指向后一簇,根據(jù)文件的大小,向FAT表區(qū)填寫FAT鏈表,直到最后一個FAT項寫入0x0FFFFFFFH,表示文件結(jié)束。
3.2.2 文件的讀/寫
SD卡上文件都是以簇為單位存取的,向SD卡上的文件寫數(shù)據(jù)時,首先要根據(jù)文件名查找到該文件的文件登記項,根據(jù)文件登記項中的起始簇號即可找到文件在數(shù)據(jù)區(qū)中第1簇,向數(shù)據(jù)區(qū)對應(yīng)的簇中寫數(shù)據(jù),并且可以在FAT表中找到第2個簇號。根據(jù)第2個簇號又能向第2簇寫數(shù)據(jù)并找到FAT 中的第3個簇號,以此類推,直到FAT表中最后一項0x0FFFFFFFH,完成寫文件。讀取文件的過程與寫文件類似。
SD卡在記錄汽車CAN總線數(shù)據(jù)中的應(yīng)用程序流程圖如圖5所示。其中LPC2368以中斷方式將接收到的CAN數(shù)據(jù)以及接收時的時間存儲到數(shù)據(jù)隊列里,并立即跳出中斷,進行主程序的處理或等待下一幀數(shù)據(jù)的接收中斷,從而避免報文的丟失。
本設(shè)計采用SD卡作為外部存儲介質(zhì),將實時采集到的CAN數(shù)據(jù)信息以標(biāo)準文件的格式保存于SD卡中,具有性能可靠、使用方便、重量輕及存儲容量大等特點,具有廣闊的應(yīng)用前景。
評論