HCS12X單片機(jī)的SD卡FAT文件系統(tǒng)讀寫設(shè)計(jì)
2 硬件設(shè)計(jì)
SD卡有2種操作模式:SD卡模式、SPI模式。SD卡模式允許通過4線高速總線傳輸,但由于大部分單片機(jī)無(wú)此接口模塊,故選擇SPI模式。HCSl2X系列單片機(jī)內(nèi)部都帶有此同步串行外部設(shè)備接口(Serial Peripheral Interface,SPI)。單片機(jī)可以通過SPI系統(tǒng)組成一個(gè)通信速率比SCI高的同步網(wǎng)絡(luò),故使用SPI模式可以把外設(shè)減少到最低。SPI模式相對(duì)于SD卡模式的缺點(diǎn)是損失了傳輸速度;但是目前的微處理器的處理速度越來(lái)越高,利用SPI模式大都能滿足工程需要。
HCSl2X單片機(jī)的全雙工8位SPI模塊有4個(gè)引腳,分別為主入從出引腳MISO、主入從出引腳MOSI、串行時(shí)鐘引腳SCK以及從機(jī)片選引腳SS。當(dāng)CS信號(hào)線為低電平時(shí),主機(jī)開始所有的總線傳輸。數(shù)據(jù)從單片機(jī)的MOSI引腳同步輸入Micro SD卡的DA引腳,Micro SD卡返回?cái)?shù)據(jù)由DO線同步輸入單片機(jī)的MISO引腳,數(shù)據(jù)在CLK信號(hào)的上升沿同步輸入和輸出。
3 軟件設(shè)計(jì)
3.1 HCSl2X總線時(shí)鐘超頻
MC9S12XSl28MAA默認(rèn)總線時(shí)鐘默認(rèn)同外接晶振相關(guān),但可以通過配置PLL鎖相環(huán)實(shí)現(xiàn)單片機(jī)總線超頻,從而加快SD卡讀取速率。實(shí)驗(yàn)中可通過下列代碼將單片機(jī)總線頻率超頻到80MHz:
3.2 HCSl2XSPl模塊初始化
MC9S12XSl28MAA單片機(jī)包含2個(gè)串行外設(shè)接口SPI,可以很方便地實(shí)現(xiàn)對(duì)Micro SD卡接口的數(shù)據(jù)傳輸。為了配置時(shí)鐘和數(shù)據(jù)長(zhǎng)度,需要對(duì)SPI控制寄存器(SPCRl和SPICR2)、SPI波特率寄存器SPIBR和SPI數(shù)據(jù)寄存器SPIDR進(jìn)行設(shè)置:使能SPI模塊,將SPICRl中的MSTR位置1使單片機(jī)工作在主機(jī)模式,產(chǎn)生串行時(shí)鐘來(lái)同步主從雙方的移位寄存器,配置SPI時(shí)鐘極性位與SPI時(shí)鐘相位控制位,使能從機(jī)輸出選擇;初始化SPI波特率寄存器。
3.3 SD卡初始化
SD卡初始數(shù)據(jù)傳輸需工作在低于400 kb/s的頻率,因此配置SPI波特率寄存器,以工作在低速模式下。片選信號(hào)后應(yīng)延時(shí)至少74個(gè)時(shí)鐘周期。SD卡默認(rèn)缺省使用SD總線傳輸協(xié)議,主機(jī)需要發(fā)出命令CMDO(CMD_GO_IDLE_STATE)才能使SD卡工作在SPI傳輸模式下,當(dāng)單片機(jī)返回0x 01時(shí)說(shuō)明已經(jīng)進(jìn)入了IDLE狀態(tài)。此時(shí)應(yīng)循環(huán)發(fā)送CMD55+ACMD41以確認(rèn)是否為SD卡,如果回應(yīng)超時(shí)則發(fā)送CMDl(CMD_SEND_OP_COND)以確認(rèn)是否為MMC卡。經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),Kingston公司的Micro SD卡使用CMD55+ACMD41或者CMDl都可以進(jìn)行激活。激活SD卡的SPI模式后SD卡進(jìn)入準(zhǔn)備狀態(tài),此時(shí)發(fā)送CMDl6(CMD_SET_BLOCKLEN)設(shè)置SD卡的讀寫塊大小,然后重新配置SPI波特率寄存器SPIBR使單片機(jī)SPI工作在高速頻率下,延時(shí)8個(gè)時(shí)鐘周期后返回,完成SD卡初始化。圖2為SD卡SPI高速模式初始化流程。
評(píng)論