重學STM32---(八)----SDIO


1.  SDIO(SD/SDIO MMC卡主機模塊)在AHB外設總線和多媒體卡(MMC)、SD存儲卡、SDIO卡和CE-ATA設備間提供了操作接口。(SDIO沒有SPI兼容的通信模式 )

1.1.什么是MMC卡

MMC:MMC就是MultiMediaCard的縮寫,即多媒體卡。它是一種非易失性存儲器件,體積小巧(24mm*32mm*1.4mm),容量大,耗電量低,傳輸速度快,廣泛應用於消費類電子產品中。

1.2.什么是SD卡

SD:SD卡為Secure Digital Memory Card, 即安全數碼卡。它在MMC的基礎上發展而來,增加了兩個主要特色:SD卡強調數據的安全安全,可以設定所儲存的 
使用權限,防止數據被他人復制;另外一個特色就是傳輸速度比2.11版的MMC卡快。在數據傳輸和物理規范上,SD卡(24mm*32mm*2.1mm,比MMC卡更厚一點),向前兼容了MMC卡.所有支持SD卡的設備也支持MMC卡。SD卡和2.11版的MMC卡完全兼容。

1.3.什么是SDIO

SDIO:SDIO是在SD標准上定義了一種外設接口,它和SD卡規范間的一個重要區別是增加了低速標准。在SDIO卡只需要SPI和1位SD傳輸模式。低速卡的目標應用是以最小的硬件開銷支持低速IO能力。

 

現在已經有非常多的手機或是手持裝置都支持 SDIO 的功能(SD 標准原本就是針對 mobile device 而制定),而且許多 SDIO 外圍也都被開發出來,讓手機外接外圍更加容易,並且開發上更有彈性(不需要內建外圍)。目前常見的 SDIO 外圍(SDIO 卡)有:

· Wi-Fi card(無線網絡卡) 

· CMOS sensor card

· GPS card 

· GSM/GPRS modem card 

· Bluetooth card 

·  Radio/TV card

SDIO 的應用將是未來嵌入式系統最重要的接口技術之一,並且也會取代目前 GPIO 式的 SPI 接口。

1.4. CE-ATA 一種基於為了節省接口IO數量,專為輕薄筆記本硬盤設計的筆記本硬盤高速通訊接口

 

2. SDIO功能描述 

2.1 復位后默認情況下SDIO_D0用於數據傳輸。初始化后主機可以改變數據總線的寬度。(通過SDIO時鍾控制寄存器(SDIO_CLKCR) 改變
2.2 如果一個多媒體卡接到了總線上,則SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用於數據傳輸。MMC版本V3.31和之前版本的協議只支持1位數據線,所以只能用SDIO_D0。

2.3 如果一個SD或SD I/O卡接到了總線上,可以通過主機配置數據傳輸使用SDIO_D0或SDIO_D[3:0]。所有的數據線都工作在推挽模式。

2.4 SDIO_CMD有兩種操作模式:
● 用於初始化時的開路模式(僅用於MMC版本V3.31或之前版本)
● 用於命令傳輸的推挽模式(SD/SD I/O卡和MMC V4.2在初始化時也使用推挽驅動)
2.5 SDIO_CK是卡的時鍾:每個時鍾周期在命令和數據線上傳輸1位命令或數據。對於多媒體卡V3.31協議,時鍾頻率可以在0MHz至20MHz間變化;對於多媒體卡V4.0/4.2協議,時鍾頻率可以在0MHz至48MHz間變化;對於SD或SD I/O卡,時鍾頻率可以在0MHz至25MHz間變化。(初始化時不大於400KHz)
SDIO使用兩個時鍾信號: 
● SDIO適配器時鍾(SDIOCLK=HCLK) 72MHz
● AHB總線時鍾(HCLK/2)   


3. SDIO命令傳輸

3.1 命令:命令是用於開始一項操作。主機向一個指定的卡或所有的卡發出帶地址的命令或廣播命令(廣播命令只適合於MMC V3.31或之前的版本)。命令在CMD線上串行傳送。所有命令的長度固定為48位,下表給出了多媒體卡、SD存儲卡和SDIO卡上一般的命令格式。

命令通道操作於半雙工模式,這樣命令和響應可以分別發送和接收。如果CPSM不處在發送狀態,SDIO_CMD輸出處於高阻狀態,SDIO_CMD上的數據與
SDIO_CK的上升沿同步。

所有的命令都是由 STM32F1 發出,其中開始位、傳輸位、CRC7 和結束位由 SDIO硬件控制,我們需要設置的就只有命令索引和參數部分。其中命令索引(如 CMD0,CMD1 之類的)在 SDIO_CMD 寄存器里面設置,命令參數則由寄存器 SDIO_ARG 設置。一般情況下,選中的 SD卡在接收到命令之后,都會回復一個應答(注意 CMD0 是無應答的),這個應答我們稱之為響應,響應也是在 CMD線上串行傳輸的。STM32F1 的 SDIO控制器支持 2 種響應類型,即:短響應(48 位)和長響應(136 位),這兩種響應類型都帶 CRC 錯誤檢測(注意不帶 CRC 的響應應該忽略 CRC 錯誤標志,如 CMD1 的響應)。


3.2  響應:響應是由一個被指定地址的卡發送到主機,對於MMC V3.31或以前版本所有的卡同時發送響應;響應是對先前接收到命令的一個應答。響應在CMD線上串行傳送。

SDIO支持2種響應類型,2種類型都有CRC錯誤檢測: (如果響應不包含CRC(如CMD1的響應),設備驅動應該忽略CRC失敗狀態)

● 48位短響應 
● 136位長響應



命令寄存器(SDIO_CMD)包含命令索引(發至卡的6位)和命令類型;命令本身決定了是否需要響應和響應的類型、48位還是136位

  同樣,硬件為我們濾除了開始位、傳輸位、CRC7 以及結束位等信息,對於短響應,命令索引存放在 SDIO_RESPCMD 寄存器,參數則存放在 SDIO_RESP1 寄存器里面。對於長響應,則僅留 CID/CSD位域,存放在 SDIO_RESP1~SDIO_RESP4 等4 個寄存器。

例如:CMD9和CMD10

   命令索引  是否需要響應  命令參數   響應的類型、48位還是136位          

響應格式有:R1,R1b,R2,R3,R4,R4b,R5,R6,R7(stm32參考手冊SDIO響應格式)

 

4. 命令與響應

應用相關命令和通用命令
      SD卡主機模塊系統是用於提供一個適用於多種應用類型的標准接口,但同時又要兼顧特定用戶和應用的功能,因此標准中定義了兩類通用命令:應用相關命令(ACMD)和通用命令(GEN_CMD)。 當卡收到APP_CMD(CMD55)命令時,卡期待下一個命令是應用相關命令。應用相關命令(ACMD)具有普通多媒體卡相同的格式結構,並可以使用相同的CMD號碼,因為它是出現在APP_CMD(CMD55)后面,所以卡把它識別為ACMD命令。如果跟隨APP_CMD(CMD55)之后不是一個已經定義的應用相關命令,則認為它是一個標准命令;例如:有一個SD_STATUS(ACMD13)應用相關命令,如果在緊隨APP_CMD(CMD55)之后收到CMD13,它將被解釋為SD_STATUS(ACMD13);但是如果卡在緊隨APP_CMD(CMD55)之后收到CMD7,而這個卡沒有定義ACMD7,則它將被解釋為一個標准的CMD7(SELECT/DESELECT_CARD)命令。 
如果要使用生產廠商自定義的ACMD,SD卡主機需要做以下操作: 
1. 發送APP_CMD(CMD55)命令 ,卡送回響應給多媒體/SD卡模塊,指示設置了APP_CMD位並等待ACMD命令

2. 發送指定的ACMD ,卡送回響應給多媒體/SD卡模塊,指示設置了APP_CMD位,收到的命令已經正確地按照ACMD命令解析;如果發送了一個非ACMD命令,卡將按照普通的多媒體卡命令處理同時清除卡中狀態寄存器的APP_CMD位。如果發送了一個非法的命令(不管是ACMD還是CMD),將被按照標准的非法多媒體卡命令進行錯誤處理。
GEN_CMD命令的總線操作過程,與單數據塊讀寫命令(WRITE_BLOCK,CMD24或READ_SINGLE_BLOCK,CMD17)相同;這時命令的參數表示數據傳輸的方向而不是地址,數據塊具有用戶自定義的格式和意義。發送GEN_CMD(CMD56)命令之前,卡必須被選中(狀態機處於傳輸狀態),數據塊的長度由SET_BLOCKLEN(CMD16)定義。GEN_CMD(CMD56)命令的響應是R1b格式。


5. Card Initialization and Identification Process :




程序太多,不會寫,只能參考網上的。。。。。╮(╯▽╰)╭

 

 








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM