在這篇文章,進(jìn)入正題,說(shuō)一說(shuō)怎么通過(guò)FPGA采取SD模式來(lái)實(shí)現(xiàn)Micro SD 卡的驅(qū)動(dòng),也就是怎么去讀寫 Micro SD 卡。
1 先來(lái)看看 Micro SD 卡的引腳:

【Micro SD 引腳】

【Micro SD 卡座原理圖】
除開(kāi)電源相關(guān)引腳,其他可用的管腳都連接到了 FPGA 上。
對(duì)于這些引腳的介紹,先看下 SD 協(xié)議手冊(cè)上對(duì)于 SD 總線的引腳描述:

這個(gè)表格上的引腳描述是給的 SD 卡的引腳信息,與Micro SD 卡的引腳序號(hào)是不一樣的,大家要辯證對(duì)待,主要是參考下 Micro SD 卡各引腳的介紹。
從表格中的引腳信息也可以看出,Micro SD 卡是兼容 SPI 操作模式的。
2 在正式操作 Micro SD 卡之前,需要對(duì)其進(jìn)行初始化。初始化的操作可以參考下面兩個(gè)流程圖。

【SD 卡的識(shí)別流程】
這個(gè)圖告訴咱們可以通過(guò) CMD0 + CS置0 進(jìn)入 SPI 模式。

【SD 模式下的初始化和識(shí)別流程】
初始化完成了,咱們就需要看到另外一個(gè)圖了。

在初始化流程中,執(zhí)行 CMD3 之后就實(shí)現(xiàn)了從 card identification mode 到 data transfer mode 的跨越。
進(jìn)入到 data transfer mode ,就可以對(duì) SD 卡進(jìn)行數(shù)據(jù)傳輸了,也就是讀寫操作。
3 根據(jù)上面的三個(gè)流程圖,自己再看看手冊(cè),找找相關(guān)的指令怎么實(shí)現(xiàn),其實(shí)就可以正常的操作 SD 卡了。說(shuō)完上邊的三個(gè)流程圖,其實(shí)這篇文章也可以結(jié)束了。不過(guò),這種說(shuō)一半藏一半,完全不是我的風(fēng)格。我們?cè)倮^續(xù)說(shuō)一說(shuō)流程圖中的這些指令如何實(shí)現(xiàn)。
SD 模式的命令格式如下:

命令總共由 48 bit 組成,start bit 總是為0,表示命令的開(kāi)始,最后一個(gè)bit,也就是 end bit 總是為 1 。這種方式倒是和 IIC 的 SDA 數(shù)據(jù)線有點(diǎn)類似。當(dāng)主機(jī)沒(méi)有發(fā)送命令時(shí),可以將 CMD 這根管腳拉高,你要是不小心把 CMD 這根線拉低了,那 Micro SD 卡有可能就會(huì)當(dāng)成是一個(gè)命令的開(kāi)始。
transmitter bit:為 1 ,表示這是從主機(jī)到 SD 卡的命令,表示命令方向。
CONTENT:這是命令的內(nèi)容了,包含命令索引和命令參數(shù)。
CRC:有7個(gè)bit,也就是用的CRC7。
以CMD8為例,可以看看命令格式到底是怎么樣的。

具體的命令參數(shù),還需要根據(jù)很多情況進(jìn)行設(shè)定。
命令索引和參數(shù)都確定好之后,剩下的就是怎么來(lái)搞定 CRC 7 ?
對(duì)于 CRC 7 ,咱們就直接貼代碼吧。

這些值都確定好之后,再通過(guò) CMD 這個(gè)管腳串行的發(fā)送出去就可以了!
對(duì)于有寫命令,會(huì)收到 Micro SD 卡的響應(yīng)。而對(duì)于不同的操作指令,也會(huì)有不同的響應(yīng)。

而不同的響應(yīng),與之對(duì)應(yīng)的就是在 CMD 線上收到 Micro SD 卡發(fā)送的不同數(shù)據(jù)。


有些指令前面有字母 A,如下圖所示:

那這些指令與沒(méi)有帶字母 “A” 的指令有什么區(qū)別呢?
以 ACMD6 為例,它要先執(zhí)行 CMD55 ,之后再執(zhí)行類似于 CMD6 指令,就是說(shuō)ACMD6 是由兩個(gè)指令組合在一起的。
4 說(shuō)完指令,接下來(lái)再說(shuō)一說(shuō)怎么寫數(shù)據(jù),怎么讀數(shù)據(jù)。

寫數(shù)據(jù)和讀數(shù)據(jù)都是這樣的數(shù)據(jù)包格式,start bit總是為0,end bit 總是為 1 。
在執(zhí)行完寫指令之后,相應(yīng)的在DAT 數(shù)據(jù)線上構(gòu)造這樣的數(shù)據(jù)包格式就行。
在執(zhí)行完讀指令之后,相應(yīng)的在DAT 數(shù)據(jù)線上就會(huì)接收到這樣的數(shù)據(jù)包格式。
稍復(fù)雜一點(diǎn)的,也就是如何構(gòu)造 CRC,數(shù)據(jù)包使用的是 CRC 16。

5 咱們現(xiàn)在基本上已經(jīng)把 Micro SD 卡的操作流程都已經(jīng)說(shuō)完了。接下來(lái)說(shuō)一說(shuō)我在這個(gè)項(xiàng)目中從初始化到讀寫數(shù)據(jù)的命令執(zhí)行流程是怎么樣的。
CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD 7 -> ACMD6 -> CMD25 (WRITE_MULTIPLE_BLOCK ) / CMD17 (READ_SINGLE_BLOCK)-> CMD12。
好了,這篇文章寫到就結(jié)束了。
我自己寫的這個(gè)項(xiàng)目的完整代碼,畢竟這是人家花了錢的,是絕對(duì)不會(huì)公開(kāi)的,所以大家也不用在微信里邊私聊我要代碼了哈!
但是可以附上一套源碼給大家參考,這套代碼是 Lattice 給出的 關(guān)于 SD 卡控制器的 IP Core。當(dāng)時(shí) Kevin 也是參考了這個(gè) IP Core 的一些代碼才順利的調(diào)通。

審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1662文章
22461瀏覽量
637941 -
原理圖
+關(guān)注
關(guān)注
1354文章
6428瀏覽量
246852 -
Micro
+關(guān)注
關(guān)注
2文章
274瀏覽量
36713 -
SD卡
+關(guān)注
關(guān)注
2文章
589瀏覽量
69469 -
引腳
+關(guān)注
關(guān)注
16文章
2112瀏覽量
55889
原文標(biāo)題:基于FPGA的Micro SD卡控制器(SD模式實(shí)現(xiàn))
文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
K***28如何實(shí)現(xiàn)對(duì)Micro SD卡的讀寫
FPGA如何與SD卡結(jié)合
STM32是怎樣通過(guò)SDIO模式實(shí)現(xiàn)對(duì)SD卡的讀寫
基于FPGA的SD卡的數(shù)據(jù)讀寫實(shí)現(xiàn)(SD NAND FLASH)
基于S3C2410的SD MMC卡驅(qū)動(dòng)的實(shí)現(xiàn)
SPI模式下SD卡驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)
什么是micro sd卡?什么是TF卡? 什么是SD卡?
基于SD卡的FPGA配置
基于ReWorks嵌入式系統(tǒng)在SD模式下實(shí)現(xiàn)SD卡驅(qū)動(dòng)程序的設(shè)計(jì)
SD卡端子定義,sd card pin description
微雪電子Micro SD卡 存儲(chǔ)模塊簡(jiǎn)介
HAL庫(kù) CubeMX STM32通過(guò)SDIO模式實(shí)現(xiàn)對(duì)SD卡的讀寫
如何在Micro SD卡上設(shè)置寫保護(hù)?
怎么通過(guò)FPGA采取SD模式實(shí)現(xiàn)Micro SD卡的驅(qū)動(dòng)
評(píng)論