中國(guó)一汽無(wú)錫油泵油嘴研究所 楊 琛 張 雷 寇 偉 楊鵬翔 陸召振
通過(guò)車(chē)載傳感器對(duì)發(fā)動(dòng)機(jī)參數(shù)采集和存儲(chǔ),Electronic Control Unit(ECU)可以判斷發(fā)動(dòng)機(jī)的工作狀態(tài)和工作趨勢(shì)。許多車(chē)載傳感器[1](例如燃油質(zhì)量傳感器)需要對(duì)發(fā)動(dòng)機(jī)參數(shù)進(jìn)行長(zhǎng)期監(jiān)控,單片機(jī)作為控制器件,其數(shù)據(jù)存儲(chǔ)資源十分有限。Secure Digital(SD)卡具有大容量、小體積、低功耗、非易失性以及兼容MMC卡等特點(diǎn),是理想選擇。
部分文章已介紹了單片機(jī)(如PIC、C51等)讀寫(xiě)SD卡的應(yīng)用實(shí)例[2,3],但這些單片機(jī)在汽車(chē)領(lǐng)域使用較少。本文以Freescale公司的MC9S12XEP100[4]單片機(jī)為控制器,通過(guò)PC將圖片文件存入SD卡,并將數(shù)據(jù)送入彩色液晶上實(shí)現(xiàn)循環(huán)播放實(shí)驗(yàn),探討了Freescale單片機(jī)對(duì)SD卡文件讀寫(xiě)的設(shè)計(jì)方法,該方法可廣泛應(yīng)用于車(chē)載傳感器的數(shù)據(jù)存儲(chǔ)單元。
SD卡[5]主要由存儲(chǔ)芯片和控制芯片組成,SD卡控制芯片負(fù)責(zé)對(duì)數(shù)據(jù)的讀寫(xiě)控制。其工作電壓為2.7-3.6V。每次對(duì)SD卡進(jìn)行數(shù)據(jù)讀寫(xiě)時(shí)的最小單位是1個(gè)扇區(qū),即512Byte。SD卡支持兩種操作模式,SD模式和SPI模式,因單片機(jī)的IO口資源限制,大多數(shù)應(yīng)用都選擇SPI模式。
SD總線模式包含4根數(shù)據(jù)線和1根命令線,傳輸速度可達(dá)到100Mbit/s。SPI模式是4線制總線,SPI模式下的接口定義參見(jiàn)表1。
表1 SPI模式接口定義
Freescale推出的16位MC9S12XE系列單片機(jī)具有增強(qiáng)的系統(tǒng)集成性和更好的功能性[6]。其內(nèi)部PLL超頻能力能顯著降低對(duì)外部頻率源的主頻的需求,從而提高單片機(jī)的抗干擾能力。XGATE核能協(xié)處理I/O中斷需求,從而降低主核的任務(wù)量。另外,其具有EEPROM、FLASH以及豐富的I/O資源(例如SPI、ECT、CAN2.0等),可滿(mǎn)足汽車(chē)領(lǐng)域嚴(yán)苛的應(yīng)用環(huán)境需求。
實(shí)驗(yàn)系統(tǒng)組成如圖1,單片機(jī)通過(guò)SPI總線與SD通信,并通過(guò)并口與彩色液晶模塊進(jìn)行通信。SD需由LDO電源轉(zhuǎn)換芯片供電。
圖1 實(shí)驗(yàn)系統(tǒng)原理框圖
SD卡的實(shí)驗(yàn)系統(tǒng)工作過(guò)程如下:a.由上位機(jī)軟件對(duì)待處理數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,生成二進(jìn)制文件。b.將文件拷入SD卡,拷貝前需要對(duì)SD卡進(jìn)行以FAT格式化,以確定存儲(chǔ)位置的首地址。C.實(shí)驗(yàn)系統(tǒng)上電后,進(jìn)入SD卡讀寫(xiě)程序讀取相應(yīng)文件,并進(jìn)行顯示。
單片機(jī)完成初始化后,在RAM中緩沖512 bytes,并送LCD顯示;當(dāng)i=300時(shí),表明1幅圖像顯示完成。程序共設(shè)置了5幅圖像循環(huán)顯示,軟件流程圖如圖2所示。
圖2 軟件流程圖
系統(tǒng)上電后SD卡默認(rèn)進(jìn)入SD模式,需設(shè)置SPI模式以及單塊讀寫(xiě)的數(shù)據(jù)長(zhǎng)度。當(dāng)CS處于低電平時(shí),發(fā)送CMD0,發(fā)送完畢后,接受R1回應(yīng),判斷SD卡是否正確接受指令。CMD0使得SD進(jìn)入IDLE狀態(tài),CMD1激活SD卡的初始化過(guò)程,等待R1判斷SD卡是否處于激活狀態(tài)。CMD16指令設(shè)置讀寫(xiě)塊的大小為512Byte。需等待至少74個(gè)時(shí)鐘周期。初始化流程參如圖3所示。
圖3 SPI初始化流程
讀程序過(guò)程如圖4所示,單片機(jī)通過(guò)CMD17指令讀取SD卡扇區(qū)數(shù)據(jù),若成功SD卡返回R1響應(yīng),單片機(jī)對(duì)512byte數(shù)據(jù)進(jìn)行緩存。寫(xiě)程序過(guò)程見(jiàn)圖5,CMD24指令作為SD卡的寫(xiě)入指令,若SD卡成功響應(yīng)則返回R1,單片機(jī)從緩存區(qū)寫(xiě)入512bytes數(shù)據(jù)。
圖4 讀程序
圖5 寫(xiě)程序
圖6 SD卡文件顯示效果
本文所使用彩色液晶分辨率[7]為QVGA,16位真彩色格式。實(shí)現(xiàn)實(shí)驗(yàn)圖片正常顯示,需要解決2個(gè)問(wèn)題:圖像的格式和圖像數(shù)據(jù)量。一方面,F(xiàn)reescale單片機(jī)應(yīng)用通常不具備操作系統(tǒng),因此需要將.jpg、.gif、.bmp文件轉(zhuǎn)換成二進(jìn)制文件.bin格式。另一方面,根據(jù)彩色液晶模塊的分辨率特點(diǎn),可根據(jù)公式(1),得出顯示圖片的數(shù)據(jù)是:
顯然,當(dāng)需要顯示多幅圖片時(shí)對(duì)單片機(jī)的存儲(chǔ)開(kāi)銷(xiāo)十分巨大,需要借助SD卡的存儲(chǔ)能力。由SD卡的讀寫(xiě)單位是512bytes,可得出1幅圖像占用的扇區(qū)數(shù)為:
本文選取MC9S12XEP100單片機(jī)搭建的實(shí)驗(yàn)系統(tǒng)對(duì)SD卡讀寫(xiě)接口程序進(jìn)行了驗(yàn)證。由圖6可見(jiàn),所設(shè)計(jì)的程序能正常讀寫(xiě)SD卡文件。
SD卡的存儲(chǔ)方式可以有效的緩解單片機(jī)存儲(chǔ)資源有限的問(wèn)題,滿(mǎn)足日漸復(fù)雜的各種車(chē)載設(shè)備及傳感器的數(shù)據(jù)存儲(chǔ)要求。本文研究了Freescale單片機(jī)對(duì)SD卡讀寫(xiě)的設(shè)計(jì)方法,并通過(guò)存儲(chǔ)圖片數(shù)據(jù)實(shí)驗(yàn)進(jìn)行了驗(yàn)證,該方法可廣泛應(yīng)用于車(chē)載傳感器的長(zhǎng)期數(shù)據(jù)存儲(chǔ)需求。
[1]呂艷,孫克.汽車(chē)電子傳感器簡(jiǎn)述[J].儀表技術(shù)與傳感器,2009(Z1).
[2]張凱臨,姚玉玲,劉金濤.SD卡在PIC系列微控制器系統(tǒng)中的應(yīng)用[J].微計(jì)算機(jī)信息,2008(24).
[3]張恒.基于AT89S52和FAT16的SD卡讀寫(xiě)系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2009(08).
[4]MC9S12XEP100 Reference Manual Covers MC9S12XE Family[M].Version 1.25,Freescale,February,2013.
[5]SanDisk Secure Digital Card Product Manual[M].Version 2.2,San-Disk Corporation,September,2004.
[6]孫同景.Freescale 9S12十六位單片機(jī)原理及嵌入式開(kāi)發(fā)技術(shù)[M].北京:機(jī)械工業(yè)出版社,2008.
[7]應(yīng)根裕,胡文波,邱勇.平板顯示技術(shù)[M].北京:人民郵電出版社,2002.