簡介
AT32 MCU的主機模塊(SDIO)在AHB外設總線和多媒體卡(MMC)、SD存儲卡、SDIO卡間提供了操作接口。SD儲存卡和SDIO卡的系統規格書可以通過SD卡協議網站。多媒體卡系統規格書由MMCA技術委員會發布,可以在多媒體卡協會的網站上獲得。1、SD Card:SDSC/SDHC/SDXC,支持的卡最大容量不同,支持1bit或4bit傳輸,0-25MHz或0-50MHz的傳輸模式。2、MMC Card:支持1bit,4bit或8bit傳輸,0-20MHz,0-26MHz或0-52MHz的傳輸模式。3、SDIO Card:一種使用SD接口協議,支持多功能的卡,比如wifi卡,GPS卡,藍牙卡等等。
SDIO主要結構
SDIO包含4個部分:1、SDIO適配器模塊:由控制單元、命令單元和數據單元所組成,實現所有MMC/SD/SDIO卡的相關功能,如時鐘的產生、命令和數據的傳送
- 控制單元:管理并產生時鐘信號
- 命令單元:管理命令的傳輸
- 數據單元:管理數據的傳輸
2、AHB接口:產生中斷和DMA請求信號3、適配器寄存器:SDIO寄存器4、BUF:用于數據傳輸校準功能圖1. SDIO框圖
- 所有數據線配置為復用推挽模式。SDIO_CMD和SDIO_D[7:0]可雙向通信,應外接上拉電阻或內部上拉。
- SDIO使用一個時鐘信號:SDIO適配器時鐘(SDIOCLK=AHB總線時鐘(HCLK))。
- 復位后默認情況下SDIO_D0用于數據傳輸。初始化后主機可以改變數據總線的寬度。可選1bit(SDIO_D0)、4bit(SDIO_D[3:0])、8bit(SDIO_D[7:0])三種數據總線的寬度。
表1. SDIO外部引腳說明
SDIO總線通信
總線上的通信是通過傳送命令和數據實現。
1、在多媒體卡/SD/SDIO總線上的基本操作是命令/響應結構。2、在SD/SDIO Card上傳送的數據是只能以數據塊的形式傳輸;在MMC Card上傳送的數據是以數據塊或數據流的形式傳輸。圖2. SDIO命令“無響應”和“有響應”操作圖3. SDIO(多)數據塊讀操作
圖4. SDIO(多)數據塊寫操作
注意:當有Busy(繁忙)信號時,SDIO(SDIO_D0被拉低)將不會發送任何數據。圖5. SDIO MMC卡數據流讀操作
圖6. SDIO MMC卡數據流寫操作
SDIO功能
SDIO時鐘
1)SDIO_CK是MCU端輸出到卡的時鐘:每個時鐘周期在命令和數據線上傳輸1bit命令或數據。2)SDIO_CK信號的兩下降沿之間為一個時鐘周期,硬件在上升沿捕獲數據。3)當啟動了省電模式并且卡總線處于空閑狀態(命令通道和數據通道子單元進入空閑階段后的8個時鐘周期)。圖7. 開啟省電模式的命令/響應波形圖4)支持多達10位分頻系數,也就是1024級分頻,此時可得SDIO_CK頻率=SDIOCLK/[CLKPSC[9:0]+2]。5)可以使用bypass模式,輸出一個不分頻的時鐘,SDIO_CK頻率=SDIOCLK。6)硬件流控模式,可在數據傳輸即將發生上溢或者下溢的時候,通過停止SDIO_CK防止溢出。7)可以配置CLKEDG bit來選擇時鐘的產生。SDIO_CK可實現略微偏移(半個SDIOCLK)。8)應用時,SD卡初始化的時候SDIO_CK不能大于400kHZ,之后的時鐘頻率由對應卡型號限制。
SDIO時鐘配置相關函數
配置SDIO時鐘
使能省電模式
使能SDIO時鐘bypass模式
使能硬件流控模式
設置SDIO電源
使能SDIO時鐘輸出
SDIO時鐘初始化舉例:
命令通道
1)命令通道單元通過SDIO_CMD向卡發送命令并從卡接收響應。2)命令超時,即等待卡響應的時間,固定為64個SDIO_CK時鐘周期。這個由通信協議決定,固定不可配置。3)可以置位WAITPEND bit,命令只有在數據傳輸完之后才由硬件自動發出,而不是立刻發出。多用于流數據的傳輸模式,目的是保證中止命令可以精準地停止卡的數據傳輸。表2. 命令格式4)根據該命令的需要,可配置等待響應位(Wait for response bits)來指示CPSM是否需要等待響應。具體可配置為:1、無響應;2、短響應;3、長響應。表3. 短響應格式
表4. 長響應格式
5)當設置SDIO_CMDCTRL寄存器的CCSMEN位,控制器開始發送命令。命令發送完成時,命令通道狀態機(CCSM)設置命令通道狀態標志并在不需要響應時進入空閑狀態。當收到響應后,接收到的CRC碼將會與內部產生的CRC碼比較,然后設置相應的狀態標志。圖8. 命令通道狀態機(CCSM)
6)當CMDRSPCMPL、CMDFAIL、CMDCMPL、CMDTIMEOUT置位后,命令通道狀態機(CCSM)都會回到Idle狀態。而DOCMD置位時,CPSM處于除Idle以外的任何狀態。表5. 命令通道標志
命令通道配置相關函數配置命令通道狀態機
使能命令通道狀態機
命令通道初始化舉例:
數據通道
1)數據通道單元通過SDIO_D[7:0]在主機與卡之間傳輸數據。圖9. 數據通道狀態機(DCSM)2)數據BUF(先進先出)子單元是一個具有發送和接收單元的數據緩沖區。3)BUF包含一個每字32位寬、共32個字的數據緩沖區,共128Byte。表6. 數據令牌格式
4)DOTX和DORX由數據通道單元設置而且是互斥的:
- 當DOTX標志有效時,BUF代表發送數據緩沖區。(DPSM處于Wait_R或者Receive狀態)
- 當DORX標志有效時,BUF代表接收數據緩沖區。(DPSM處于Wait_S或者Send狀態)
表7. 發送BUF狀態標志表8. 接收BUF狀態標志
SDIO_D[7:0]時序1)在塊模式下,發送完數據后,卡會返回一個確認CRC的序列,數據通道狀態機(DCSM)在等待“這個序列和Busy結束”時有超時控制,超時時間由SDIO數據定時器寄存器(SDIO_DTTMR)設置。2)卡端返回的CRC status(5bit)只會發送在SDIO_D0上,卡端收到正確的數據(CRC正確)后發出的序列為“00101”,若是錯誤的數據(CRC錯誤)的序列為“01011”。3)數據通道狀態機(DCSM)在WAIT_R等待接收數據時也有超時控制,超時時間也由SDIO數據定時器寄存器(SDIO_DTTMR)設置。4)在塊模式下的數據傳輸總個數一定要是block size的整數倍。當一個塊發送完后需要收到“CRC序列和Busy結束”時,硬件才會發送下一個數據塊。在流模式下不需設定blocksize的大小。圖10. 1bit數據傳輸方式圖11. 4bit數據傳輸方式
圖12. 8bit數據傳輸方式
數據通道配置相關函數配置數據通道狀態機
使能數據通道狀態機
設置數據總線寬度
數據通道初始化舉例:
SDIO AHB接口
1)AHB接口產生中斷和DMA請求,并訪問SDIO接口寄存器和數據BUF。它包含一個數據通道、寄存器譯碼器和中斷/DMA控制邏輯。2)SDIO中斷:當至少有一個選中的狀態標志為高時,中斷控制邏輯產生中斷請求。中斷屏蔽寄存器用于選擇可以產生中斷的條件,如果設置了相應的屏蔽標志位,則對應的狀態標志可以產生中斷。表9. SDIO中斷屏蔽寄存器3)DMA接口:DMA主要用于在SDIO BUF和Memory之間傳輸數據。
- BUF在接收數據時,RXBUFH標志作為DMA接收請求。
- BUF在發送數據時,TXBUFH標志作為DMA發送請求。
SDIO中斷/DMA配置相關函數
SDIO中斷配置函數
SDIO DMA使能函數
使能SDIO DMA接收數據舉例:
數據傳輸模式
當SD/MMC卡需要讀/寫數據時,可以配置、使能SDIO主機的數據通道后,通過PIO模式或DMA模式來讀/寫SDIO的數據BUF的方式實現。
PIO模式
SDIO的數據BUF共128字節,讀/寫數據共用。根據SDIO主機數據通道所配置的傳送方向來判斷讀或寫數據BUF。在讀取數據BUF接收數據時,用戶查詢SDIO_STS寄存器的RXBUFH標志位,如置位可讀取8字節的數據,最后再查詢RXBUF標志位,以讀完剩余小于8字節的未讀數據。在寫入數據BUF發送數據時,用戶查詢SDIO_STS寄存器的TXBUFH標志位,如置位可寫入最多8字節的數據,直至寫完所有待發送的數據。當在PIO模式下運行時,用戶都必須確保輪詢狀態。
DMA模式
DMA模式是訪問數據BUF的另一種選擇。使用DMA控制器來代替CPU對數據BUF的訪問,可以節省CPU運行的時間。使用DMA控制器之前,要先使能SDIO的DMA模式,再去設置DMA控制器的功能,最后使能與數據BUF讀或寫相關的中斷,用以判斷數據BUF讀/寫是否完成,是否有數據校驗錯誤等。控制方式和范例可以參照BSP里的demo。SDIO用DMA模式讀或寫數據BUF時,只能以WORD為最小傳輸單位。DMA的長度需換算成WORD單位,數據寬度也必須選擇WORD。DMA模式相關配置函數SDIO的DMA模式使能SDIO的中斷使能
SDIO主機接口初始化
初始化SDIO主機
這部分介紹了如何去初始化SD/MMC主機接口來建立命令通道和數據通道去初始化 SD/MMC卡。圖13. 初始化SD/MMC主機接口流程圖時鐘配置SDIO使用一個時鐘信號:SDIO適配器時鐘(SDIOCLK=AHB總線時鐘(HCLK))。SDIO_CK的時鐘配置對于SD/MMC卡初始化配置時,該時鐘范圍在100到400KHz。
SD卡初始化
SD卡上電和初始化的流程可參考協議”SD Physical Layer Specification Version 2.00”來實現,并由此來配置命令通道和數據通道去識別和初始化SD卡。圖14. SD卡識別和初始化流程圖SD卡的上電和初始化發送CMD0:軟件復位命令,將卡置于空閑狀態。發送CMD8:根據卡端的響應識別SD卡的版本型號和支持的電壓范圍。
- 如果卡端回復了響應,這說明是V2.00或更新的SD卡。再判斷響應是否有效,如響應無效,則支持的電壓范圍不兼容;如有效,則支持的電壓范圍是兼容的。
- 如果卡端沒有回復響應。則說明是V2.00或更新的SD卡(沒有匹配支持的電壓),或是V1.X的SD卡,或是沒有連接SD卡。
發送ACMD41:獲取SD卡的OCR(Operation Conditions Register)。
- 讀取OCR中的Busy(Card power up status)bit,判斷SD卡的上電過程是否完成,直到該位置1說明上電完成。
- 讀取OCR中的CCS(Card Capacity Status)bit,判斷該卡是高容量或是標準容量的V2.00的SD卡。
SD卡的識別過程發送CMD2:獲取SD卡的CID(Card IDentification)Register。發送CMD3:獲取SD卡的相對地址。發送CMD9:獲取SD卡的CSD(Card Specific Data)Register。配置SD卡的數據總線寬度1)發送ACMD6:改變SD卡的數據總線寬度(可支持1-bit或4-bit線寬)2)配置SDIO主機的數據總線寬度線寬。總線寬度設置函數
配置SD卡數據總線寬度舉例:
MMC卡初始化
MMC卡上電和初始化的流程可參考協議”MultiMediaCard (MMC) Electrical Standard(MMCA, 4.2)”來實現,并由此來配置命令通道和數據通道去識別和初始化MMC卡。圖15. MMC卡識別和初始化流程圖MMC卡的上電和初始化發送CMD0:軟件復位命令,將卡置于空閑狀態。發送CMD1:獲取MMC卡的OCR(Operation Conditions Register)。
- 讀取OCR中的Busy(Card power up status)bit,判斷MMC卡的上電過程是否完成,直到該位置1說明上電完成。
MMC卡的識別過程發送CMD2:獲取MMC卡的CID(Card IDentification)Register。發送CMD3:設置MMC卡的相對地址。發送CMD9:獲取MMC卡的CSD(Card Specific Data)Register。配置MMC卡的數據總線寬度1)發送CMD6:改變MMC卡的數據總線寬度(可支持1-bit或4-bit或8-bit線寬)2)配置SDIO主機的數據總線寬度線寬。總線寬度設置函數
配置MMC卡數據總線寬度舉例:
SDIO主機接口讀/寫 SD/MMC卡
s
讀/寫SD卡
在讀/寫SD卡時,只能以數據塊的方式進行讀/寫。當SD卡上電并初始化完成,由空閑狀態進入傳輸狀態后,就可以進行SD卡的讀/寫操作。圖16. SD卡狀態圖(數據傳輸模式)在初始化完成后,SD卡進入Stand-by狀態,需發送CMD7根據相對地址去選中SD卡,此時可進入到transfer狀態,便可以進行SD卡的讀/寫操作。
發送CMD13:獲取SD卡狀態。
發送CMD16:設置SD卡單塊的大小。下面的命令是用于讀/寫單塊或多塊的數據:
- CMD1:讀單塊數據。
- CMD18:讀多塊數據。
- CMD23:寫單塊數據。
- CMD24:寫多塊數據。
讀/寫MMC卡
在讀/寫MMC卡時,可以以數據塊或數據流的方式進行讀/寫。當MMC卡上電并初始化完成,由空閑狀態進入傳輸狀態后,就可以進行MMC卡的讀/寫操作。圖17. MMC卡狀態圖(數據傳輸模式)在初始化完成后,MMC卡進入Stand-by狀態,需發送CMD7根據相對地址去選中MMC卡,此時可進入到transfer狀態,便可以進行MMC卡的讀/寫操作。發送CMD13:獲取MMC卡狀態。發送CMD16:設置MMC卡單塊的大小。
下面的命令是用于讀/寫單塊或多塊的數據:
- CMD1:讀單塊數據。
- CMD18:讀多塊數據。
- CMD23:寫單塊數據。
- CMD24:寫多塊數據。
下面的命令是用于讀/寫數據流:
- CMD11:讀數據流。
- CMD20:寫數據流。
讀/寫 SD/MMC卡 案例
下圖展示了讀/寫SD/MMC卡案例的流程圖。圖18. 讀/寫SD/MMC卡案例
SDIO主機讀寫基于 SD/MMC卡的FATFS文件
s在SD/MMC卡上裝載FATFS文件系統,文件能被傳送,可使用PIO或DMA的傳輸模式。后面有案例會具體描述如何去創建、寫入然后讀取一個文件在SD/MMC卡上。
將文件系統導入工程文件
在案例中,我們需要導入FATFS文件系統的API層和硬件層,并根據具體的存儲介質來修改硬件層。通過”ffconf.h”配置FatFs的相關功能(可裁剪),以滿足應用的需要。圖19. FATFS文件系統相關文件
FATFS文件系統案例
下圖展示了FATFS文件系統案例的流程圖。圖20. FATFS文件系統案例PS.
-
mcu
+關注
關注
146文章
17841瀏覽量
360463 -
AT32
+關注
關注
1文章
121瀏覽量
2578
發布評論請先 登錄
首日速遞 | 雅特力閃耀2025慕尼黑上海電子展,全方位展現智能“芯”實力

雅特力AT32 OTGHS應用筆記

雅特力AT32F402/F405入門使用指南

雅特力AT32 MCU賦能低空經濟新生態,推動無人機應用創新發展

雅特力AT32 Workbench煥“芯”升級!引入Middleware助力開發高效提速

雅特力發布高性能電機控制專用MCU
STM32轉AT32代碼轉換

AT32講堂088 | 雅特力AT32F402/F405時鐘配置

AT32講堂087 | 雅特力AT32 IDE快速入門指南

基于雅特力AT32 MCU的洗衣機電機控制驅動方案,解鎖智能家居新體驗

雅特力AT32 MCU的隨機數生成

AT32講堂085 | 雅特力AT32 MCU HICK時鐘校準

雅特力電機應用快速入門指南

雅特力攜多款AT32 MCU新品與應用方案亮相2024慕尼黑上海電子展

評論