加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1.硬件電路
    • 2. SD卡協(xié)議簡介
    • 3.FPGA實現(xiàn)
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

基于FPGA的SD卡讀寫操作(二)

07/11 12:20
3963
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

引言:上一篇博文介紹了SD卡的理論知識,本文我們介紹如何利用FPGA實現(xiàn)SD卡的讀寫操作。

1.硬件電路

開發(fā)板上裝有一個 Micro SD 卡座,F(xiàn)PGA 通過 SPI 數(shù)據(jù)總線訪問 Micro SD 卡, SD 卡座和 FPGA的硬件電路連接如圖1所示。

圖1:SD卡硬件原理圖設(shè)計

本文通過SD卡SPI模式進行讀寫操作,SPI模式管腳定義如圖1所示。

2. SD卡協(xié)議簡介

SD卡的協(xié)議是一種簡單的命令/響應(yīng)的協(xié)議。全部命令由主機發(fā)起,SD卡接收到命令后并返回響應(yīng)數(shù)據(jù)。根據(jù)命令的不同,返回的數(shù)據(jù)內(nèi)容和長度也不同。

SD卡命令是一個6字節(jié)組成的命令包,其中第一個字節(jié)為命令號,命令號高位bit7和bit6為固定的“01“,其它6個bit為具體的命令號。第2個字節(jié)到第5個字節(jié)為命令參數(shù)。第6個字節(jié)為7個bit的CRC校驗加1個bit的結(jié)束位。如果在SPI模式的時候,CRC校驗位為可選。如圖2所示,Command表示命令,通常使用十進制表示名稱,例如CMD17,這個時候 Command就是十進制的17。

圖2:SD卡命令格式

SD卡對每個命令會返回一個響應(yīng),每個命令有一定的響應(yīng)格式。響應(yīng)的格式跟給它的命令號有關(guān)。在 SPI 模式中,有三種響應(yīng)格式:R1,R2,R3。

圖3:SPI模式響應(yīng)R1格式

圖4:SPI模式響應(yīng)R2格式

圖5:SPI模式響應(yīng)R3格式

2.2.1 SD卡2.0版的初始化步驟

(1)上電后延時至少74clock,等待SD卡內(nèi)部操作完成;

(2) 片選CS低電平選中SD卡;

(3)發(fā)送CMD0,需要返回0x01,進入Idle狀態(tài);

(4)為了區(qū)別SD卡是2.0還是1.0,或是MMC卡,這里根據(jù)協(xié)議向上兼容的,首先發(fā)送只有SD2.0才有的命令CMD8,如果CMD8返回?zé)o錯誤,則初步判斷為2.0卡,進一步循環(huán)發(fā)送命令CMD55+ACMD41,直到返回0x00,確定 SD2.0卡;

(5)如果CMD8返回錯誤則判斷為1.0卡還是MMC卡,循環(huán)發(fā)送 CMD55+ACMD41,返回?zé)o錯誤,則為SD1.0卡,到此SD1.0卡初始成功,如果在一定的循環(huán)次數(shù)下,返回為錯誤,則進一步發(fā)送CMD1進行初始化,如果返回?zé)o錯誤,則確定為MMC卡,如果在一定的次數(shù)下,返回為錯誤,則不能識別該卡,初始化結(jié)束。(通過CMD16可以改變SD卡一次性讀寫的長度);

(6) CS 拉高。

2.2.2 SD卡的讀步驟

(1)發(fā)送 CMD17(單塊)或 CMD18(多塊)讀命令,返回 0X00;

(2)接收數(shù)據(jù)開始令牌fe(或fc)+正式數(shù)據(jù)512Bytes+CRC校驗2Bytes,默認(rèn)正式傳輸?shù)臄?shù)據(jù)長度是 512Bytes。圖 6:單塊讀操作

2.2.3 SD卡的寫步驟

(1)發(fā)送 CMD24(單塊)或 CMD25(多塊)讀命令,返回 0X00;

(2)接收數(shù)據(jù)開始令牌fe(或fc)+正式數(shù)據(jù)512Bytes+CRC校驗2Bytes。

圖 7:單塊寫操作

3.FPGA實現(xiàn)

(1)軟件實現(xiàn)

本文要利用FPGA通過SPI接口實現(xiàn)SD卡讀寫操作。具體功能如下:

(1)SD卡SPI接口驅(qū)動設(shè)計;

(2)SD卡讀寫操作;

(3)讀出數(shù)據(jù)顯示在LED燈上;

(4)按鍵消抖功能。

軟件功能模塊劃分如圖8所示。

圖8:軟件功能模塊框圖

各個模塊功能:

(1)sd_card_test.v模塊為頂層模塊,實現(xiàn)模塊間互聯(lián);(2)spi_master.v實現(xiàn)SPI總線接口對外通信功能;
(3)sd_card_cmd.v實現(xiàn)SD卡命令協(xié)議功能;

(4)sd_card_sec_read_write.v實現(xiàn)SD卡讀寫命令狀態(tài)機操作功能;

(5)sd_card_top.v實現(xiàn)SD卡讀寫功能頂層互聯(lián);
(6)KeyJitters.v實現(xiàn)按鍵操作消抖功能;

(7)sd_test_ctrl.v實現(xiàn)SD卡測試數(shù)據(jù)讀寫狀態(tài)機控制。

?(2)測試結(jié)果

軟件下載至電路板,SD卡讀出數(shù)據(jù)正常顯示在LED上,如圖9所示,顯示讀寫操作正確。

圖9:SD卡讀出數(shù)據(jù)

圖10:SD卡讀出數(shù)據(jù)顯示在LED燈上

感謝關(guān)注公眾號,喜歡就多多轉(zhuǎn)發(fā)吧!

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
XC7A200T-2FBG676I 1 AMD Xilinx Field Programmable Gate Array, 16825 CLBs, 1286MHz, 215360-Cell, CMOS, PBGA676, FBGA-676

ECAD模型

下載ECAD模型
$356.55 查看
XC6SLX9-2CPG196I 1 AMD Xilinx Field Programmable Gate Array, 715 CLBs, 667MHz, 9152-Cell, CMOS, PBGA196, 8 X 8 MM, 0.50 MM PITCH, LEAD FREE, BGA-196
$50.98 查看
XC6SLX45-2CSG324I 1 AMD Xilinx Field Programmable Gate Array, 3411 CLBs, 667MHz, 43661-Cell, CMOS, PBGA324, 15 X 15 MM, 0.80 MM PITCH, LEAD FREE, BGA-324
$65.17 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

專注FPGA技術(shù)開發(fā),涉及Intel FPGA、Xilinx FPGA技術(shù)開發(fā),開發(fā)環(huán)境使用,代碼風(fēng)格、時序收斂、器件架構(gòu)以及軟硬件項目實戰(zhàn)開發(fā),個人公眾號:FPGA技術(shù)實戰(zhàn)。