1. 程式人生 > >SD3.0協議解讀二

SD3.0協議解讀二

SD匯流排:

大家都知道匯流排一般支援多種頻率,在預設的頻率下,SD匯流排支援一(主)對多(從)的模式,即支援一個HOST對多個SD卡的模式。但是,在高速和UHS-I,SD匯流排只能支援一對一的模式,即支援一個HOST對一個SD卡的模式。

問:那麼對於一對多的模式,匯流排是如何找到相應的SD卡呢?

答:在SD卡初始化識別模式下,通過傳送CMD3來獲取RCA,即卡的邏輯地址,如果卡發現跟自己的邏輯地址是一致的,就會通過R6來響應。

SD匯流排協議:

SD匯流排是基於命令和資料的,開始於起始位,結束於結束位。Command和Response都是通過CMD線來傳輸的,Data是通過資料線來傳輸的。Command都是由主機(HOST)發起,Response都是由卡發出響應的。


資料的傳輸是以(Block)為單位的,資料塊後面帶有CRC校驗位,圖3-4描述了單塊和多塊的資料傳輸操作,多塊資料傳輸通過Stop命令來結束資料傳輸操作。

因為HOST的速度總是比SD的速度要快,假如你往卡里面拼命寫資料,這會出現什麼問題?問題可大了,假如SD卡第一次都還沒成功寫完整,你就馬上發第二次第三次的資料過來,那必將會造成資料的丟失,對吧。這就引申出了等待機制。HOST必須等待Card寫完了,你才能繼續發第二次資料傳輸。

那麼,在SD匯流排的塊寫操作裡,是通過Data0的訊號狀態指示卡是否Busy還是Ready的。

Command的內部編碼格式:

Command命令都是由48bit組成的,每個命令的開始都是以'0'開始,以'1'結束的。每個命令都包含有CRC校驗位,它的作用是,當資料傳輸發生錯誤時,可以重新重新發起操作。

Response的內部編碼格式:

Response有四種編碼模式,這取決於響應內容,長度為48bit或者136bit。由圖3-7可知,當Response為R1、R3、R6時,響應長度為48bit,而Response為R2時,響應長度為136bit。並且在CMD線上傳輸都是先發送MSB,最後傳送LSB,由於Command和Response都是在CMD線上傳輸的,所以它們都必須按照先發送MSB,最後傳送LSB。這些規定都會在驅動裡面被一個結構體封裝掉,你知道是這麼一回事就好了,不用特別在意
-

SD卡的資料包格式:

1.Usual data (8 bit width):在位元組之間先傳輸低位元組後傳輸高位元組,在位元組裡面先傳輸高位後傳輸低位。

2.Wide width data(SD卡暫存器):共有512bit,先傳高位後傳低位。

相應的資料格式這裡就不貼圖了,有興趣的讀者請查閱“Part_1_Physical_Layer_Specification_Ver3.00_Final_090416”的P28和P29
--