SD读写流程
一、1bit-4bit數(shù)據(jù)傳輸對比
????? CPU/EDMA與SD的數(shù)據(jù)傳輸可以設(shè)置為1bit或4bit模式,1bit模式僅使用DAT0數(shù)據(jù)線,4bit模式使用DAT3-DAT0四位數(shù)據(jù)線。例如,傳輸512字節(jié)的數(shù)據(jù),傳輸?shù)臄?shù)據(jù)格式如下圖所示:
?
二、讀寫命令
????? 讀寫分為單塊讀寫和多塊讀寫。
CMD16:SET_BLOCKLEN,用于設(shè)定每次讀寫的塊大小,對于標(biāo)準(zhǔn)容量卡standard SD,默認(rèn)塊大小為512字節(jié),可以通過該命令改變CSD寄存器值從而改變讀寫塊大小;而對高容量卡SDHC,塊大小固定為512字節(jié),不可以改變。
CMD17:READ_SINGLE_BLOCK,單塊讀取,每次讀取一個(gè)數(shù)據(jù)塊,命令參數(shù)附加有地址信息,實(shí)現(xiàn)讀取SD卡某個(gè)地址的數(shù)據(jù)。
CMD18:READ_MULTIPLE_BLOCK,多塊讀取,每次讀寫多個(gè)數(shù)據(jù)塊,命令參數(shù)同樣包含地址信息。
????? 與之對應(yīng)的CMD24(WRITE_BLOCK)、CMD25(WRITE_MULTIPLE_BLOCK)可以實(shí)現(xiàn)單塊與多塊寫操作。
??????對于標(biāo)準(zhǔn)容量卡,讀寫命令參數(shù)argument值為字節(jié)地址,讀取時(shí)對第n個(gè)扇區(qū),地址為512*n;對于高容量卡,讀寫命令參數(shù)argument值為扇區(qū)地址,讀取時(shí)第n個(gè)扇區(qū)地址即為n。
三、單塊多塊讀寫時(shí)序圖
?
?
????? 讀寫過程,首先發(fā)送讀寫命令,接收到命令發(fā)送成功的response后發(fā)送或接受數(shù)據(jù),如果為單塊讀寫命令,發(fā)送或接收單塊數(shù)據(jù)后即完成;如果為多塊讀寫命令,直到收到停止操作的命令(CMD12)數(shù)據(jù)傳輸結(jié)束。
四、讀寫狀態(tài)轉(zhuǎn)換圖
????? CMD3(SEND_RELATIVE_ADDR)完成后,host得到RCA,由卡識別模式進(jìn)入數(shù)據(jù)傳輸模式。
1、? 主機(jī)發(fā)送CMD9(SEND_CSD)命令獲取卡的CSD信息。從CSD寄存器中可以獲得最大讀寫的塊長度等信息。
2、? 發(fā)送CMD7(SELECT/DESELECT_CARD),命令參數(shù)為RCA,可以選中某個(gè)RCA地址的卡,同時(shí)斷開與其他卡的連接;命令參數(shù)RCA=0時(shí),host斷開與所有卡的連接。該命令使卡由Stand by狀態(tài)轉(zhuǎn)到Transfer狀態(tài)。當(dāng)一個(gè)已經(jīng)處于transfer狀態(tài)的卡再次接收到CMD7命令時(shí),卡會(huì)由transfer狀態(tài)回到stand by狀態(tài),釋放DAT總線。
3、? 在transfer狀態(tài)下,可以發(fā)送CMD24、CMD25,CMD17、CMD18對卡進(jìn)行寫讀。所有這些命令都可以由CMD12命令停止。
4、? 在transfer狀態(tài)也可以發(fā)送命令CMD16(SET_BLOCKLEN)來設(shè)置讀寫的塊大小。
?????? 以TMS320C6747DSP中MMCSD控制器為例,單塊數(shù)據(jù)傳輸部分流程圖如下。
?
轉(zhuǎn)載于:https://www.cnblogs.com/sun-1989/p/3386270.html
總結(jié)
- 上一篇: 推荐一款移动端的web UI控件 --
- 下一篇: softlayer virtual ma