<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32之SD卡驅動(dòng)

STM32之SD卡驅動(dòng)

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
很多單片機系統都需要大容量存儲設備,以存儲數據。目前常用的有U盤(pán),FLASH芯片,SD卡等。他們各有優(yōu)點(diǎn),綜合比較,最適合單片機系統的莫過(guò)于SD卡了,它不僅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移動(dòng),并且有幾種體積的尺寸可供選擇(標準的SD卡尺寸,以及TF卡尺寸等),能滿(mǎn)足不同應用的要求。
只需要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所示:
表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所示:
名稱(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
50
310
71
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ò)程
每發(fā)送一個(gè)命令,SD卡都會(huì )給出一個(gè)應答,以告知主機該命令的執行情況,或者返回主機需要獲取的數據。SPI模式下,SD卡針對不同的命令,應答可以使R1~R7,R1的應答,各位描述如表45.1.6所示:

R1響應格式
7
6
5
4
3
2
1
0
含義
開(kāi)始位
始終為0
參數
錯誤
地址
錯誤
擦除序列
錯誤
CRC錯誤
非法
命令
擦除
復位
閑置
狀態(tài)
表45.1.6 R1響應各位描述
R2~R7的響應,我們就不介紹了,請的大家參考SD卡2.0協(xié)議。接下來(lái),我們看看SD卡初始化過(guò)程。因為我們使用的是SPI模式,所以先得讓SD卡進(jìn)入SPI模式。方法如下:在SD卡收到復位命令(CMD0)時(shí),CS為有效電平(低電平)則SPI模式被啟用。不過(guò)在發(fā)送CMD0之前,要發(fā)送>74個(gè)時(shí)鐘,這是因為SD卡內部有個(gè)供電電壓上升時(shí)間,大概為64個(gè)CLK,剩下的10個(gè)CLK用于SD卡同步,之后才能開(kāi)始CMD0的操作,在卡初始化的時(shí)候,CLK時(shí)鐘最大不能超過(guò)400Khz!。
接著(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.1 SD卡接口與STM32連接原理圖
我們用跳線(xiàn)帽將P10的SD_DT3、SD_CMD、SD_SCK、SD_DT0分別同P12的SD_CS、SPI2_MOSI、SPI2_SCK、SPI2_MISO連接起來(lái),即實(shí)現SD卡的SPI模式連接。硬件連接示意圖如圖44.2.2所示:
圖44.2.2 SD卡SPI方式硬件連接示意圖
將圖中所示的4處,用跳線(xiàn)帽短接,接口實(shí)現SD卡與STM32的SPI連接。最后,你還得自備一個(gè)SD卡,將其插入板子下面的SD卡接口。
上一頁(yè) 1 2 下一頁(yè)

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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>