運(yùn)動控制器23:STM32的SDIO功能介紹1

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間變化。
  1. 適配器,一共五個(gè)部分
  • 寄存器
  • 控制單元

電源管理和時(shí)鐘分頻

命令通道

發(fā)送命令和接收響應(yīng)
- 命令通道狀態(tài)機(jī)CPSM
- 命令固定為48位,其中包括了開始和結(jié)束位,傳輸位一共3位
- 6位命令索引
- 32位參數(shù)
- 7位CRC
- 響應(yīng)則有兩種格式,短格式如上命令格式,長格式136位包括CID和CSD

數(shù)據(jù)通道

  1. SD卡可以選擇4位總線或者1位總線,默認(rèn)為1位
  2. 數(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ù)
  1. DPSM一共6個(gè)狀態(tài),包括idle,busy以外,還有WAIT-S和WAIT-R,以及sending和receiving狀態(tài)。
  2. 數(shù)據(jù)令牌格式分成兩種,一種是塊數(shù)據(jù),一種是流數(shù)據(jù),塊數(shù)據(jù)包含了16位CRC,流數(shù)據(jù)則沒有。
  3. 數(shù)據(jù)為32位+起始2位+CRC16位。

數(shù)據(jù)FIFO

  1. FIFO大小為32*32,根據(jù)RXACT和TXACT來分配FIFO為發(fā)送還是接收
  2. 發(fā)送FIFO,AHB數(shù)據(jù)寫入FIFO,有TXFIFOF和TXFIFOE表示FULL和EMPTY,當(dāng)8個(gè)以上的FIFO空時(shí)候,TXFIFOHE,此時(shí)可以通知DMA繼續(xù)填入數(shù)據(jù),TXDAVL和TXUNDERR用于處理異常。
  3. 接收FIFO類似。

總線接口

下面的例子,主機(jī)控制器使用CMD24(WRITE_BLOCK)從主機(jī)傳送512字節(jié)到MMC卡,關(guān)于CMD24命令,后面有統(tǒng)一描述。

  1. 執(zhí)行卡識別過程
  2. 提高SDIO_CK頻率
  3. 發(fā)送CMD7命令選擇卡
  4. 配置DMA2:清中斷,設(shè)置源地址和目標(biāo)地址,設(shè)置DMA2的其他參數(shù),使能DMA
  5. 發(fā)送CMD24:
    • 設(shè)置數(shù)據(jù)長度
    • 卡的地址
    • 設(shè)置命令WRITE_BLOCK
    • 等待SDIO_STA中斷
    • 等待DBCKEND
  6. 查詢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卡的識別過程如下:

  1. 總線被激活
  2. 主機(jī)發(fā)送SEND_OP_COND
  3. 主機(jī)得到響應(yīng),不兼容的卡設(shè)為非激活狀態(tài)
  4. ALL_SEND_CID廣播發(fā)送到激活卡
  5. 激活的卡發(fā)送CID,如果有多個(gè)競爭,則用線與仲裁
  6. 主機(jī)發(fā)送SET_RELATIVE_ADDR,作為剛剛CID卡的地址,然后此卡進(jìn)行待機(jī)。
  7. 如果有多個(gè)卡,則進(jìn)行下一次循環(huán)。

寫數(shù)據(jù)塊

  1. 執(zhí)行CMD24-27時(shí),主機(jī)寫入數(shù)據(jù),在數(shù)據(jù)塊后跟CRC
  2. WRITE_BL_LEN決定了數(shù)據(jù)長度,如果CRC錯(cuò)誤,則所有數(shù)據(jù)全部丟掉。
  3. 如果卡已寫滿,或者有對齊等錯(cuò)誤發(fā)生時(shí)進(jìn)行處理,主機(jī)可以隨時(shí)發(fā)送SEND_STATUS來查詢狀態(tài)。
  4. READY_FOR_DATA表示卡還可以繼續(xù)寫入數(shù)據(jù),主機(jī)才繼續(xù)寫入
  5. 有錯(cuò)誤時(shí),SDIO_D拉低。

讀數(shù)據(jù)塊

讀數(shù)據(jù)塊的操作有點(diǎn)同寫數(shù)據(jù)塊

數(shù)據(jù)流操作

只適用于多媒體卡,SD卡和SDIO不支持這種最快速的操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容