因爲一張SD卡要能讀寫,涉及到的技術有些多,我打算分如下幾篇博客html
【STM32】使用SDIO進行SD卡讀寫,包含文件管理FatFs(一)-初步認識SD卡git
【STM32】使用SDIO進行SD卡讀寫,包含文件管理FatFs(二)-瞭解SD總線,命令的相關介紹函數
【STM32】使用SDIO進行SD卡讀寫,包含文件管理FatFs(三)-SD卡的操做流程網站
【STM32】使用SDIO進行SD卡讀寫,包含文件管理FatFs(四)-介紹庫函數,獲取一些SD卡的信息spa
【STM32】使用SDIO進行SD卡讀寫,包含文件管理FatFs(五)-FatFs的介紹(暫定,待研究FatFs後,寫博客)htm
【STM32】使用SDIO進行SD卡讀寫,包含文件管理FatFs(六)-實現SD卡的讀取(暫定,完成第五篇博客後,填寫第六篇)blog
先介紹幾個協會的網站,裏面有相關的文件接口
多媒體卡協會網站:www.mmca.org(STM32F4的SDIO支持的一種通信,但不是本文的重點)圖片
SD卡協會網站:www.sdcard.orgget
CE-ATA:www.ce-ata.org(STM32F4的SDIO支持的一種通信,但不是本文的重點)
我會着重在SD卡和SDIO協議的部分,如下圖片截至SD卡協會網站
本來SD協議是用在存儲上的(圖片藍底處),後來擴展了一個叫SDIO的協議(全名:Secure Digital Input and Output)(圖片紫底紅框處)
這個協議屬於外設接口,使得它能鏈接一些外設,例如:GPS 相機 Wi-Fi 調頻廣播 以太網 條形碼讀卡器 藍牙,今後跳出存儲這個侷限
下面是幾種卡的類型(容量),配合上面圖片寫的圖標
另外,我沒能找到SDUC的SD卡
STM32F4裏,只支持SD 2.0協議,SD和SDHC屬於這個範疇,SDXC是4.0協議,因此不支持
另外SDHC卡,有些數據塊大小是512,有的是1024,STM32F4只支持讀取512大小的,意思是說,SDHC卡的一部分也不支持的
其餘相關的技術,能夠去SD卡協會網站查看
下面來講明一下SD卡的引腳
SD卡的讀取方式有兩種:SDIO、SPI
【SDIO模式】
CLK:時鐘,通訊過程須要的東西,沒這個東西,數據會不穩定
CMD:命令,可下達命令,例如讀取SD卡的信息,或是寫入數據等等
DAT0、一、二、3:數據線
VCC、VSS:電源和地
【SPI模式】
CLK:時鐘,理由同SDIO裏面的CLK
MOSI:命令或數據輸出到SD卡
MISO:SD卡傳輸數據到主機
CS:片選,選擇是否要操做當前的SD卡
SDIO的存儲速度會高於SPI,假設都是SD卡傳輸數據到主機
SPI只有MISO這1條數據線,而SDIO有4條數據線(固然,SDIO也能夠只使用1條數據線來傳輸)
另外,SDIO至關於總線,它能夠掛載不少SD卡,可是STM32F4只支持一張SD卡
在與SD卡操做的過程當中,會有兩種不一樣的操做頻率
第一種:識別SD卡階段的時鐘頻率FOD,最高爲400KHz
第二種:後續數據傳輸的時鐘頻率FPP,默認最高爲25MHz,還能夠透過寄存器修改,修改後最高爲50MHz
下面介紹SD卡的8個寄存器
CID:卡識別寄存器,一些製造商ID、版本、日期等相關訊息
RCA:相對卡地址寄存器,初始化時,動態由主機肯定,後續掛載在SDIO總線上時,透過RCA找到對應的SD卡來進行操做
DSR:驅動級寄存器,配置卡的輸出驅動
CSD:卡的特殊數據寄存器,SD卡的操做信息
SCR:SD配置寄存器,SD卡的特殊信息
OCR:操做條件寄存器,例如SD卡的電壓信息
SSR:SD狀態寄存器,SD卡專有的特徵信息
CSR:SD卡狀態寄存器,SD卡的狀態信息
這一章節先結束,下一章來講明命令(CMD)的部分