【科普贴】SD卡接口协议详解
一、 SD卡簡介
SD卡是Secure Digital Card,直譯就是“安全數字卡”,最早由松下(Panasonic)閃迪(SanDisk)東芝(Toshiba)三家公司發起。后形成SD卡協會。
按照當前市面上的物理規格來劃分,常見的SD卡可以分為三種。
1)標準的SD卡,這種卡比較大,尺寸為32X24X2.1mm。相當于郵票大小,多用于數碼相機、筆記本電腦等存儲
2)Mini SD卡,這個卡很少用,尺寸為20X21.5X1.4mm。這里不做過多累述。
3)Micro SD卡,這個卡原名為TF卡(Trans-flash Card),最早由閃迪(SanDisk)發明,后被SD協會采用,2004年改名為Micro SD。尺寸為15X11X1mm。
三種卡中,第三類應用最為廣泛,下文中描述,除非特意說明,描述SD卡皆為第三種卡的描述,偶爾使用TF卡的描述也為第三類卡的描述。
二、 SD卡上標識
1、Capacity of Memory(存儲容量)
SD卡按照存儲容量分類,可以分為標準容量卡、高容量卡、擴展容量卡。
如上圖可以看到16G的SD卡上印有“SDHC”字樣,64G的SD卡上“SDXC”字樣。
2、Speed Class(速率等級)
按照速率等級,SD卡分為5個速率等級。
1) Class 0 :這個卡不做性能要求,它包含這個標準之前所有的卡,不管它的性能如何
2) Class 2 :讀寫性能大于或等于2MB/sec
3) Class 4 :讀寫性能大于或等于4MB/sec
4) Class 6 :讀寫性能大于或等于6MB/sec
5) Class 10 :讀寫性能大于或等于10MB/sec
如上圖,SD看上印有“⑩”說明這個卡的讀寫速率要大于10MB/sec的要求。高容量卡和擴展容量卡,需要支持讀寫速率大于或等于Class 2的標準。
NOTE:性能單位[MB/sec]為1000x1000[Byte/sec],數據大小單位[MB]為1024x1024[字節]。這是因為最大的SD總線速度是由最大的SD時鐘頻率指定的(25 [MB/sec]= 25000000[Byte/sec]在50 MHz)和數據大小是基于在存儲邊界。
3、Bus Speed Mode(總線速率模式)
SD卡按總線模式來分,分為以下7種
1) 上圖中SD卡圖片上“I”表示支持USH-I(Ultra High Speed)的功能。USH-I表示的是可達最高104MB/sec的速度,注意不是實際的讀寫速度。可能是偶爾達到。
2) 上圖中SD卡圖片上“ ”是UHS Speed Class,當前主要以U1、U3兩種為主 U1代表該存儲卡最低(持續)寫入速度為10MB/s, U3則代表最低(持續)寫入速度可達30MB/s;
3) SDR(Single Data Rate)數據單沿采樣,即一個Clock周期內只采樣一次,SD有四條數據線。所以一個周期內只傳輸4bit數據。所以50MHz的頻率1S只能傳輸25MB的數據。
4) DDR(Double Data Rate)數據雙沿采樣,即一個Clock周期內,上升沿和下降沿都采樣一次,SD卡四條數據線。一個周期內傳輸8bit數據。所以50MHz的頻率1S可以傳輸50MB的數據。
5) USH-I模式向下兼容。即支持USH-I模式需要兼容低速率模式的USH-I,比如SD卡支持SDR104mode,則這個卡必然支持SDR50、SDR25等以下模式。
4、 APP Performance(APP性能)
上圖中SD卡圖片上“ ”是針對手機專用存儲卡制定的性能標準,即希望將APP安裝在SD卡上,目前包括APP Performance A1和APP Performance A2,它們的最低(持續)寫入速度都是10MB/s,但其中A1標準的隨機讀寫性能要求分別是1500IOPS和5001OPS(每秒進行讀寫操作的次數,次數越大,操作越快)以上,而A2標準則大幅度提高到了40001OPS和2000IOPS; A認證的標準是平穩的讀寫速度。
三、 SD卡通訊機制
1、 Card Identification Mode(卡識別模式)
1) 主機和卡在通訊之前,主機也不知道卡支持的工作電壓范圍,卡也不知道是否可以支持主機提供的電壓,主機會以默認電壓發送一個CMD0,并且主機默認卡支持該命令。上電或CMD0后,所有SD卡的CMD線設置成input 模式,等待下一條命令。同時會初始化card的默認地址(RCA0X0000)和默認驅動強度改成400KHz。讓SD卡處于idle狀態(不論之前卡是處于inactive state還是其他狀態),這時主機和卡都處在3.3V的信號(signaling)電壓。
2) 如果在發送的CMD0時,CS(和DAT3復用)又被拉低,這個時候進入SPI模式,如果進入SPI狀態需要重新上電才可以解除,這種模式使用較少,這里不做累述。詳細可以SD卡通訊協議。
3) 為了確定SD卡接口的操作標準,主機會發送CMD8命令。CMD8信號中包含SD卡的工作電壓范圍信息。SD卡收到CMD8命令后,通過分析CMD8命令里包含的電壓信號工作范圍信息,如果SD卡可以工作在這個工作電壓范圍內,SD卡會response的命令中包含提供的電壓參數,如果不可以工作在這個電壓范圍內,則不會做出響應,這是主機還處在idle狀態。
4) ACMD41的命令是來識別不匹配主機供電電壓的卡。如果SD卡在主機提供的供電電壓范圍內不能實現數據傳輸,SD卡將進入inactive狀態。主機在發送ACMD41時,可以將命令中的OCR參數設置成0,用來查詢SD卡所支持的工作范圍。主機查詢到SD卡的工作電壓后,可以作為下次發送ACMD41命令的參數。
2、 Card Initialization and Identification Process(卡的初始化和識別過程)
1)當總線被激合后,主機就開始處理SD卡的初始化和識別。在主機發ACMD41命令開始處理SD卡初始化時,主機會在ACMD41的參數中設置它的操作條件和設置OCR中的HCS位。HCS位被設置為1表示主機支持SDHC或者SDXC。HCS被設置為0表示主機不支持SDHC和SDXC。
2)SD卡利用OCR里面的busy位來通知主機ACMD41的初始化已經完成。如果busy位為0,表示SD卡還在初始化,如果busy位為1,說明初始化已經完成。主機會在1s的時間內,重復不斷地發送ACMD41命令,直到busy位被置1為止。卡只有在第一次收到設置電壓的ACMD41命令時,才會去檢查操作條件和OCR中的HCS位。并且在重復發送ACMD41命令的這段時間里,主機不應該發送任何命令,除了CMD0。
3)如果SD卡能正確響應CMD8之后,SD卡對ACMD41命令的響應會包含一個CCS字段,CCS在卡返回ready時(busy位置1)有效。CCS=0表示SD卡是SDSC,CCS=1表示SD卡是SDHC或者SDXC。
4)在ACMD41之后,主機會發送CMD2,獲取卡的CID。在卡發送它的CID之后,卡進入識別狀態(identification State) 。
5)接著,主機發送CMD3,請求SD卡發布SD卡的RCA。RCA是一個比CID短的,并且將來在數據傳輸模式中使
用的地址。
3、Data Transfer Mode(數據傳輸模式)
因為SD卡在識別模式(Identification Mode)下,對操作頻率有限制,所以在識別模式結束前,主機的頻率需要一直保持在fOD(400KHz)。在數據傳輸模式(Data Transfer Mode) ,主機頻率在fpp(可根據實際卡USH狀況)范圍內是可執行的。
主機必須發送CMD9來獲得卡規格數據寄存器(CSD)內容,獲取像塊大小、卡容量這類信息。
CMD4廣播命令配置所有識別到的卡的驅動階段。它對DSR寄存器進行編程以適應應用的總線布局(長度)、總線上卡的數目和數據傳輸頻率。clock rate也是在這個時候從fOD切到fpp。
CMD7用于選擇卡,并且將卡帶入傳輸狀態(Transfer State)。在同一個時間內,只有一張卡能進入傳輸狀態。當發送的CMD7的RCA地址參數為"0x0000",所有卡將跳回到準備狀態(Stand-by State ) 。
對已經擁有RCA的卡來說,對它發送identification commands(比如ACMD41、CMD2),它將不會有任何回應。在數據傳輸模式下,主機與被選中的卡(使用定向命令)之間的數據傳輸都是點對點的。通過CMD線,所有定向命令(addressed commands)都會收到一個用于確認的response。
在任何時候,所有的讀命令集在執行過程中都可以被stop command (CMD12)打斷。cmd12命令將會使數據傳輸終止,并且使卡退回到傳輸狀態(Transfer State)。讀命令集包括: block read(CMD17), multiple block read(CMD18), send write protect(CMD30), send SCR(ACMD51)和 general command in read mode (CMD56)。
在任何時候,所有的寫命令集在執行過程中都可以被stop command (CMD12)打斷。寫命令集包括: block write(CMD24 andCMD25), program CSD(CMD27), lock/unlock command(CMD42)和general command in write mode(CMD56)。
一旦數據傳輸完成.卡就會退出數據寫狀態,并且進入正在編程狀態(Programming State)(傳輸成功),或者進入傳輸狀態(傳輸失敗)。
如果一個塊寫操作被打斷,但是最后一個block的塊長度和CRC有效的話,這塊數據也將會被編程到卡里。
卡也許會對塊寫操作提供緩存,這意味著,在一個block還在被編程的情況下,下一個block可以被發送這個卡里面。如果所有的寫緩存都已經滿了的話,只要卡還在正在編程狀態,DATO線就會―直保持在拉低狀態。
對寫CSD、寫保護和擦除操作來說,卡不會提供緩存。這意味著,在卡正忙于處理這其中任何一個命令時,卡不會接收任何發送到卡的數據。只要卡還在忙,DATO線就會拉低,并且處于正在編程狀態(Programming State)。
當卡正在編程時,不允許任何一個參數設置命令集((Parameter set commands)。參數設置命令集包括: set blocklength(CMD16), erase block start(CMD32)和erase block end(CMD33)。
當卡正在編程時,不允許任何一個讀命令集。
當將其他的卡從準備狀態(Stand-by)切換到傳輸狀態(使用CMD7),不會中斷當前卡的擦除或者編程操作。當前卡將會切換到斷開狀態(Disconnect State) ,并且釋放數據線。
當卡正在編程或者待編程時,對其重置(發送CMDO或者CMD15),將會導致操作終止,并且可能會導致卡內的數據內容被破壞。因此主機有責任去禁止這樣的操作。
四、 電氣特性(Timing 時序)
由上文可以知道SD卡由不同的工作電壓,不同的工作速率,CLK的頻率和采樣方式也不盡相同,所以就導致SD卡有多樣的時序和要求。在實際的調試過程中,我們常常要通過Timing時序來定位問題。接下來將會詳細介紹各個時序的要求。
1、 信號電平的判定標準
2、Default Speed Timing(3.3V signaling)
3、 High-Speed Mode Timing(3.3V signaling)
4、 SDR12、SDR25、SDR50、SDR104 Mode Timing(1.8V signaling)
5、 DDR50 Mode Timing(1.8V signaling)
總結
以上是生活随笔為你收集整理的【科普贴】SD卡接口协议详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmd闪退
- 下一篇: network中的weight init