色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【紫光同創國產FPGA教程】【第八章】SD卡讀寫實驗

FPGA技術專欄 ? 來源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-02-05 11:35 ? 次閱讀

原創聲明:

本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處(alinx.com)。

適用于板卡型號:

PGL22G/PGL12G

1. 實驗簡介

SD卡是現在嵌入式設備重要的存儲模塊,內部集成了nand flash控制器,方便了主機的的管理。本實驗主要是練習對sd卡的扇區進行讀寫,通常sd卡都有文件系統,可以按照文件名和目錄路徑來讀寫文件,但文件系統非常復雜,本實驗不做講解,在后續的實驗中我們通過搜索特定的文件頭來讀特殊的文件,完成音頻播放、圖片讀取顯示等。

2. 實驗原理

2.1 硬件描述

開發板上裝有一個Micro SD卡座,FPGA通過SPI數據總線訪問Micro SD卡, SD卡座和FPGA的硬件電路連接如下:

o4YBAGAY4mqAbUHfAABWzEWrkVo638.jpg

開發板SD卡

在SD卡數據讀寫速度要求不高的情況下,選用SPI通信模式可以說是一種最佳的解決方案。因為在SPI模式下,通過四條線就可以完成所有的數據交換。本實驗將為大家介紹FPGA通過SPI總線讀寫SD卡。要完成SD卡的FPGA讀寫,用戶需要理解SD卡的命令協議。

2.1 SD卡協議簡介

SD卡的協議是一種簡單的命令/響應的協議。全部命令由主機發起,SD卡接收到命令后并返回響應數據。根據命令的不同,返回的數據內容和長度也不同。SD卡命令是一個6字節組成的命令包,其中第一個字節為命令號, 命令號高位bit7和bit6為固定的“01“,其它6個bit為具體的命令號。第2個字節到第5個字節為命令參數。第6個字節為7個bit的CRC校驗加1個bit的結束位。如果在SPI模式的時候,CRC校驗位為可選。如下圖所示,Command表示命令,通常使用十進制表示名稱,例如CMD17,這個時候Command就是十進制的17。SD卡具體的協議本實驗不講解,可自行找相關資料學習。

pIYBAGAY4muASrLYAAARHey4MfE633.jpg

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

o4YBAGAY4myAfoO6AAAc9mT4vdw144.jpgpIYBAGAY4myAK98UAAA4RuZDQWQ935.jpgo4YBAGAY4m2AN2L4AAAj6HNl44o945.jpg

2.2 SD卡2.0版的初始化步驟

  1. 上電后延時至少74clock,等待SD卡內部操作完成

  2. 片選CS低電平選中SD卡

  3. 發送CMD0,需要返回0x01,進入Idle狀態

  4. 為了區別SD卡是2.0還是1.0,或是MMC卡,這里根據協議向上兼容的,首先發送只有SD2.0才有的命令CMD8,如果CMD8返回無錯誤,則初步判斷為2.0卡,進一步循環發送命令CMD55+ACMD41,直到返回0x00,確定SD2.0卡

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

6. CS拉高

2.3 SD卡的讀步驟

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

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

默認正式傳輸的數據長度是512Bytes

pIYBAGAY4m6AZiYDAABpVVo-5qY959.jpg

2.4 SD卡的寫步驟

  1. 發送CMD24(單塊)或CMD25(多塊)寫命令,返回0X00

  2. 發送數據開始令牌fe(或fc)+正式數據512Bytes + CRC校驗2Bytes

o4YBAGAY4m6Aal7xAACMCFJMmjQ757.jpg

3. 程序設計

下面主要對sd_card_top及其子程序進行介紹和說明。sd_card_top包含3個子程序,分別為sd_card_sec_read_write.v,sd_card_cmd.v和spi_master.v文件。它們的邏輯關系如下圖所示:

pIYBAGAY4m-AOD1eAAAtgxcTeXc488.jpg

3.1 sd_card_sec_read_write

以下為sd_card_sec_read_write模塊端口說明:

信號名稱 方向 說明
clk in 時鐘輸入
rst in 異步復位輸入,高復位
sd_init_done out sd卡初始化完成
sd_sec_read in sd卡扇區讀請求
sd_sec_read_addr in sd卡扇區讀地址
sd_sec_read_data out sd卡扇區讀出的數據
sd_sec_read_data_valid out sd卡扇區讀出的數據有效
sd_sec_read_end out sd卡扇區讀完成
sd_sec_write in sd卡扇區寫請求
sd_sec_write_addr in sd卡扇區寫請求應答
sd_sec_write_data in sd卡扇區寫請求數據
sd_sec_write_data_req out sd卡扇區寫請求數據讀取,提前sd_sec_write_data一個時鐘周期
sd_sec_write_end out sd卡扇區寫請求完成
spi_clk_div in SPI時鐘分頻,SPI時鐘頻率=系統時鐘/(( spi_clk_div + 2)*2)
cmd_req in sd卡命令請求
cmd_req_ack out sd卡命令請求應答
cmd_req_error out sd卡命令請求錯誤
cmd in sd卡命令,命令+參數+CRC,一共48bit
cmd_r1 in sd卡命令期待的R1響應
cmd_data_len in sd卡命令后讀取的數據長度,大部分命令沒有讀取數據
block_read_req in 塊數據讀取請求
block_read_valid out 塊數據讀取數據有效
block_read_data out 塊數據讀取數據
block_read_req_ack out 塊數據讀取請求應答
block_write_req in 塊數據寫請求
block_write_data in 塊數據寫數據
block_write_data_rd out 塊數據寫數據請求,提前block_write_data一個時鐘周期
block_write_req_ack out 塊數據寫請求應答

sd_card_sec_read_write模塊有一個狀態機,首先完成SD卡初始化,下圖為模塊的初始化狀態機轉換圖,首先發送CMD0命令,然后發送CMD8命令,再發送CMD55,接著發送ACMD41和CMD16。如果應答正常,sd卡初始化完成,等待SD卡扇區的讀寫命令。

o4YBAGAY4nCAe83lAAAVPdqqWPQ999.jpg

然后等待扇區讀寫指令,并完成扇區的讀寫操作,下圖為模塊的讀寫狀態機轉換圖。

pIYBAGAY4nCAQqsyAAAf_e76vM4254.jpg

在此模塊中定義了兩個參數,SD卡的初始化過程是需要先用慢時鐘來發送命令和配置,等待初始化成功后再用快時鐘來進行數據讀寫。

parameter SPI_LOW_SPEED_DIV = 248
parameter SPI_HIGH_SPEED_DIV = 0

3.2 sd_card_cmd

sd_card_cmd模塊端口的說明如下:

信號名稱 方向 說明
sys_clk in 時鐘輸入
rst in 異步復位輸入,高復位
spi_clk_div in SPI時鐘分頻,SPI時鐘頻率=系統時鐘/(( spi_clk_div + 2)*2)
cmd_req in sd卡命令請求
cmd_req_ack out sd卡命令請求應答
cmd_req_error out sd卡命令請求錯誤
cmd in sd卡命令,命令+參數+CRC,一共48bit
cmd_r1 in sd卡命令期待的R1響應
cmd_data_len in sd卡命令后讀取的數據長度,大部分命令沒有讀取數據
block_read_req in 塊數據讀取請求
block_read_valid out 塊數據讀取數據有效
block_read_data out 塊數據讀取數據
block_read_req_ack out 塊數據讀取請求應答
block_write_req in 塊數據寫請求
block_write_data in 塊數據寫數據
block_write_data_rd out 塊數據寫數據請求,提前block_write_data一個時鐘周期
block_write_req_ack out 塊數據寫請求應答
nCS_ctrl out 到SPI master控制器,cs片選控制
clk_div out 到SPI Master控制器,時鐘分頻參數
spi_wr_req out 到SPI Master控制器,寫一個字節請求
spi_wr_ack in 來自SPI Master控制器,寫請求應答
spi_data_in out 到SPI Master控制器,寫數據
spi_data_out in 來自SPI Master控制器,讀數據

sd_card_cmd模塊主要實現sd卡基本命令操作,還有上電初始化的88個周期的時鐘,數據塊的命令和讀寫的狀態機如下。

pIYBAGAY4nGAKAKoAAA2luJZQ60601.jpg

從SD2.0的標準里我們可以看到,從主控設備寫命令到SD卡, 最高兩位47~46位必須為“01”,代表命令發送開始。

o4YBAGAY4nKAOf8BAACPLg8D3-E193.jpg

所以代碼中都是將48位命令的高八位與十六進制0x40做或操作得到的結果再寫入,所以才有了如下一段代碼:

pIYBAGAY4nKAFbhFAAAIh-42-9s730.jpg

3.3 spi_master

spi_master模塊主要完成SPI一個字節的讀寫,當SPI狀態機在idle的時候,檢測到wr_req的信號為高,會產生8個DCLK,并把datain的數據從高位依次輸出到MOSI信號線上。MOSI在8個DCLK的輸出數據為datain的值0x58。

同時spi_master程序也會讀取MISO輸入的數據,轉換成8位的data_out數據輸出實現SPI的一個字節的數據讀取。

4. 實驗現象

下載實驗程序后,可以看到LED顯示一個二進制數字,這個數字是存儲在sd卡中第一扇區的第一個數據,數據是隨機的,這個時候按鍵KEY2按下,數字加一,并寫入了sd卡,再次下載程序,可以看到直接顯示更新后的數據。

開發板

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21729

    瀏覽量

    603009
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304822
  • SD卡
    +關注

    關注

    2

    文章

    564

    瀏覽量

    63890
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1706

    瀏覽量

    91508
  • 紫光同創
    +關注

    關注

    5

    文章

    85

    瀏覽量

    27503
收藏 人收藏

    評論

    相關推薦

    【GD32F470紫藤派開發板使用手冊】第十二講 SDIO-SD讀寫實驗

    通過本實驗主要學習以下內容: ?SDIO操作原理 ?SD讀寫實
    的頭像 發表于 05-18 09:36 ?1358次閱讀
    【GD32F470紫藤派開發板使用手冊】第十二講 SDIO-<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫實驗</b>

    國產FPGA介紹-紫光同創

    紫光同創紫光集團旗下紫光國微的子公司,成立于2013年,有十余年可編程邏輯器件研發經歷,布局覆蓋高中低端FPGA產品。 早在2015年,
    發表于 01-24 10:45

    《測控電路》習題完整參考答案(第八章

    《測控電路》習題完整參考答案(第八章
    發表于 05-07 11:39

    波形的產生與變換電路 第八章PPT

    波形的產生與變換電路 第八章
    發表于 04-20 09:33 ?19次下載
    波形的產生與變換電路 <b class='flag-5'>第八章</b>PPT

    信號發生電路基礎 第八章

    信號發生電路基礎 第八章 8.1正弦波振蕩電路1、振蕩電路:是一種不需要外接輸入信號就能將直流能源轉換成具有一定頻率、一定幅度和一定波形的交流能量
    發表于 04-20 13:58 ?49次下載

    第八章 線性離散控制系統分析

    第八章 線性離散控制系統分析 數字控制系統是一種以數字計算機為控制器去控制具有連續工作狀態的被控對象的閉環控制系統。
    發表于 05-27 15:50 ?0次下載

    接觸式IC讀寫實驗

    接觸式IC讀寫實驗 一. 實驗目的了解接觸式IC 的知識,
    發表于 09-22 17:20 ?4775次閱讀
    接觸式IC<b class='flag-5'>卡</b><b class='flag-5'>讀寫實驗</b>

    51單片機第八章素材

    單片機第八章素材練習,主要講解單片機的初步應用只是,配合protues使用,加強對單片機有關知識的理解。
    發表于 11-16 18:53 ?1次下載

    電子技術基礎模擬部分第五版_第八章習題答案.pdf

    電子技術基礎模擬部分第五版_第八章習題答案.pdf,作業題解答!
    發表于 04-11 17:44 ?0次下載

    《測控電路》習題完整參考答案(第八章

    《測控電路》習題完整參考答案(第八章
    發表于 02-14 17:02 ?0次下載

    電路《電路原理》邱關源---第八章 相量法

    電路《電路原理》邱關源---第八章 相量法
    發表于 01-18 11:37 ?0次下載

    【正點原子Linux連載】第八章匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.0

    【正點原子Linux連載】第八章匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.0
    發表于 12-01 19:21 ?10次下載
    【正點原子Linux連載】<b class='flag-5'>第八章</b>匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.0

    【正點原子FPGA連載】第八章LED燈流水實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    第八章LED燈流水實驗LED燈流水作為一個經典的入門實驗,其地位堪比編程界的“Hello,World!”。對于很多電子工程師來說,LED燈流水都是他們在硬件上觀察到的第一個實驗現象。本
    發表于 01-17 11:38 ?1次下載
    【正點原子<b class='flag-5'>FPGA</b>連載】<b class='flag-5'>第八章</b>LED燈流水<b class='flag-5'>實驗</b> -摘自【正點原子】新起點之<b class='flag-5'>FPGA</b>開發指南_V2.1

    IC工藝和版圖設計第八章Latch-up和GuardRing設計

    IC工藝和版圖設計第八章Latch-up和GuardRing設計
    發表于 02-10 18:11 ?0次下載

    【GD32F303紅楓派開發板使用手冊】第二十三講 SDIO-SD讀寫實驗

    通過本實驗主要學習以下內容: ?SDIO操作原理 ?SD讀寫實
    的頭像 發表于 06-23 10:49 ?619次閱讀
    【GD32F303紅楓派開發板使用手冊】第二十三講 SDIO-<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫實驗</b>
    主站蜘蛛池模板: 亚洲 欧洲 国产 日产 综合| av亚洲2017色天堂| 日韩1区1区产品乱码芒果榴莲| 国内精品自线在拍2020不卡| 第一会所欧美无码原创| 99re久久免费热在线视频手机| 亚洲一区在线播放| 小短文H啪纯肉公交车| 国产高清免费观看| 饱满奶大30p| 国产欧美国产综合第一区| 九九精品在线播放| 乱VODAFONEWIFI熟妇| 中文字幕天堂久久精品| 中文天堂www资源| 99精品国产AV一区二区麻豆| 18video性欧美19sex高清| 91福利在线观看| 亚洲国产在线99视频| 特大巨黑人吊性xxxxgay| 学生无码AV一区二区三区| 午夜福利视频极品国产83| 天天国产在线精品亚洲| 三级电影免费看| 无套内谢大学生A片| 午夜黄视频| 亚洲不卡视频在线观看| 午夜性伦鲁啊鲁免费视频| 亚洲精品国产高清嫩草影院| 伊人久久艹| a视频在线观看| 国产精品AV色欲蜜臀在线| 国产99视频精品一区| 好湿好滑好硬好爽好深视频| 精品麻豆一卡2卡三卡4卡乱码| 精品国产人妻国语| 久久国产香蕉视频| 嗯啊快拔出来我是你老师视频| 日韩欧美中文字幕一区| 亚洲国产欧美日本大妈| 综合色一色综合久久网vr|