STM32之SD卡驅動(dòng)
只需要4個(gè)IO口即可外擴一個(gè)最大達32GB以上的外部存儲器,容量從幾十M到幾十G選擇尺度很大,更換也很方便,編程也簡(jiǎn)單,是單片機大容量外部存儲器的首選。
ALIENTKE 戰艦STM32開(kāi)發(fā)板自帶了標準的SD卡接口,可使用STM32自帶的SPI/SDIO接口驅動(dòng)(通過(guò)跳線(xiàn)帽選擇驅動(dòng)方式),本章我們使用SPI驅動(dòng),最高通信速度可達18Mbps,每秒可傳輸數據2M字節以上,對于一般應用足夠了。在本章中,我們將向大家介紹,如何在A(yíng)LIENTEK戰艦STM32開(kāi)發(fā)板上實(shí)現SD卡的讀取。本章分為如下幾個(gè)部分:
44.1 SD卡簡(jiǎn)介
44.2 硬件設計
44.3 軟件設計
44.4 下載驗證
44.1 SD卡簡(jiǎn)介
SD卡(Secure Digital Memory Card)中文翻譯為安全數碼卡,它是在MMC的基礎上發(fā)展而來(lái),是一種基于半導體快閃記憶器的新一代記憶設備,它被廣泛地于便攜式裝置上使用,例如數碼相機、個(gè)人數碼助理(PDA)和多媒體播放器等。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開(kāi)發(fā)研制。大小猶如一張郵票的SD記憶卡,重量只有2克,但卻擁有高記憶容量、快速數據傳輸率、極大的移動(dòng)靈活性以及很好的安全性。按容量分類(lèi),可以將SD卡分為3類(lèi):SD卡、SDHC卡、SDXC卡。如表44.1.1所示:
容量 | 命名 | 簡(jiǎn)稱(chēng) |
0~2G | Standard Capacity SD Memory Card | SDSC或SD |
2G~32G | High Capacity SD Memory Card | SDHC |
32G~2T | Extended Capacity SD Memory Card | SDXC |
表44.1.1 SD卡按容量分類(lèi)
SD卡和SDHC卡協(xié)議基本兼容,但是SDXC卡,同這兩者區別就比較大了,本章我們討論的主要是SD/SDHC卡(簡(jiǎn)稱(chēng)SD卡)。
SD卡一般支持2種操作模式:
1,SD卡模式(通過(guò)SDIO通信);
2,SPI模式;
主機可以選擇以上任意一種模式同SD卡通信,SD卡模式允許4線(xiàn)的高速數據傳輸。SPI模式允許簡(jiǎn)單的通過(guò)SPI接口來(lái)和SD卡通信,這種模式同SD卡模式相比就是喪失了速度。
SD卡的引腳排序如下圖44.1.1所示:

圖44.1.1 SD卡引腳排序圖
SD卡引腳功能描述如表45.1.2所示:

SD卡只能使用3.3V的IO電平,所以,MCU一定要能夠支持3.3V的IO端口輸出。注意:在SPI模式下,CS/MOSI/MISO/CLK都需要加10~100K左右的上拉電阻。
SD卡有5個(gè)寄存器,如表45.1.3所示:
名稱(chēng) | 寬度 | 描述 |
CID | 128 | 卡標識寄存器 |
RCA | 16 | 相對卡地址(Relative card address)寄存器:本地系統中卡的地址,動(dòng)態(tài)變化,在主機初始化的時(shí)候確定 *SPI模式中沒(méi)有 |
CSD | 128 | 卡描述數據:卡操作條件相關(guān)的信息數據 |
SCR | 64 | SD配置寄存器:SD卡特定信息數據 |
OCR | 32 | 操作條件寄存器 |
表45.1.3 SD卡相關(guān)寄存器
關(guān)于這些寄存器的詳細描述,請參考光盤(pán)相關(guān)SD卡資料。我們在這里就不描述了。接下來(lái),我們看看SD卡的命令格式,如表45.1.4所示:
字節1 | 字節2--5 | 字節6 | |||
7 | 6 | 5 | 31 | 7 | 0 |
0 | 1 | command | 命令參數 | CRC | 1 |
表45.1.4 SD卡命令格式
SD卡的指令由6個(gè)字節組成,字節1的最高2位固定為01,低6位為命令號(比如CMD16,為10000即16進(jìn)制的0X10,完整的CMD16,第一個(gè)字節為01010000,即0X10+0X40)。
字節2~5為命令參數,有些命令是沒(méi)有參數的。
字節6的高七位為CRC值,最低位恒定為1。
SD卡的命令總共有12類(lèi),分為Class0~Class11,本章,我們僅介紹幾個(gè)比較重要的命令,如表45.1.5所示:
命令 | 參數 | 回應 | 描述 |
CMD0(0X00) | NONE | R1 | 復位SD卡 |
CMD8(0X08) | VHS+Check pattern | R7 | 發(fā)送接口狀態(tài)命令 |
CMD9(0X09) | NONE | R1 | 讀取卡特定數據寄存器 |
CMD10(0X0A) | NONE | R1 | 讀取卡標志數據寄存器 |
CMD16(0X10) | 塊大小 | R1 | 設置塊大?。ㄗ止潝担?/div> |
CMD17(0X11) | 地址 | R1 | 讀取一個(gè)塊的數據 |
CMD24(0X18) | 地址 | R1 | 寫(xiě)入一個(gè)塊的數據 |
CMD41(0X29) | NONE | R3 | 發(fā)送給主機容量支持信息和激活 卡初始化過(guò)程 |
CMD55(0X37) | NONE | R1 | 告訴SD卡,下一個(gè)是特定應用命令 |
CMD58(0X3A) | NONE | R3 | 讀取OCR寄存器 |
表45.1.5 SD卡部分命令
上表中,大部分的命令是初始化的時(shí)候用的。表中的R1、R3和R7等是SD卡的回應,SD卡和單片機的通信采用發(fā)送應答機制,如圖45.1.2所示:

圖45.1.2 SD卡命令傳輸過(guò)程
R1響應格式 | ||||||||
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
含義 | 開(kāi)始位 始終為0 | 參數 錯誤 | 地址 錯誤 | 擦除序列 錯誤 | CRC錯誤 | 非法 命令 | 擦除 復位 | 閑置 狀態(tài) |
表45.1.6 R1響應各位描述
接著(zhù)我們看看SD卡的初始化,SD卡的典型初始化過(guò)程如下:
1、初始化與SD卡連接的硬件條件(MCU的SPI配置,IO口配置);
2、上電延時(shí)(>74個(gè)CLK);
3、復位卡(CMD0),進(jìn)入IDLE狀態(tài);
4、發(fā)送CMD8,檢查是否支持2.0協(xié)議;
5、根據不同協(xié)議檢查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等);
6、取消片選,發(fā)多8個(gè)CLK,結束初始化
這樣我們就完成了對SD卡的初始化,注意末尾發(fā)送的8個(gè)CLK是提供SD卡額外的時(shí)鐘,完成某些操作。通過(guò)SD卡初始化,我們可以知道SD卡的類(lèi)型(V1、V2、V2HC或者M(jìn)MC),在完成了初始化之后,就可以開(kāi)始讀寫(xiě)數據了。
SD卡讀取數據,這里通過(guò)CMD17來(lái)實(shí)現,具體過(guò)程如下:
1、發(fā)送CMD17;
2、接收卡響應R1;
3、接收數據起始令牌0XFE;
4、接收數據;
5、接收2個(gè)字節的CRC,如果不使用CRC,這兩個(gè)字節在讀取后可以丟掉。
6、禁止片選之后,發(fā)多8個(gè)CLK;
以上就是一個(gè)典型的讀取SD卡數據過(guò)程,SD卡的寫(xiě)于讀數據差不多,寫(xiě)數據通過(guò)CMD24來(lái)實(shí)現,具體過(guò)程如下:
1、發(fā)送CMD24;
2、接收卡響應R1;
3、發(fā)送寫(xiě)數據起始令牌0XFE;
4、發(fā)送數據;
5、發(fā)送2字節的偽CRC;
6、禁止片選之后,發(fā)多8個(gè)CLK;
以上就是一個(gè)典型的寫(xiě)SD卡過(guò)程。關(guān)于SD卡的介紹,我們就介紹到這里,更詳細的介紹請參考光盤(pán)SD卡的參考資料(SD卡2.0協(xié)議)。
44.2 硬件設計
本章實(shí)驗功能簡(jiǎn)介:開(kāi)機的時(shí)候先初始化SD卡,如果SD卡初始化完成,則提示LCD初始化成功。按下KEY0,讀取SD卡扇區0的數據,然后通過(guò)串口發(fā)送到電腦。如果沒(méi)初始化通過(guò),則在LCD上提示初始化失敗。 同樣用DS0來(lái)指示程序正在運行。
本實(shí)驗用到的硬件資源有:
1) 指示燈DS0
2) KEY0按鍵
3) 串口
4) TFTLCD模塊
5) SD卡
前面四部分,在之前的實(shí)例已經(jīng)介紹過(guò)了,這里我們介紹一下戰艦STM32開(kāi)發(fā)板板載的SD卡接口和STM32的連接關(guān)系,如圖44.2.1所示:


圖44.2.2 SD卡SPI方式硬件連接示意圖
關(guān)鍵詞:
STM32SD卡驅
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論