摘要:3.2HCSl2XSPl模塊初始化MC9S12XSl28MAA單片機(jī)包含2個(gè)串行外設(shè)接口SPI,可以很方便地實(shí)現(xiàn)對(duì)MicroSD卡接口的數(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)同步主從
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高速模式初始化流程。
3.4讀寫單塊數(shù)據(jù)
SD卡單塊數(shù)據(jù)的讀取是先通過(guò)單片機(jī)發(fā)送CMDl7(CMD_READ_SINGLE_BLOCK)命令,以SD卡指定數(shù)據(jù)塊起始位地址作為參數(shù),如果讀取成功SD卡會(huì)返回1個(gè)R1命令作為響應(yīng)。然后發(fā)送1個(gè)起始數(shù)據(jù)命令,接著發(fā)送單塊字節(jié)數(shù)量的數(shù)據(jù)并接收SPI數(shù)據(jù)寄存器SPIDR中的數(shù)據(jù),最后是2字節(jié)CRC校驗(yàn)。
SD卡單塊數(shù)據(jù)的寫入與讀取相似,通過(guò)單片機(jī)發(fā)送CMD24(CMD_WRITE_SINGLE_BLOCK)命令,以SD卡指定數(shù)據(jù)塊起始位地址作為參數(shù),如果讀取成功SD卡會(huì)返回1個(gè)R1命令作為響應(yīng)。然后發(fā)送1個(gè)起始數(shù)據(jù)命令,接著發(fā)送單塊字節(jié)數(shù)量的需寫入數(shù)據(jù),最后是2字節(jié)CRC校驗(yàn)。
通信工程師備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬(wàn)道題
已有25.02萬(wàn)小伙伴參與做題