對於很多分佈系統或者大容量資料無損傳輸等應用來說,往往受限於匯流排頻寬和傳輸速率,無法及時將全部資訊傳遞到伺服器上,此時最佳的解決方案是本地流盤,然後一次性透過TCP/IP或者FTP等檔案協議傳輸至上位機。在嵌入式系統中,最常用到的本地儲存介質就是SD卡。
SD卡一般有9根據通訊線,支援SDIO和SPI兩種通訊方式。前者是專門的為SD卡開發的,只需要4根通訊線即可,速度和穩定性都要優於SPI,但在底層驅動相對比較複雜。在STM32中,STM32自帶的SPI的通訊速率事可達18Mbps,每秒可能傳輸2MB多的資料,也能滿足絕大多數應用的需要。
本次實驗,將釆用STM自帶的SPI總來訪問外部SD卡。
SD卡的容量一般都在1G以上,而且是以扇區來進行管理的,即每次讀寫都要找到該物理地址所處的扇區。
本次實驗重點介紹如何訪問SD卡扇區。
實驗預期效果:SD卡初始化成功後,會返回SD卡型別識別符,接著會返回以MB為單位的SD卡容量;然後寫入一段指定長度的字串至SD卡的扇區0,寫入成功後,前面板會有相應的資訊提示;讀取成功後,也有相應的資訊提示。
一, 程式步驟:
1, 初始化SPI2
2, 初始化SD卡
3, 獲取SD卡容量大小
4, 寫入字串串至扇區0
5, 讀取扇區0中的字串
二, 程式編寫:
硬體連線圖
1, 初始化SPI2
定義各IO口
2, 初始化SD卡
3, 獲取SD卡容量大小
4, 寫入字串串至扇區0
5, 讀取扇區0中的字串
再加個while迴圈,不斷更新
完成程式的編寫
3, 編譯,下載
程式執行狀態,觀察前面板。
插入一張4GB的SD卡,顯示的資訊
拔出SD卡後,顯示的資訊:
再重新插入SD卡,顯示的資訊: