STM32(二十一)SDIO-SD卡讀寫測試


一、SDIO介紹

  

  SD卡(Secure Digital Memory Card)在我們生活中已經非常普遍了,控制器對SD卡進行讀寫通信操作一般有兩種通信接口可選,一種是SPI 接口,另外一種就是SDIO接口。

  SDIO全稱是安全數字輸入/輸出接口多媒體卡(MMC)、SD卡、SD I/O卡都有SDIO接口。STM32F10x系列控制器有一個SDIO主機接口,它可以與MMC卡、SD卡、SD I/O卡以及CE-ATA設備進行數據傳輸。MMC卡可以說是SD卡的前身,現階段已經用得很少。SDI/O卡本身不是用於存儲的卡,它是指利用SDIO傳輸協議的一-種外設。比如Wi-Fi Card,它主要是提供Wi-Fi功能,有些Wi-Fi模塊是使用串口或者SPI接口進行通信的,但Wi-FiSDIO Card是使用SDIO接口進行通信的。並且一般設計SD I/O卡是可以插入到SD的插槽。CE-ATA是專為輕薄筆記本硬盤設計的硬盤高速通訊接口。

 

 

 

 

 

二、SD卡物理結構

 

  SD卡總共有8個寄存器,用於設定或表示SD卡信息,參考表36-1。 這些寄存器只能通過對應的命令訪問,對SD卡進行控制操作並不是像操作控制器GPIO相關寄存器那樣一次讀寫一個寄存器的,它是通過命令來控制,SDIO 定義了64個命令,每個命令都有特殊意義,可以實現某一特定功能,SD卡接收到命令后,根據命令要求對SD卡內部寄存器進行修改,程序控制中只需要發送組合命令就可以實現SD卡的控制以及讀寫操作。

SD卡使用9-pin 接口通信,其中3根電源線、1 根時鍾線、1 根命令線和4根數據線, .
具體說明如”下:

  • CLK:時鍾線,由SDIO主機產生,即由STM32控制器輸出;
  • CMD:命令控制線,SDIO主機通過該線發送命令控制SD卡,如果命令要求SD卡提供應答(響應),SD卡也是通過該線傳輸應答信息;
  • D0-3: 數據線,傳輸讀寫數據; SD卡可將D0拉低表示忙狀態;
  • VDD、VSS1、 VSS2: 電源和地信號。

  SDIO 不管是從主機控制器向SD卡傳輸,還是SD卡向主機控制器傳輸都只以CLK時鍾線的上升沿為有效。SD卡操作過程會使用兩種不同頻率的時鍾同步數據,一個是識別卡階段時鍾頻率FOD,最高為400kHz,另外一個是數據傳輸模式下時鍾頻率FPP,默認最高為25MHz,如果通過相關寄存器配置使SDIO工作在高速模式,此時數據傳輸模式最高頻率為50MHz。

三、總線協議

SD總線通信是基於命令和數據傳輸的。通訊由一個起始位(“0”), 由一個停止位(“1”)終止。SD通信一般是主機發送一個命令(Command),從設備在接收到命令后作出響

應(Response),如有需要會有數據(Data)傳輸參與。
  SD總線的基本交互是命令與響應交互,見圖36-4。

 

 

 SD數據是以塊(Black)形式傳輸的,SDHC 卡數據塊長度一般為512字節,數據可以從主機到卡,也可以是從卡到主機。數據塊需要CRC位保證數據傳輸成功。CRC位由SD卡系統硬件生成。STM32控制器可以控制使用單線或4線傳輸,本開發板設計使用4線傳輸。

  圖36-5為主機向SD卡寫入數據塊操作示意。

 

 

   SD數據傳輸支持單塊多塊讀寫,它們分別對應不同的操作命令,多塊寫入還需要使用命令停止整個寫入操作。數據寫入前需要檢測SD卡忙狀態,因為SD卡在接收到數據編程到存儲區過程需要一 定操作時間。SD卡忙狀態通過把D0線拉低表示。數據塊讀操作與之類似,只是無需忙狀態檢測。

 四、SD卡的操作模式

  SD卡系統(包括主機和SD卡)定義了兩種操作模式:卡識別模式數據傳輸模式。在系統復位后,主機處於卡識別模式,尋找總線上可用的SDIO設備;同時,SD卡也處於卡識別模式,直到被主機識別到,即當SD卡接收到SEND_ RCA(CMD3)命令后,SD卡就會進入數據傳輸模式,而主機在總線上所有卡被識別后也進入數據傳輸模式。在每個操作模式下,SD卡都有幾種狀態,參考表36-4,通過命令控制實現卡狀態的切換。

 

 

 1、卡識別過程
  • 主機會復位所有處於“卡識別模式”的SD卡,確認其工作電壓范圍。
  • 識別SD卡類型,並且獲取SD卡的相對地址(卡相對地址較短,便於尋址)。
  • 在卡識別過程中,要求SD卡工作在識別時鍾頻率FOD的狀態下。

卡識別模式下SD卡狀態轉換如圖36-9。

 

 

 2、數據傳輸過程

只有SD卡系統處於數據傳輸模式下才可以進行數據讀寫操作。數據傳輸模式下可以將主機SD時鍾頻率設置為FPP,默認最高為25MHz,頻率切換可以通過CMD4命令來實現。

數據傳輸模式下,SD卡狀態轉換過程見圖36-10。

 

 

 五、SDIO功能框圖

 

 

 

  • SDIO使用兩個時鍾信號,一個是SDIO適配器時鍾(SDIOCLK=HCLK=72MHz),另外一個是AHB總線時鍾的二分頻(HCLK/2,一般為36MHz)。
  • 適配器寄存器和FIFO 使用.AHB總線一側的時鍾(HCLK/2)。
  • 控制單元、命令通道和數據通道使用SDIO適配器一側的時鍾(SDIOCLK)。.

SDIO_ CK是SDIO 接口與SD卡用於同步的時鍾信號。它使用SDIOCLK 作為SDIO_ CK的時鍾來源,可以通過設置BYPASS 模式直接得到,這時SDIO CK =SDIOCLK=HCLK。若禁止BYPASS模式,可以通過配置時鍾寄存器的CLKDIV位控制分頻因子,即SDIO_ CK=SDIOCLK/ (2+CLKDIV) = HCLK/ (2+CLKDIV)。配置時鍾時要注意,SD卡普遍要求SDIO_CK時鍾頻率不能超過25MHz。STM32控制器的SDIO是針對MMC卡和SD卡的主設備,所以預留有8根數據線,對於SD卡最多用四根數據線。

SDIO適配器是SD卡系統主機部分,是STM32控制器與SD卡數據通信中間設備。

  


免責聲明!

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



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