SDIO主要功能
- 支持1位總線,4位總線,8位總線,8位總線可達(dá)48M傳輸速率。
- 支持MMC卡,SD卡和CE-ATA等標(biāo)準(zhǔn)
SDIO總線拓?fù)?/h2>
總線上的通信是通過傳送數(shù)據(jù)和命令實(shí)現(xiàn)的。
基本操作:命令/響應(yīng),某些操作還有數(shù)據(jù)令牌。
在SD存儲器上是以數(shù)據(jù)塊的形式進(jìn)行傳輸。
-
當(dāng)選擇SDIO工作在SD4位數(shù)據(jù)總線工作模式時(shí)候,我們選中的引腳如下:
SD卡用到的引腳
-
數(shù)據(jù)的傳輸操作流程如下:(以讀操作為例)
- 主機(jī)發(fā)送命令,等待卡的響應(yīng)。
- 卡響應(yīng)以后,數(shù)據(jù)從卡發(fā)送至主機(jī),經(jīng)過CRC后(也可能是數(shù)據(jù)流,無需每次CRC).
- 繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)塊。
- 主機(jī)發(fā)送一個(gè)STOP的命令后,卡發(fā)回一個(gè)響應(yīng),傳輸完成。
SDIO功能描述
- 包含兩個(gè)部分,一個(gè)是SDIO適配器,一個(gè)是AHB總線接口。
- 所有的數(shù)據(jù)線都工作于推挽模式。
- 對于SD或SD I/O卡,時(shí)鐘頻率可以在0MHz至25MHz間變化。
- 適配器,一共五個(gè)部分
- 寄存器
- 控制單元
電源管理和時(shí)鐘分頻
命令通道
發(fā)送命令和接收響應(yīng)
- 命令通道狀態(tài)機(jī)CPSM
- 命令固定為48位,其中包括了開始和結(jié)束位,傳輸位一共3位
- 6位命令索引
- 32位參數(shù)
- 7位CRC
- 響應(yīng)則有兩種格式,短格式如上命令格式,長格式136位包括CID和CSD
數(shù)據(jù)通道
- SD卡可以選擇4位總線或者1位總線,默認(rèn)為1位
- 數(shù)據(jù)通道狀態(tài)機(jī):DPSM使能后進(jìn)入WAIT-S或者WAIT-R狀態(tài)
- 發(fā)送狀態(tài):如果FIFO中有數(shù)據(jù),則發(fā)送出去
- 接收狀態(tài),收到起始位進(jìn)入接收狀態(tài),從卡中讀數(shù)據(jù)
- DPSM一共6個(gè)狀態(tài),包括idle,busy以外,還有WAIT-S和WAIT-R,以及sending和receiving狀態(tài)。
- 數(shù)據(jù)令牌格式分成兩種,一種是塊數(shù)據(jù),一種是流數(shù)據(jù),塊數(shù)據(jù)包含了16位CRC,流數(shù)據(jù)則沒有。
- 數(shù)據(jù)為32位+起始2位+CRC16位。
數(shù)據(jù)FIFO
- FIFO大小為32*32,根據(jù)RXACT和TXACT來分配FIFO為發(fā)送還是接收
- 發(fā)送FIFO,AHB數(shù)據(jù)寫入FIFO,有TXFIFOF和TXFIFOE表示FULL和EMPTY,當(dāng)8個(gè)以上的FIFO空時(shí)候,TXFIFOHE,此時(shí)可以通知DMA繼續(xù)填入數(shù)據(jù),TXDAVL和TXUNDERR用于處理異常。
- 接收FIFO類似。
總線接口
總線上的通信是通過傳送數(shù)據(jù)和命令實(shí)現(xiàn)的。
基本操作:命令/響應(yīng),某些操作還有數(shù)據(jù)令牌。
在SD存儲器上是以數(shù)據(jù)塊的形式進(jìn)行傳輸。
當(dāng)選擇SDIO工作在SD4位數(shù)據(jù)總線工作模式時(shí)候,我們選中的引腳如下:

數(shù)據(jù)的傳輸操作流程如下:(以讀操作為例)
- 主機(jī)發(fā)送命令,等待卡的響應(yīng)。
- 卡響應(yīng)以后,數(shù)據(jù)從卡發(fā)送至主機(jī),經(jīng)過CRC后(也可能是數(shù)據(jù)流,無需每次CRC).
- 繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)塊。
- 主機(jī)發(fā)送一個(gè)STOP的命令后,卡發(fā)回一個(gè)響應(yīng),傳輸完成。
電源管理和時(shí)鐘分頻
發(fā)送命令和接收響應(yīng)
- 命令通道狀態(tài)機(jī)CPSM
- 命令固定為48位,其中包括了開始和結(jié)束位,傳輸位一共3位
- 6位命令索引
- 32位參數(shù)
- 7位CRC
- 響應(yīng)則有兩種格式,短格式如上命令格式,長格式136位包括CID和CSD
下面的例子,主機(jī)控制器使用CMD24(WRITE_BLOCK)從主機(jī)傳送512字節(jié)到MMC卡,關(guān)于CMD24命令,后面有統(tǒng)一描述。
- 執(zhí)行卡識別過程
- 提高SDIO_CK頻率
- 發(fā)送CMD7命令選擇卡
- 配置DMA2:清中斷,設(shè)置源地址和目標(biāo)地址,設(shè)置DMA2的其他參數(shù),使能DMA
- 發(fā)送CMD24:
- 設(shè)置數(shù)據(jù)長度
- 卡的地址
- 設(shè)置命令WRITE_BLOCK
- 等待SDIO_STA中斷
- 等待DBCKEND
- 查詢DMA通道的使能狀態(tài)
卡功能描述
卡識別模式
此模式只用到了CMD線,執(zhí)行流程:復(fù)位所有卡,檢測電壓范圍,分配地址RCA
卡復(fù)位
CMD0軟件復(fù)位后,所有的卡處于閑置模式,分配默認(rèn)地址,閑置模式下卡的輸出端為高阻狀態(tài)。
操作電壓范圍確認(rèn)
超出操作電壓的卡將進(jìn)入非激活狀態(tài),存儲了CID和CSD的卡,電壓正常后則可以通信。
卡識別過程
MMC和SD卡的識別略有不同,MMC卡就是數(shù)碼相機(jī)用的卡,而SD卡更小,而SDIO接口通常用于WIFI和藍(lán)牙,GPS模塊用,SD卡的識別過程如下:
- 總線被激活
- 主機(jī)發(fā)送SEND_OP_COND
- 主機(jī)得到響應(yīng),不兼容的卡設(shè)為非激活狀態(tài)
- ALL_SEND_CID廣播發(fā)送到激活卡
- 激活的卡發(fā)送CID,如果有多個(gè)競爭,則用線與仲裁
- 主機(jī)發(fā)送SET_RELATIVE_ADDR,作為剛剛CID卡的地址,然后此卡進(jìn)行待機(jī)。
- 如果有多個(gè)卡,則進(jìn)行下一次循環(huán)。
寫數(shù)據(jù)塊
- 執(zhí)行CMD24-27時(shí),主機(jī)寫入數(shù)據(jù),在數(shù)據(jù)塊后跟CRC
- WRITE_BL_LEN決定了數(shù)據(jù)長度,如果CRC錯(cuò)誤,則所有數(shù)據(jù)全部丟掉。
- 如果卡已寫滿,或者有對齊等錯(cuò)誤發(fā)生時(shí)進(jìn)行處理,主機(jī)可以隨時(shí)發(fā)送SEND_STATUS來查詢狀態(tài)。
- READY_FOR_DATA表示卡還可以繼續(xù)寫入數(shù)據(jù),主機(jī)才繼續(xù)寫入
- 有錯(cuò)誤時(shí),SDIO_D拉低。
讀數(shù)據(jù)塊
讀數(shù)據(jù)塊的操作有點(diǎn)同寫數(shù)據(jù)塊
數(shù)據(jù)流操作
只適用于多媒體卡,SD卡和SDIO不支持這種最快速的操作。