嵌入式系统作业12(SD卡读取)
掌握 SD 卡協議原理,用 STM32F103 完成對 SD 卡的數據讀取(FAT文件模式)。
目錄
- 一、SD 卡協議
- 1. SD 卡
- 概述
- 2. SD 卡總線
- 協議
- 命令
- 響應
- 3.STM32 的 SDIO 功能
- 二 、SD 卡的數據讀取(工程、代碼)
- 1. 創建項目
- 2.代碼文件
- 三、SD卡數據讀取(電路,實現)
- 1.電路連接
- 2. 注意事項
- 3.結果展示
- 四、總結
一、SD 卡協議
1. SD 卡
SD存儲卡是一種基于半導體快閃記憶器的新一代記憶設備,由于它體積小、數據傳輸速度快、可熱插拔等優良的特性,被廣泛地于便攜式裝置上使用,例如數碼相機、平板電腦和多媒體播放器等。
概述
SD存儲卡(Secure Digital Memory Card)是一種基于半導體快閃存儲器的新一代高速存儲設備。SD存儲卡的技術是從MMC卡(MultiMedia Card格式上發展而來,在兼容SD存儲卡基礎上發展了SDIO(SD Input/ Output)卡,此兼容性包括機械,電子,電力,信號和軟件,通常將SD、SDIO卡俗稱SD存儲卡。
SD卡具有高記憶容量、快速數據傳輸率、極大的移動靈活性以及很好的安全性,它被廣泛地應用于便攜式裝置上,例如數碼相機、平板電腦和多媒體播放器等。
SD卡的結構能保證數字文件傳送的安全性,也很容易重新格式化,所以有著廣泛的應用領域。音樂、電影等多媒體文件都可以方便地保存到SD卡中。目前市場上SD卡的品牌很多諸如:SANDISK、Kingmax、Panasonic和Kingston。
SD卡作為一種新型的存儲設備,具有以下特點:
**●高存儲容量:**最常用的容量:8GB、16GB、32GB、128GB、256GB等。
**●內置加密技術:**適應基于SDMI協議的著作版權保護功能。
**●高速數據傳送:**最大讀寫速率為100MB/s。
**●體積輕小:**便于攜帶,具有很強的抗沖擊能力。
- SDIO 全稱是安全數字輸入/輸出接口,多媒體卡(MMC)、SD 卡、SD I/O 卡都有 SDIO 接口。
- STM32F10x 系列控制器有一個 SDIO 主機接口,它可以與 MMC 卡、SD 卡、SD I/O 卡以及CE-ATA 設備進行數據傳輸。MMC 卡可以說是 SD 卡的前身,現階段已經用得很少。
- SD I/O 卡本身不是用于存儲的卡,它是指利用 SDIO 傳輸協議的一種外設。比如 Wi-Fi Card,它主要是提供 Wi-Fi 功能,有些 Wi-Fi 模塊是使用串口或者 SPI 接口進行通信的,但 Wi-Fi SDIO Card 是使用 SDIO 接口進行通信的。并且一般設計 SD I/O 卡是可以插入到 SD 的插槽。
- CE-ATA 是專為輕薄筆記本硬盤設計的硬盤高速通訊接口。
2. SD 卡總線
SD 卡一般都支持 SDIO 和 SPI 這兩種接口。
STM32F42x 系列控制器的 SDIO 是不支持 SPI 通信模式的,如果需要用到 SPI 通信只能使用 SPI 外設。
具體的 SPI 通信方式可以參看我之前的博客:基于 SPI 協議用 0.96 寸 OLED 顯示漢字及溫濕度數據
SD 卡使用 9-pin 接口通信,其中 3 根電源線、1 根時鐘線、1 根命令線和 4 根數據線。
SDIO 的通信時序要簡單許多,SDIO 不管是從主機控制器向 SD 卡傳輸,還是 SD 卡向主機控制器傳輸都只以 CLK 時鐘線的上升沿為有效。
協議
通訊由一個起始位(“0”),由一個停止位(“1”)終止。SD 通信一般是主機發送一個命令(Command),從設備在接收到命令后作出響應(Response),如有需要會有數據(Data)傳輸參與。
SD 總線的基本交互是命令與響應交互。
SD 數據是以塊(Black)形式傳輸的,SDHC 卡數據塊長度一般為 512 字節,數據可以從主機到卡,也可以是從卡到主機。數據塊需要 CRC 位來保證數據傳輸成功。CRC 位由 SD 卡系統硬件生成。STM32 控制器可以控制使用單線或 4 線傳輸。
主機向 SD 卡寫入數據塊操作示意如下:
命令
SD 命令由***主機***發出,以廣播命令和尋址命令為例,廣播命令是針對與 SD 主機總線連接的所有從設備發送的,尋址命令是指定某個地址設備進行命令傳輸。
SD 命令格式固定為 48bit,都是通過 CMD 線連續傳輸的(數據線不參與)
響應
響應由*** SD 卡向主機***發出,部分命令要求 SD 卡作出響應,這些響應多用于反饋 SD 卡的狀態。
SDIO 總共有 7 個響應類型(代號:R1~R7),其中 SD 卡沒有 R4、R5 類型響應。特定的命令對應有特定的響應類型,比如當主機發送 CMD3 命令時,可以得到響應 R6。與命令一樣,SD 卡的響應也是通過 CMD 線連續傳輸的。根據響應內容大小可以分為短響應和長響應。短響應是 48bit 長度,只有 R2 類型是長響應,其長度為 136bit。
3.STM32 的 SDIO 功能
STM32 控制器有一個 SDIO,由兩部分組成:SDIO 適配器和 AHB 接口。
- SDIO 適配器提供 SDIO 主機功能,可以提供 SD 時鐘、發送命令和進行數據傳輸。
- AHB 接口用于控制器訪問 SDIO 適配器寄存器并且可以產生中斷和 DMA 請求信號
二 、SD 卡的數據讀取(工程、代碼)
1. 創建項目
其實直接打開壓縮文件的工程,然后生成代碼就行了
(下面還是加了幾張工程截圖)
配置 PA4 引腳為 GPIO_Output,并命名為 SD_CS
2.代碼文件
代碼網盤鏈接
**提取碼:e63q **
修改main.c 中 while循環
三、SD卡數據讀取(電路,實現)
1.電路連接
| PA4 | CS |
| PA5 | SCK |
| PA6 | MISO |
| PA7 | MOSI |
按如圖所示找到對應引腳進行連接
2. 注意事項
在讀卡前先格式化一下選擇FAT模式
不要在運行過程中拔卡
否者會失敗
- 注意:
SD 卡操作需要時間,得等一會,如果串口一直沒有回應,可以試試以下操作:
可以將SD卡換成內存小點的 4G/8G
將最小核心板連接 5V,為其供給高電壓
盡量減少連線,或者使用短線連接
3.結果展示
編譯燒錄后,打開串口調試助手,可以看到:
然后會顯示while
此時將SD卡從芯片中拔出,插入U盤,在電腦中可以看見有一個txt文件,打開可以看見。
四、總結
這次實驗不是很好做,雖然能夠成功燒錄,但是實驗效果不容易出來,串口調試助手一直沒顯示,多嘗試一下,看看有沒有線沒有連穩,或者芯片接觸 不良。有時候是串口反應較慢,耐心等待一會或許會有結果讀出。
總結
以上是生活随笔為你收集整理的嵌入式系统作业12(SD卡读取)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c2c运营流程图_电商运营流程图模板分享
- 下一篇: 最简单的WIN7内核PE系统的U盘安装方