新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32之SD卡驅(qū)動(dòng)

STM32之SD卡驅(qū)動(dòng)

作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
很多單片機(jī)系統(tǒng)都需要大容量存儲(chǔ)設(shè)備,以存儲(chǔ)數(shù)據(jù)。目前常用的有U盤,F(xiàn)LASH芯片,SD卡等。他們各有優(yōu)點(diǎn),綜合比較,最適合單片機(jī)系統(tǒng)的莫過于SD卡了,它不僅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移動(dòng),并且有幾種體積的尺寸可供選擇(標(biāo)準(zhǔn)的SD卡尺寸,以及TF卡尺寸等),能滿足不同應(yīng)用的要求。
只需要4個(gè)IO口即可外擴(kuò)一個(gè)最大達(dá)32GB以上的外部存儲(chǔ)器,容量從幾十M到幾十G選擇尺度很大,更換也很方便,編程也簡(jiǎn)單,是單片機(jī)大容量外部存儲(chǔ)器的首選。
ALIENTKE戰(zhàn)艦STM32開發(fā)板自帶了標(biāo)準(zhǔn)的SD卡接口,可使用STM32自帶的SPI/SDIO接口驅(qū)動(dòng)(通過跳線帽選擇驅(qū)動(dòng)方式),本章我們使用SPI驅(qū)動(dòng),最高通信速度可達(dá)18Mbps,每秒可傳輸數(shù)據(jù)2M字節(jié)以上,對(duì)于一般應(yīng)用足夠了。在本章中,我們將向大家介紹,如何在ALIENTEK戰(zhàn)艦STM32開發(fā)板上實(shí)現(xiàn)SD卡的讀取。本章分為如下幾個(gè)部分:
44.1 SD卡簡(jiǎn)介
44.2硬件設(shè)計(jì)
44.3軟件設(shè)計(jì)
44.4下載驗(yàn)證

44.1 SD卡簡(jiǎn)介
SD卡(Secure Digital Memory Card)中文翻譯為安全數(shù)碼卡,它是在MMC的基礎(chǔ)上發(fā)展而來,是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,它被廣泛地于便攜式裝置上使用,例如數(shù)碼相機(jī)、個(gè)人數(shù)碼助理(PDA)和多媒體播放器等。SD卡由日本松下、東芝及美國(guó)SanDisk公司于1999年8月共同開發(fā)研制。大小猶如一張郵票的SD記憶卡,重量只有2克,但卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動(dòng)靈活性以及很好的安全性。按容量分類,可以將SD卡分為3類:SD卡、SDHC卡、SDXC卡。如表44.1.1所示:
容量
命名
簡(jiǎn)稱
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卡按容量分類
SD卡和SDHC卡協(xié)議基本兼容,但是SDXC卡,同這兩者區(qū)別就比較大了,本章我們討論的主要是SD/SDHC卡(簡(jiǎn)稱SD卡)。
SD卡一般支持2種操作模式:
1,SD卡模式(通過SDIO通信);
2,SPI模式;
主機(jī)可以選擇以上任意一種模式同SD卡通信,SD卡模式允許4線的高速數(shù)據(jù)傳輸。SPI模式允許簡(jiǎn)單的通過SPI接口來和SD卡通信,這種模式同SD卡模式相比就是喪失了速度。
SD卡的引腳排序如下圖44.1.1所示:
圖44.1.1 SD卡引腳排序圖
SD卡引腳功能描述如表45.1.2所示:
表45.1.2 SD卡引腳功能表
SD卡只能使用3.3V的IO電平,所以,MCU一定要能夠支持3.3V的IO端口輸出。注意:在SPI模式下,CS/MOSI/MISO/CLK都需要加10~100K左右的上拉電阻。
SD卡有5個(gè)寄存器,如表45.1.3所示:
名稱
寬度
描述
CID
128
卡標(biāo)識(shí)寄存器
RCA
16
相對(duì)卡地址(Relative card address)寄存器:本地系統(tǒng)中卡的地址,動(dòng)態(tài)變化,在主機(jī)初始化的時(shí)候確定
*SPI模式中沒有
CSD
128
卡描述數(shù)據(jù):卡操作條件相關(guān)的信息數(shù)據(jù)
SCR
64
SD配置寄存器:SD卡特定信息數(shù)據(jù)
OCR
32
操作條件寄存器
表45.1.3 SD卡相關(guān)寄存器
關(guān)于這些寄存器的詳細(xì)描述,請(qǐng)參考光盤相關(guān)SD卡資料。我們?cè)谶@里就不描述了。接下來,我們看看SD卡的命令格式,如表45.1.4所示:
字節(jié)1
字節(jié)2--5
字節(jié)6
7
6
50
310
71
0
0
1
command
命令參數(shù)
CRC
1
表45.1.4 SD卡命令格式
SD卡的指令由6個(gè)字節(jié)組成,字節(jié)1的最高2位固定為01,低6位為命令號(hào)(比如CMD16,為10000即16進(jìn)制的0X10,完整的CMD16,第一個(gè)字節(jié)為01010000,即0X10+0X40)。
字節(jié)2~5為命令參數(shù),有些命令是沒有參數(shù)的。
字節(jié)6的高七位為CRC值,最低位恒定為1。
SD卡的命令總共有12類,分為Class0~Class11,本章,我們僅介紹幾個(gè)比較重要的命令,如表45.1.5所示:
命令
參數(shù)
回應(yīng)
描述
CMD0(0X00)
NONE
R1
復(fù)位SD卡
CMD8(0X08)
VHS+Check pattern
R7
發(fā)送接口狀態(tài)命令
CMD9(0X09)
NONE
R1
讀取卡特定數(shù)據(jù)寄存器
CMD10(0X0A)
NONE
R1
讀取卡標(biāo)志數(shù)據(jù)寄存器
CMD16(0X10)
塊大小
R1
設(shè)置塊大小(字節(jié)數(shù))
CMD17(0X11)
地址
R1
讀取一個(gè)塊的數(shù)據(jù)
CMD24(0X18)
地址
R1
寫入一個(gè)塊的數(shù)據(jù)
CMD41(0X29)
NONE
R3
發(fā)送給主機(jī)容量支持信息和激活
卡初始化過程
CMD55(0X37)
NONE
R1
告訴SD卡,下一個(gè)是特定應(yīng)用命令
CMD58(0X3A)
NONE
R3
讀取OCR寄存器
表45.1.5 SD卡部分命令
上表中,大部分的命令是初始化的時(shí)候用的。表中的R1、R3和R7等是SD卡的回應(yīng),SD卡和單片機(jī)的通信采用發(fā)送應(yīng)答機(jī)制,如圖45.1.2所示:
圖45.1.2 SD卡命令傳輸過程
每發(fā)送一個(gè)命令,SD卡都會(huì)給出一個(gè)應(yīng)答,以告知主機(jī)該命令的執(zhí)行情況,或者返回主機(jī)需要獲取的數(shù)據(jù)。SPI模式下,SD卡針對(duì)不同的命令,應(yīng)答可以使R1~R7,R1的應(yīng)答,各位描述如表45.1.6所示:

R1響應(yīng)格式
7
6
5
4
3
2
1
0
含義
開始位
始終為0
參數(shù)
錯(cuò)誤
地址
錯(cuò)誤
擦除序列
錯(cuò)誤
CRC錯(cuò)誤
非法
命令
擦除
復(fù)位
閑置
狀態(tài)
表45.1.6 R1響應(yīng)各位描述
R2~R7的響應(yīng),我們就不介紹了,請(qǐng)的大家參考SD卡2.0協(xié)議。接下來,我們看看SD卡初始化過程。因?yàn)槲覀兪褂玫氖荢PI模式,所以先得讓SD卡進(jìn)入SPI模式。方法如下:在SD卡收到復(fù)位命令(CMD0)時(shí),CS為有效電平(低電平)則SPI模式被啟用。不過在發(fā)送CMD0之前,要發(fā)送>74個(gè)時(shí)鐘,這是因?yàn)镾D卡內(nèi)部有個(gè)供電電壓上升時(shí)間,大概為64個(gè)CLK,剩下的10個(gè)CLK用于SD卡同步,之后才能開始CMD0的操作,在卡初始化的時(shí)候,CLK時(shí)鐘最大不能超過400Khz!。
接著我們看看SD卡的初始化,SD卡的典型初始化過程如下:
1、初始化與SD卡連接的硬件條件(MCU的SPI配置,IO口配置);
2、上電延時(shí)(>74個(gè)CLK);
3、復(fù)位卡(CMD0),進(jìn)入IDLE狀態(tài);
4、發(fā)送CMD8,檢查是否支持2.0協(xié)議;
5、根據(jù)不同協(xié)議檢查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等);
6、取消片選,發(fā)多8個(gè)CLK,結(jié)束初始化
這樣我們就完成了對(duì)SD卡的初始化,注意末尾發(fā)送的8個(gè)CLK是提供SD卡額外的時(shí)鐘,完成某些操作。通過SD卡初始化,我們可以知道SD卡的類型(V1、V2、V2HC或者M(jìn)MC),在完成了初始化之后,就可以開始讀寫數(shù)據(jù)了。
SD卡讀取數(shù)據(jù),這里通過CMD17來實(shí)現(xiàn),具體過程如下:
1、發(fā)送CMD17;
2、接收卡響應(yīng)R1;
3、接收數(shù)據(jù)起始令牌0XFE;
4、接收數(shù)據(jù);
5、接收2個(gè)字節(jié)的CRC,如果不使用CRC,這兩個(gè)字節(jié)在讀取后可以丟掉。
6、禁止片選之后,發(fā)多8個(gè)CLK;
以上就是一個(gè)典型的讀取SD卡數(shù)據(jù)過程,SD卡的寫于讀數(shù)據(jù)差不多,寫數(shù)據(jù)通過CMD24來實(shí)現(xiàn),具體過程如下:
1、發(fā)送CMD24;
2、接收卡響應(yīng)R1;
3、發(fā)送寫數(shù)據(jù)起始令牌0XFE;
4、發(fā)送數(shù)據(jù);
5、發(fā)送2字節(jié)的偽CRC;
6、禁止片選之后,發(fā)多8個(gè)CLK;
以上就是一個(gè)典型的寫SD卡過程。關(guān)于SD卡的介紹,我們就介紹到這里,更詳細(xì)的介紹請(qǐng)參考光盤SD卡的參考資料(SD卡2.0協(xié)議)。
44.2硬件設(shè)計(jì)
本章實(shí)驗(yàn)功能簡(jiǎn)介:開機(jī)的時(shí)候先初始化SD卡,如果SD卡初始化完成,則提示LCD初始化成功。按下KEY0,讀取SD卡扇區(qū)0的數(shù)據(jù),然后通過串口發(fā)送到電腦。如果沒初始化通過,則在LCD上提示初始化失敗。同樣用DS0來指示程序正在運(yùn)行。
本實(shí)驗(yàn)用到的硬件資源有:
1)指示燈DS0
2)KEY0按鍵
3)串口
4)TFTLCD模塊
5)SD卡
前面四部分,在之前的實(shí)例已經(jīng)介紹過了,這里我們介紹一下戰(zhàn)艦STM32開發(fā)板板載的SD卡接口和STM32的連接關(guān)系,如圖44.2.1所示:
圖44.2.1 SD卡接口與STM32連接原理圖
我們用跳線帽將P10的SD_DT3、SD_CMD、SD_SCK、SD_DT0分別同P12的SD_CS、SPI2_MOSI、SPI2_SCK、SPI2_MISO連接起來,即實(shí)現(xiàn)SD卡的SPI模式連接。硬件連接示意圖如圖44.2.2所示:
圖44.2.2 SD卡SPI方式硬件連接示意圖
將圖中所示的4處,用跳線帽短接,接口實(shí)現(xiàn)SD卡與STM32的SPI連接。最后,你還得自備一個(gè)SD卡,將其插入板子下面的SD卡接口。
上一頁 1 2 下一頁

關(guān)鍵詞: STM32SD卡驅(qū)

評(píng)論


推薦視頻

更多>>

技術(shù)專區(qū)

關(guān)閉