45_SDIO基础知识
目錄
SDIO協議簡介
SDIO設備分類
SD卡物理結構
SD卡寄存器列表
SDIO總線拓撲
SDIO總線
SDIO總線協議
SDIO命令
命令格式
命令類型
響應
SD卡的操作模式
卡識別模式
數據傳輸模式
STM32 SDIO功能框圖
命令通道
命令狀態機
數據通道
數據狀態機
數據FIFO
SDIO協議簡介
SD卡(Secure Digital Memory Card)在我們生活中已經非常普遍了,控制器對SD卡進行讀寫通信操作一般有兩種通信接口可選,一種是SPI接口,另外一種就是SDIO接口。SDIO全稱是安全數字輸入/輸出接口,多媒體卡(MMC)、SD卡、SD I/O卡都有SDIO接口。STM32F103系列控制器有一個SDIO主機接口,它可以與MMC卡、SD卡、SD I/O卡以及CE-ATA設備進行數據傳輸。
多媒體卡協會網站http://www.mmca.org中提供了有MMCA技術委員會發布的多媒體卡系統規范。
SD卡協會網站http://www.sdcard.org中提供了SD存儲卡和SDIO卡系統規范。
CE-ATA工作組網站http://www.ce-ata.org中提供了CE_ATA系統規范。
SDIO設備分類
?MMC卡可以說是SD卡的前身,現階段已經用得很少。SDI/O卡本身不是用于存儲的卡,它是指利用SDIO傳輸協議的一種外設。比如Wi-Fi Card,它主要是提供Wi-Fi功能,有些Wi-Fi模塊是使用串口或者SPI接口進行通信的,但Wi-Fi SDIO Card是使用SDIO接口進行通信的。并且一般設計SD I/O卡是可以插入到SD的插槽。CE-ATA是專為輕薄筆記本硬盤設計的硬盤高速通訊接口。
目前SDIO協議提供的SD卡規范版本最新是4.01版本,但STM32F1xx系列控制器只支持SD卡規范版本2.0,即只支持標準容量SD和高容量SDHC標準卡,不支持超大容量SDXC標準卡,所以可以支持的最高卡容量是32GB。
SD卡物理結構
一張SD卡包括有存儲單元、存儲單元接口、電源檢測、卡及接口控制器和接口驅動器5個部分。
?存儲單元是存儲數據部件,存儲單元通過存儲單元接口與卡控制單元進行數據傳輸;
電源檢測單元保證SD卡工作在合適的電·壓下,如出現掉電或上狀態時,它會使控制單元和存儲單元接口復位;
卡及接口控制單元控制SD卡的運行狀態,它包括有8個寄存器;
接口驅動器控制SD卡引腳的輸入輸出。
SD卡總共有8個寄存器,用于設定或表示SD卡信息。
這些寄存器只能通過對應的命令訪問, SDIO定義64個命令,每個命令都有特殊意義,可以實現某一特定功能, SD卡接收到命令后,根據命令要求對SD卡內部寄存器進行修改,程序控制中只需要發送組合命令就可以實現SD卡的控制以及讀寫操作。
SD卡寄存器列表
SDIO總線拓撲
SD卡一般都支持SDIO和SPI這兩種接口,本章內容只介紹SDIO接口操作方式,SD卡與SDIO接口示意圖如下:
雖然可以共用總線,但不推薦多卡槽共用總線信號,要求一個單獨SD總線應該連接一個單獨的SD卡。
SD卡使用9-pin接口通信,其中3根電源線、1根時鐘線、1根命令線和4根數據線,具體如下:
CLK:時鐘線,由SDIO主機產生,即由STM32控制器輸出;
CMD:命令控制線, SDIO主機通過該線發送命令控制SD卡,如果命令要求SD卡提供應答, SD卡也是通過該線傳輸應答信息;
D0-3:數據線,傳輸讀寫數據; SD卡可將DO拉低表示忙狀態;
VDD、Vss1 Vss2:電源和地信號。
SDIO總線
SDIO的通信時序的物理邏輯非常簡單, SDIO不管是從主機控制器向SD卡傳輸,還是SD卡向主機控制器傳輸都只以CLK時鐘線的上升沿為有效。
SD卡操作過程會使用兩種不同頻率的時鐘同步數據,一個是識別卡階段時鐘頻率FOD,最高為400kHz;另外一添數據傳輸模式下時鐘頻率FPP,默認最高為25MHz,如果通過相關寄存正在聯網識別并翻譯,。工作在高速模式,此時數據傳輸模式最高頻率為50MHz。
SDIO總線協議
SD總線通信是基于命令和數據傳輸的。通訊由一個起始位("0”),由一個停止位(“1”)終止。SD通信長般是主機發送一個命令(Command),從設備在接收到命令后作出響應(Response),如有需要會有數據(Data)傳輸參與。
命令與響應交互:
?SD數據是以塊形式傳輸的, SDHC卡數據塊長度一般為512字節,數據可以從主機到卡,也可以是從卡到主機。數據塊需要CRC位來保證數據傳輸成功。CRC位由SD卡系統硬件生成。STM32控制器可以控制使用單線或4線傳輸
?SD數據傳輸支持單塊和多塊讀寫,它們分別對應不同的操作命令,多塊寫入還需要使用命令來停止整個寫入操作。數據寫入前需要檢測SD卡忙狀態,因為SD卡在接收到數據后編程到存儲區過程需要一定操作時間。SD卡忙狀態通過把DO線拉低表示。數據塊讀操作與之類似,只是無需忙狀態檢測。
使用4數據線傳輸時,每次傳輸4bit數據,每根數據線都必須有起始位、終止位以及CRC位,CRC位每根數據線都要分別檢查,并把檢查結果匯總然后在數據傳輸完后通過DO線反饋給主機。SD卡數據包有兩種格式,一種是常規數據(8bit寬),它先發低字節再發高字節,而每個字節則是先發高位再發低位,4線傳輸示意如下圖:
?另外一種數據包發送格式是寬位數據包格式,對SD卡而言寬位數據包發送方式是針對SD卡SSR(SD狀態)寄存器內容發送的,SSR寄存器總共有512bit,在主機發出ACMD13命令后SD卡將SSR寄存器內容通過DAT線發送給主機。寬位數據包格式示意圖如下:
SDIO命令
SD命令由主機發出,以廣播命令和尋址命令為例,廣播命令是針對與SD主機總線連接的所有從設備發送的,尋址命令是指定某個地址設備進行命令傳輸。
命令格式
SD命令格式固定為48bit,都是通過CMD線連續傳輸的,數據線不參與。
起始位和終止位:命令的主體包含在起始位與終止位之間,它們都只包含一個數據位,起始位為0,終止位為1。
傳輸標志:用于區分傳輸方向,該位為1時表示命令,方向為主機傳輸到SD卡,該位為0時表示響應,方向為SD卡傳輸到主機。
命令主體內容:命令主體內容包括命令、地址信息/參數和CRC校驗三個部分。
命令號:它固定占用6bit,所以總共有64個命令(代號: CMDO-CMD63),每個命令都有特定的用途,部分命令不適用于SD卡操作,只是專門用于MMC卡或者SD I/O卡。
地址/參數:每個命令有32bit地址信息/參數用于命令附加內容,例如,廣播命令沒有地址信息,這32bit用于指定參數,而尋址命令這32bit用于指定目標SD卡的地址。
CRC7校驗:長度為7bit的校驗位用于驗證命令傳輸內容正確性,如果發生外部干擾導致傳輸數據個別位狀態改變將導致校準失敗,也意味著命令傳輸失敗, SD卡不執行命令。
命令類型
SD命令有4種類型:
無響應廣播命令(bc),發送到所有卡,不返回任務響應;
帶響應廣播命令(bcr),發送到所有卡,同時接收來自所有卡響應;
尋址命令(ac),發送到選定卡,DAT線無數據傳輸;
尋址數據傳輸命令(adtc),發送到選定卡, DAT線有數據傳輸。
另外, SD卡主機模塊系統旨在為各種應用程序類型提供一個標準接口。在此環境中,需要有特定的客戶/應用程序功能。為實現這些功能,在標準中定義了兩種類型的通用命令:特定應用命令(ACMD)和常規命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在發送該命令之前無發送CMD55命令,告知SD卡接下來的命令為特定應用命令。CMD55命令只對緊接的第一個命令有效,SD卡如果檢測到CMD55之后的第一條命令為ACMD則執行其特定應用功能,如果檢測發現不是ACMD命令,則執行標準命令。
響應
響應由SD卡向主機發出,部分命令要求SD卡作出響應,這些響應多用于反饋SD卡的狀態。基本特性如下:
SDIO總共有7個響應類型(代號: R1-R7),其中SD卡沒有R4、R5類型響應。特定的命令對應有特定的響應類型,比如當主機發送CMD3命令時,可以得到響應,R6。
與命令一樣, SD卡的響應也是通過CMD線連續傳輸的。
根據響應內容大小可以分為短響應和長響應。短響應是48bit長度,只有R2類型是長響應,其長度為136bit。
SD卡的操作模式
SD卡有多個版本, STM32控制器目前最高支持《Physical LayerSimplified Specification V2.0》定義的SD卡, STM32控制器對SD卡進行數據讀寫之前需要識別卡的種類: V1.0標準卡、V2.0標準卡、V2.0高容量卡或者不被識別卡。
SD卡系統(包括主機和SD卡)定義了兩種操作模式:卡識別模式和數據傳輸模式。在系統復位后,主機處于卡識別模式,尋找總線上可用的SDIO設備;同時,SD卡也處于卡識別模式,直到被主機識別到,即當SD卡接收到SEND_RCA(CMD3)命令后, SD卡就會進入數據傳輸模式,而主機在總線上所有卡被識別后也進入數據傳輸模式。
在每個操作模式下, SD卡都有幾種狀態,通過命令控制實現卡狀態的切換:
卡識別模式
?在卡識別模式下,主機會復位所有處于“卡識別模式”的SD卡,確認其工作電壓范圍,識別SD卡類型,并且獲取SD卡的相對地址(卡相對地址較短,便于尋址)。在卡識別過程中,要求SD卡工作在識別時鐘頻率FOD的狀態下。
上電后,所有卡處于空閑狀態,可發送GO_IDLE_STATE(CMDO)讓所有卡軟復位從而進入空閑狀態。
使用SEND_IF_COND(CMD8)命令根據響應確定卡的電壓支持范圍。
CMD8是SD卡標準V2.0版本才有的新命令,所以如果主機有接收到響應,可以判斷卡為V2.0或更高版本SD卡(非MMC卡)。
使用SD_SEND_OP_COND(ACMD41)命令識別或拒絕不匹配它的電壓范圍的卡。并通過HCS位及其響應判斷是SDSC還是SDHC卡。
使用ALL_SEND_CID(CMD2)來控制所有卡返回它們的卡識別號(CID),處于準備狀態的卡在發送CID之后就進入識別狀態。
發送SEND_RELATIVE_ADDR(CMD3)命令,讓卡自己推薦一個相對地址(RCA)并響應命令。這個RCA是16bit地址,而CID是128bit地址,使用RCA簡化通信。
卡在接收到CMD3并發出響應后就進入數據傳輸模式,并處于待機狀態,主機在獲取所有卡RCA之后也進入數據傳輸模式。
數據傳輸模式
?只有SD卡系統處于數據傳輸模式下才可以進行數據讀寫操作。數據傳輸模式下可以將主機SD時鐘頻率設置為FPP,默認最高為25MHz,頻率切換可以通過CMD4命令來實現。
CMD7用來選定和取消指定的卡,卡在待機狀態下還不能進行數據通信,因為總線上可能有多個卡都是出于待機狀態,必須選擇一個RCA地址目標卡使其進入傳輸狀態才可以進行數據通信。同時通過CMD7命令也可以讓已經被選擇的目標卡返回到待機狀態。
數據傳輸模式下的數據通信都是主機和目標卡之間通過尋址命令點對點進行的。卡處于傳輸狀態下可以使用塊的讀寫以及擦除命令對卡進行數據讀寫、擦除。
CMD12可以中斷正在進行的數據通信,讓卡返回到傳輸狀態。CMD0和CMD15會中止任何數據編程操作,返回卡識別模式,這可能導致卡數據被損壞
STM32 SDIO功能框圖
STM32控制器有一個SDIO,由兩部分組成: SDIO適配器和APB2接口, SDIO適配器提供SDIO主機功能,可以提供SD時鐘、發送命令和進行數據傳輸。APB2接口用于控制器訪問SDIO適配器寄存器并且可以產生中斷和DMA請求信號。
?SDIO使用兩個時鐘信號,一個是SDIO適配器時鐘(SDIOCLK=72MHz),另外一個是AHB總線時鐘的二分頻(HCLK/2,一般為36MHz)。STM32控制器的SDIO是針對MMC卡和SD卡的主設備,所以預留有8根數據線,對于SD卡最多用四根數據線。
SDIO適配器是SD卡系統主機部分,是STM32控制器與SD卡數據通信中間設備。SDIO適配器由五個單元組成,分別是控制單元、命令路徑單元、數據路徑單元、寄存器單元以及FIFO。
命令通道
命令通道控制命令發送,并接收卡的響應,當SD卡處于某一狀態時,SDIO適配器必然處于特定狀態與之對應。STM32控制器以命令路徑狀態機(CPSM)來描述SDIO適配器狀態變化,并加入了等待超時檢測功能,以便退出永久等待的情況。
命令狀態機
數據通道
數據路徑部件負責與SD卡相互數據傳輸, SDIO適配器以數據路徑狀態機(DPSM)來描述SDIO適配器狀態變化情況。并加入了等待超時檢測功能,以便退出永久等待情況。發送數據時,DPSM處于等待發送(Wait_S)狀態,如果數據FIFO不為空, DPSM變成發送狀態并且數據路徑部件啟動向卡發送數據。接收數據時, DPSM處于等待接收狀態,當DPSM收到起始位時變成接收狀態,并且數據路徑部件開始從卡接收數據。
數據狀態機
數據FIFO
數據FIFO(先進先出)部件是一個數據緩沖器,帶發送和接收單元。控制器的FIFO包含寬度為32bit、深度為32字的數據緩沖器和發送/接收邏輯。
SDIO狀態寄存器(SDIO_STA)的TXACT位用于指示當前正在發送數據,RXACT位指示當前正在接收數據,這兩個位不可能同時為1。
當TXACT為1時,可以通過AHB接口將數據寫入到傳輸FIFO。
當RXACT為1時,接收FIFO存放從數據路徑部件接收到的數據。
根據FIFO空或滿狀態會把SDIO_STA寄存器位值1,并可以產生,中斷和DMA請求。
總結
以上是生活随笔為你收集整理的45_SDIO基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zabbix监控USG6300防火墙及交
- 下一篇: 最新代雅阁噪音测试软件,全新雅阁噪音测试