孫彥超,徐宏宇
(沈陽(yáng)航空航天大學(xué)電子信息工程學(xué)院,沈陽(yáng) 110136)
嵌入式設(shè)備節(jié)點(diǎn)越來(lái)越多地被用在控制和數(shù)據(jù)測(cè)量方面。嵌入式設(shè)備節(jié)點(diǎn)的運(yùn)行狀態(tài)、運(yùn)算的數(shù)據(jù)以及采集的數(shù)據(jù)等,通常需要被記錄下來(lái)。而這些數(shù)據(jù)往往具有實(shí)時(shí)性,設(shè)備運(yùn)行的時(shí)間長(zhǎng),產(chǎn)生的數(shù)據(jù)量龐大。利用傳統(tǒng)的數(shù)據(jù)記錄方法,不僅需要耗費(fèi)大量的人力和時(shí)間,也極大地影響了生產(chǎn)效率。
CAN總線是汽車車身控制的標(biāo)準(zhǔn)總線,也被廣泛用于工業(yè)控制中。借助CAN總線可以實(shí)現(xiàn)不同設(shè)備節(jié)點(diǎn)之間的實(shí)時(shí)通信,也可以通過CAN總線來(lái)對(duì)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行存儲(chǔ)和分析[1]。在對(duì)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行存儲(chǔ)分析方面,如果在沒有性能較高的數(shù)據(jù)接收處理上位機(jī)設(shè)備,如PC機(jī)、平板電腦等時(shí),可以有兩種方案:(1)將數(shù)據(jù)通過運(yùn)營(yíng)商手機(jī)網(wǎng)絡(luò)或者WIFI模塊或以太網(wǎng)傳遞給云端主機(jī),進(jìn)行存儲(chǔ)分析處理;(2)通過滿足性能要求的下位機(jī)節(jié)點(diǎn),如高性能的FPGA、MCU,通過一定的策略來(lái)實(shí)現(xiàn)CAN總線數(shù)據(jù)的實(shí)時(shí)接收和存儲(chǔ),以便于以后上位機(jī)處理。其中,方案1成本較高,并且可能滿足不了高速的數(shù)據(jù)接收和發(fā)送需要;方案2中利用高性能的FPGA方案絕對(duì)是可以實(shí)現(xiàn)的,但是相對(duì)于MCU開發(fā)來(lái)說利用FPGA周期相對(duì)較長(zhǎng),并且外圍硬件電路設(shè)計(jì)與PCB布線較復(fù)雜。在存儲(chǔ)介質(zhì)的選擇方面,綜合成本、讀寫速度兩個(gè)方面SD卡是絕佳的選擇[2],并且SD卡可插拔,易于上位機(jī)進(jìn)行數(shù)據(jù)提取[3],且容易更換。
目前國(guó)外已經(jīng)有著名的CAN總線工具開發(fā)公司——瑞典的Kvaser公司,推出了名為Kvaser Memorator Professional的CAN總線分析儀產(chǎn)品,支持將CAN總線上的數(shù)據(jù)存儲(chǔ)到SD卡中,但價(jià)格較高。國(guó)內(nèi)目前沒有成熟穩(wěn)定的可以將CAN總線上的數(shù)據(jù)記錄到SD卡上的產(chǎn)品。國(guó)內(nèi)對(duì)于CAN總線上的數(shù)據(jù)存儲(chǔ)到SD卡的研究,大多使用的是通過SPI總線來(lái)讀寫SD卡,對(duì)于需要快速存儲(chǔ)數(shù)據(jù)的場(chǎng)合,采用SPI總線來(lái)讀寫SD卡的方式是不可行的。
利用含有SD卡接口外設(shè)的微控制器的SD卡接口來(lái)讀寫SD卡,比通過SPI總線來(lái)讀寫SD卡的讀寫速度要快很多。本文提出采用含有SD卡接口的英飛凌的 XMC4500單片機(jī)(基于ARM-Cortex M4架構(gòu))來(lái)做為讀寫SD卡的控制器,設(shè)計(jì)了相應(yīng)的硬件電路,詳細(xì)描述了設(shè)計(jì)的軟件算法、數(shù)次試驗(yàn)的研究發(fā)現(xiàn)和方案的實(shí)驗(yàn)結(jié)果。
英飛凌的XMC4500單片機(jī)有高效的4線SD卡接口和CAN總線接口的,主頻120 MHz,數(shù)據(jù)處理能力強(qiáng),并且支持當(dāng)今常見的大容量的Class 6和Class 10 SDHC卡。由于小容量的SD卡以及Class 6以下的SD卡均已經(jīng)停產(chǎn),所以以往的只支持這種類型的SD卡的方案已經(jīng)不實(shí)用。XMC4500的SDMMC接口時(shí)鐘最高48 MHz,有兩個(gè)512字節(jié)的緩沖區(qū),最高對(duì)SD卡的寫入速率可以達(dá)到24MB/s[5]。所以利用XMC4500可以構(gòu)建一個(gè)穩(wěn)定、高速、高實(shí)時(shí)性的CAN總線節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)系統(tǒng)。
系統(tǒng)總體構(gòu)成如圖1所示。由XMC4500接收CAN總線網(wǎng)絡(luò)上的相應(yīng)節(jié)點(diǎn)的數(shù)據(jù),通過SDMMC接口將數(shù)據(jù)寫入到SDHC卡中,然后通過特定的處理把得到的文本文件通過EXCEL或者M(jìn)ATLAB等數(shù)據(jù)分析軟件對(duì)數(shù)據(jù)進(jìn)行分析。
圖1 系統(tǒng)的總體構(gòu)成
TI的LM5007是TI公司推出的低成本的、高效的Buck電壓降壓開關(guān)穩(wěn)壓器,可以接受9-75 V的電壓輸入,輸出電壓范圍為2.5-73 V。如圖2所示,本文采用TI的LM5007電源轉(zhuǎn)換芯片,可以使得系統(tǒng)電源電壓輸入范圍在12-40 V之間,并且轉(zhuǎn)換得到的5 V電源具有低紋波的優(yōu)點(diǎn)。如圖3所示,系統(tǒng)通過英飛凌的IFX1117MEV33來(lái)將5 V轉(zhuǎn)換為3.3 V,給XMC4500供電。
CAN總線收發(fā)電路部分,選取性能可靠的英飛凌TLE6250G作為XMC4500的CAN總線外接收發(fā)器。TLE6250G是英飛凌的高速CAN收發(fā)器,可以應(yīng)用于苛刻的汽車電子領(lǐng)域,具有卓越的EMC性能,具有很寬的溫度范圍(-40℃至150℃),并且有過溫保護(hù)。具體電路結(jié)構(gòu)如圖4所示。
圖2 LM5007穩(wěn)壓電路
圖3 IFX1117穩(wěn)壓電路
SDHC卡的訪問需要時(shí)鐘線、指令控制線和數(shù)據(jù)線[6]。時(shí)鐘線和指令控制線分別為MMC_CLK和MMC_CMD。XMC4500通過其SDMMC接口連接SD卡,并且可以提供四條數(shù)據(jù)線為SD卡傳送數(shù)據(jù),其中四條數(shù)據(jù)線為MMC_DAT0~MMC_DAT3。為保證指令和數(shù)據(jù)傳輸?shù)姆€(wěn)定性,數(shù)據(jù)線和指令線均上拉[7],單片機(jī)相應(yīng)的引腳采用Open-drain模式。具體電路如圖5所示。
圖4 XMC4500外接CAN總線收發(fā)器電路
程序固件代碼通過DAVE3.1.10和VIM編寫,通過tasking燒寫入XMC4500。程序主要包括相應(yīng)的模塊接口初始化、內(nèi)存分配操作、中斷的配置和數(shù)據(jù)存儲(chǔ)幾個(gè)部分,具體流程見圖6。
圖5 SD卡接口電路
圖6 軟件執(zhí)行流程
SDMMC接口的初始化主要包括SDMMC接口時(shí)鐘的初始化和SDMMC接口引腳的初始化。
CAN總線初始化主要包括CAN總線接收和發(fā)送節(jié)點(diǎn)的配置,CAN總線接口的分配,CAN總線波特率的設(shè)置。CAN總線的接收中斷要賦予較高的優(yōu)先級(jí),使其可以接收到所有CAN總線網(wǎng)絡(luò)上的節(jié)點(diǎn)發(fā)出來(lái)的數(shù)據(jù)。
SD卡初始化主要是XMC4500檢測(cè)SD卡是否插入SD卡接口及檢測(cè)插入的SD卡是否支持。如果初始化SD卡失敗,需要嘗試再對(duì)其進(jìn)行初始化。因?yàn)椴⒉荒芡耆_保SD卡可以一次初始化成功,也并不能確保使用的SD卡是可用的。
FATFS是一個(gè)小型的FAT文件系統(tǒng),它不依賴于具體的硬件平臺(tái),只提供SD卡操作的抽象層的接口,是一個(gè)較為通用的文件系統(tǒng)[8]。
軟件采用FATFS文件系統(tǒng)和XMC4500的SDMMC接口的I/O操作來(lái)完成數(shù)據(jù)寫入到SD卡中,形成數(shù)據(jù)記錄文件。
使用FATFS文件系統(tǒng),需要首先為文件名的路徑分配內(nèi)存,以存儲(chǔ)文件的路徑。其次需要為打開文件分配內(nèi)存。否則,寫入文件的時(shí)候會(huì)導(dǎo)致寫入數(shù)據(jù)失敗。
使用f_mount()函數(shù)來(lái)掛載文件系統(tǒng)。使用f_open()函數(shù)來(lái)打開文件,如果文件不存在則可以創(chuàng)建文件。
FATFS文件系統(tǒng)可以創(chuàng)建擴(kuò)展名為.txt格式的文件。所有FATFS文件系統(tǒng)寫入到SD卡的文件中的數(shù)據(jù)是字符,而CAN總線接收到的數(shù)據(jù)是數(shù)值數(shù)組。所以需要把CAN總線接收到的數(shù)據(jù),在程序中通過類型轉(zhuǎn)換變成字符數(shù)組。比如CAN總線某一時(shí)刻接收到的數(shù)據(jù)(不考慮 ID號(hào)),為{0x01,0x20,0x33,0x45,0x67,0xaa,0xbc,0xfe},為了盡量減小文件數(shù)據(jù)寫入壓力,將他們轉(zhuǎn)換為{‘0’,‘1’,‘2’,‘0’,‘3’,‘3’,‘4’,‘5’,‘6’,‘7’,‘a(chǎn)’,‘a(chǎn)’,‘b’,‘c’,‘f’,‘e’}。
擴(kuò)展名為".csv"格式的文件,以純文本的形式存儲(chǔ)表格數(shù)據(jù)。擴(kuò)展名為".txt"的文件通過重命名為".csv"格式,可以利用excel表格打開。擴(kuò)展名為".csv"的格式的文件中的數(shù)據(jù)以逗號(hào)進(jìn)行分隔,如果數(shù)據(jù)是換行符,則接下來(lái)的數(shù)據(jù)換行顯示。
通過對(duì)".csv"格式的文件進(jìn)行研究,程序在對(duì)CAN總線節(jié)點(diǎn)接收到的數(shù)值數(shù)組轉(zhuǎn)換成字符數(shù)組的過程中,在轉(zhuǎn)換的數(shù)據(jù)之間加逗號(hào),并且在一幀數(shù)據(jù)之后加換行符。例如假如CAN總線節(jié)點(diǎn)接收到的一幀數(shù)據(jù)為:{0x01,0x20,0x33,0x45,0x67,0xaa,0xbc,0xfe},轉(zhuǎn)換之后為{‘0’,‘1’,‘,’,‘2’,‘0’,‘,’,‘3’,‘3’,‘,’,‘4’,‘5’,‘,’,‘6’,‘7’,‘,’,‘a(chǎn)’,‘a(chǎn)’,‘,’,‘b’,‘c’,‘,’,‘f’,‘e’,‘ ’,‘ ’}。也就是說,如果CAN總線一幀數(shù)據(jù)是8字節(jié),則寫入到SD卡的數(shù)據(jù)記錄文件中的數(shù)據(jù)是25字節(jié),如果需要存儲(chǔ)CAN總線數(shù)據(jù)的ID號(hào),對(duì)于標(biāo)準(zhǔn)幀(ID號(hào)為11bit)和擴(kuò)展幀(ID號(hào)為29bit),一幀數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)記錄文件中的大小分別為28字節(jié)和30字節(jié)。
FAT 文件系統(tǒng)以“簇”作為數(shù)據(jù)單元[9-10],SD 卡的一個(gè)扇區(qū)大小為512字節(jié)[11-12]。FATFS文件系統(tǒng)建議每次寫入數(shù)據(jù)的量最好等于所使用的SD卡的簇的大?。?3]。
經(jīng)試驗(yàn),SD的簇大小為4K的時(shí)候,寫入速度最快。所以將SD卡格式化成簇大小為4K,并且每次向SD卡寫入4K字節(jié)的數(shù)據(jù)。
數(shù)次實(shí)驗(yàn)證明,SD卡在連續(xù)寫入若干字節(jié)(幾十K以上),會(huì)出現(xiàn)一個(gè)大的寫入間隔(SD卡垃圾回收時(shí)間),這一個(gè)間隔也許會(huì)持續(xù)數(shù)十毫秒至一百毫秒左右。如果在這個(gè)寫入間隔期間,CAN總線節(jié)點(diǎn)有數(shù)據(jù)發(fā)出,需要一個(gè)軟件上的數(shù)據(jù)緩沖區(qū)來(lái)存儲(chǔ)數(shù)據(jù)。
通過對(duì)執(zhí)行效率和代碼數(shù)據(jù)結(jié)構(gòu)的分析,采用循環(huán)緩沖隊(duì)列(Circular Buffer)來(lái)存儲(chǔ)處理后的CAN總線的數(shù)據(jù)幀,可以使系統(tǒng)持續(xù)接收CAN總線傳來(lái)的數(shù)據(jù),在緩沖隊(duì)列中的數(shù)據(jù)多于4K時(shí),再進(jìn)行SD卡的寫入操作。文獻(xiàn)[14]采用的程序流程是不足以滿足持續(xù)快速地處理CAN總線上傳來(lái)的數(shù)據(jù)要求的。
為了測(cè)試存儲(chǔ)系統(tǒng)的實(shí)時(shí)性、通用性和穩(wěn)定性,特使用兩個(gè)XMC4500硬件平臺(tái),如圖7所示。其中,硬件平臺(tái)(一)(XMC4500(一))用于產(chǎn)生隨機(jī)數(shù),通過CAN總線發(fā)送數(shù)據(jù)幀(均為擴(kuò)展幀)給硬件平臺(tái)(二)(XMC4500(二)),同時(shí)硬件平臺(tái)(一)通過XMC4500的USB接口與PC機(jī)相連[15],PC機(jī)上的上位機(jī)程序?qū)崟r(shí)將收到的數(shù)據(jù)存儲(chǔ)為文本,用于在實(shí)驗(yàn)停止后和硬件平臺(tái)(二)通過SD卡接口寫入到SD卡中的文本文件的內(nèi)容進(jìn)行比對(duì)。
圖7 測(cè)試所用的硬件平臺(tái)
4.2.1 系統(tǒng)實(shí)時(shí)性存儲(chǔ)壓力測(cè)試
在測(cè)試系統(tǒng)實(shí)時(shí)性時(shí),硬件平臺(tái)(一)每200 μs發(fā)送一幀數(shù)據(jù)給硬件平臺(tái)(二),測(cè)試系統(tǒng)在若干萬(wàn)CAN總線擴(kuò)展幀數(shù)據(jù)存儲(chǔ)至SD卡(每次寫4K數(shù)據(jù)至SD卡)之后,是否存在丟失數(shù)據(jù)的情況。通過比對(duì)硬件平臺(tái)(一)和硬件平臺(tái)(二)所產(chǎn)生的文本文件是否內(nèi)容一致來(lái)進(jìn)行評(píng)判。測(cè)試情況如表1所示,由表1可知,系統(tǒng)具有較高的實(shí)時(shí)性存儲(chǔ)能力。
4.2.2 系統(tǒng)通用性測(cè)試
在測(cè)試系統(tǒng)通用性時(shí),硬件平臺(tái)(一)通過CAN總線分別以不同的波特率向硬件平臺(tái)(二)發(fā)送擴(kuò)展幀,測(cè)試硬件平臺(tái)(二)存在SD卡中的數(shù)據(jù)文件與PC機(jī)上得到的硬件平臺(tái)(一)所發(fā)送的數(shù)據(jù)文件是否一致。測(cè)試情況如表2所示。由表2可知,系統(tǒng)對(duì)不同CAN總線波特率的節(jié)點(diǎn)具有通用性,而不是只適用于CAN總線波特率為1 000 Kb/s的節(jié)點(diǎn)。
表1 系統(tǒng)實(shí)時(shí)性測(cè)試
表2 系統(tǒng)通用性測(cè)試
4.2.3 系統(tǒng)穩(wěn)定性測(cè)試
在測(cè)試系統(tǒng)穩(wěn)定性時(shí),測(cè)試系統(tǒng)在若干小時(shí)的持續(xù)寫入的情況下的表現(xiàn)。測(cè)試時(shí)使用的CAN總線的波特率為1 000 Kb/s,硬件平臺(tái)(一)每200 μs發(fā)送一幀數(shù)據(jù)。評(píng)判標(biāo)準(zhǔn)同上。測(cè)試結(jié)果如表3所示。由表3可知,系統(tǒng)在總線高負(fù)荷的情況下,仍然具有長(zhǎng)時(shí)間內(nèi)的高穩(wěn)定性。
表3 系統(tǒng)的穩(wěn)定性能測(cè)試
如圖8所示,將一個(gè)用硬件平臺(tái)(二)存儲(chǔ)了6個(gè)小時(shí)的單個(gè)文本文件,分割成了單個(gè)大小為1 600 kB的小文件。因?yàn)榭紤]到經(jīng)過若干小時(shí)的數(shù)據(jù)寫入,若用excel軟件來(lái)分析硬件平臺(tái)(二)在SD卡上存儲(chǔ)的單個(gè)記錄文件,文件的行數(shù)會(huì)遠(yuǎn)遠(yuǎn)超過excel表格的單個(gè)文件的行數(shù)限制;若用MATLAB來(lái)分析數(shù)據(jù),則一次讀入整個(gè)文件,即使在PC機(jī)內(nèi)存夠用的情況下,也會(huì)嚴(yán)重影響MATLAB運(yùn)行效率。故系統(tǒng)采用在PC機(jī)上將文件進(jìn)行按行分割,然后再進(jìn)行數(shù)據(jù)分析。其中按行分割文本文件的軟件來(lái)自于互聯(lián)網(wǎng)。
圖8 文件按行分割結(jié)果
單個(gè)文件用excel表格解析后的結(jié)果如圖9所示,第1列為CAN總線的幀的ID號(hào),第2列到第9列為提取的8字節(jié)的CAN總線幀的數(shù)據(jù)段的內(nèi)容。記錄的數(shù)據(jù)均為16進(jìn)制,可以通過excel的HEX2DEC函數(shù)把數(shù)據(jù)轉(zhuǎn)換成10進(jìn)制,以便于數(shù)據(jù)的處理。
圖9 單個(gè)文件用excel表格解析
分析可得,系統(tǒng)對(duì)SD卡平均寫入速率至少可以達(dá)到1.2 Mbps。使用XMC4500可以構(gòu)建出一個(gè)簡(jiǎn)單、穩(wěn)定、可靠、高效率的CAN總線數(shù)據(jù)記錄設(shè)備??梢源蟠鬁p輕測(cè)試記錄人員的負(fù)擔(dān),也可為系統(tǒng)數(shù)據(jù)的準(zhǔn)確實(shí)時(shí)記錄方面提供良好的技術(shù)支持。
[1]農(nóng)建毅.基于CAN的車輛行駛記錄儀[J].工業(yè)控制計(jì)算機(jī),2008,21(2):76 -79.
[2]肖楚海,梁杰申.SD卡在記錄汽車CAN總線數(shù)據(jù)中的應(yīng)用[J].信息化縱橫,2009(18):14-16.
[3]蘇義鑫,程敏,何力.基于AT89C52單片機(jī)的SD卡讀寫設(shè)計(jì)[J].世界電子元器件,2008(5):65-68.
[4]劉慧豐,李遠(yuǎn)哲,單建兵,等.基于SD卡的CAN總線數(shù)據(jù)存儲(chǔ)設(shè)備的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2014,22(04):1236 -1239.
[5]XMC4500 microcontroller series for industrial application reference manual[Z].V1.3 Infineon Technolo-gies AG,2013.
[6]魏來(lái),周穗華,劉旭東.基于SD卡的水聲信號(hào)采集系統(tǒng)設(shè)計(jì)[J].海洋技術(shù),2010,29(2):51-55.
[7]鄧劍,楊曉非,廖俊卿.FAT文件系統(tǒng)原理及實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2005,33(9):105 -108.
[8] Fatfs module application note r0.11[Z].ChaN,2015.
[9]付秀全,陳杭,葉樹明.基于MSP430F1611和SD卡的心電數(shù)據(jù)存儲(chǔ)系統(tǒng)的低功耗設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2009,(4):45 -51.
[10] SD specifications part a2,SD host controller standard specification,Version 2.00[Z].2007.
[11] SD memory card security specification,Version 1.01[Z].2001.
[12] The multimediacard system specification,Version 4.0[Z].2004.
[13] SD specifications part 1,physical layer specification,Version 2.00[Z].2006.
[14]盧鐵軍,童亮,賈銀良.基于XMC4500的汽車CAN網(wǎng)絡(luò)檢測(cè)卡設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2014,22(6):1905-1907.
[15] Installation and test GUI of infineon USB driver[Z].Infineon Technologies AG,2014.