日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZYNQ-使用SD卡读写文本数据

發(fā)布時(shí)間:2023/12/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZYNQ-使用SD卡读写文本数据 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)內(nèi)容

本文主要關(guān)于SD卡相關(guān)內(nèi)容,然后使用SD卡進(jìn)行TXT文本讀寫,并用串口打印出讀寫數(shù)據(jù)。

開發(fā)環(huán)境

vivado 18.3&SDK,PYNQ-Z2開發(fā)板。

SD卡簡介

SD卡(Secure Digital Card):安全數(shù)字卡,又叫安全數(shù)碼卡。有體積小,容量大傳輸速度快,支持熱插拔等特點(diǎn)。在ZYNQ開發(fā)板上這里是使用的是TF卡,也就是小卡(micro sd卡)又稱TF卡。

SD卡是在 MMC 卡( Multimedia Card,多媒體卡)的基礎(chǔ)上發(fā)展而來,主要增加了兩個(gè)特色:更高的安全性和更快的讀寫速度。SD卡的接口與MMC卡是兼容的,支持SD卡的接口大多支持MMC卡。
下表為不同類型的 SD 卡采用的協(xié)議規(guī)范、容量等級及支持的文件系統(tǒng)。

SD卡類型協(xié)議規(guī)范容量等級磁盤格式
SDSCSD1.0上限為2GBFAT12, FAT16
SDHCSD2.02GB至32GBFAT32
SDXCSD3.032GB至2TB( 2048GBexFAT

不同協(xié)議規(guī)范的 SD 卡有著不同速度等級的表示方法。在 SD1.0 規(guī)范中(現(xiàn)已不用),使用“ X”表示不同的速度等級;在 SD2.0 規(guī)范中,普通卡和高速卡的速率定義為Class2、Class4、Class6 和Class10 四個(gè)等級; SD3.0 規(guī)范(又稱為超高速卡)使用 UHS( Ultra High Speed)表示不同的速度等級。 不同等級的讀寫速度和應(yīng)用如下圖所示:
SD 卡共有 9 個(gè)引腳線, 共支持三種傳輸模式:SPI模式(獨(dú)立序列輸入和序列輸出),1位SD模式 (獨(dú)立指令和數(shù)據(jù)通道,獨(dú)有的傳輸格式), 4位SD模式 (使用額外的針腳以及某些重新設(shè)置的針腳。支持四位寬的并行傳輸)。具體的引腳功能定義如下表所示:

MicroSD 卡接口定義以及各引腳功能說明如下圖所示。

ZYNQ 內(nèi)部集成了兩個(gè) SD 卡控制器,并且 Xilinx SDK 的 standalone 已經(jīng)移植好了 FATFS( SDK 軟件中叫做 xilffs)文件系統(tǒng),因此在 SDK 中添加 xilffs 庫后, 就可以在程序中使用 FATFS 中的 API 函數(shù)來操作 SD 卡。

SD 卡控制器( SD/SDIO Controller)

SD/SDIO控制器與SDIO設(shè)備、SD存儲(chǔ)卡和MMC卡通信,最多有4條數(shù)據(jù)線。SD接口可以使用一條 (dat0)或四條(dat0- dat3)行進(jìn)行數(shù)據(jù)傳輸。SDIO接口可以通過MIO多路復(fù)用到MIO引腳或通過PL中的EMIO進(jìn)行l(wèi)O引腳分配。

ZYNQ 中的 SD 卡控制器符合 SD2.0 協(xié)議規(guī)范, 接口兼容 eMMC、 MMC3.31、 SDIO2.0、 SD2.0、 SPI,支持 SDHC、 SDHS 器件。 SD 卡控制器支持 SDMA(單操作 DMA)、 ADMA1( 4K 邊界限制 DMA)和ADMA2( 在 32 位系統(tǒng)中允許任何位置和任意大小)。
SD/SDIO控制器由ARM處理器通過AHB總線訪問。該控制器還包括一個(gè)DMA單元與內(nèi)部FIFO以滿足吞吐量要求。
SD/SDIO控制器的框圖如下:

SD控制器使用兩個(gè)512字節(jié)深度的雙端口FIFO執(zhí)行寫和讀操作。SD 控制器讀寫通道采用獨(dú)立的 512 字節(jié)深度的雙緩沖 FIFO 執(zhí)行讀和寫操作。在寫操作時(shí),處理器向
其中一個(gè) FIFO 寫數(shù)據(jù),將另一個(gè) FIFO 的數(shù)據(jù)寫到 SD 總線;在讀操作時(shí), SD 總線上的數(shù)據(jù)向其中一個(gè)FIFO 寫數(shù)據(jù),處理器將數(shù)據(jù)從另一個(gè) FIFO 讀出數(shù)據(jù)。 SD 卡控制器通過雙緩沖機(jī)制以保證最大帶寬。

FATFS文件系統(tǒng)

負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)稱為文件管理系統(tǒng),簡稱文件系統(tǒng)。即在磁盤上組織文件的方法。常見的文件系統(tǒng)有FAT/FATFS(FATFS 是一個(gè)完全開源免費(fèi)的 FAT 文件系統(tǒng)模塊)、NTFS(基于安全性的文件系統(tǒng),是Windows NT采用的獨(dú)特的文件系統(tǒng)結(jié)構(gòu))、CDFS(CDFS是大部分光盤的文件系統(tǒng))、exFAT(擴(kuò)展性的文件系統(tǒng))。
FATFS是一個(gè)可以裁剪的文件系統(tǒng),專門為小型的嵌入式系統(tǒng)而設(shè)計(jì)。它完全用標(biāo)準(zhǔn) C語言編寫,結(jié)構(gòu)清晰,代碼量小,文件系統(tǒng)和IO底層分開,所以具有良好的硬件平臺(tái)獨(dú)立性,可以很方便的移植到各種嵌入式處理器中,也很適合新手進(jìn)行入門學(xué)習(xí)。支持最多10個(gè)邏輯盤符和兩級文件夾;可以支持FAT12、FAT16和FAT32,支持多個(gè)存儲(chǔ)媒介。
FATFS 模塊的層次結(jié)構(gòu)如下:

  • 最頂層:應(yīng)用層,使用者無需理會(huì) FATFS 的內(nèi)部結(jié)構(gòu)和復(fù)雜的 FAT 協(xié)議,只需要調(diào)用 FATFS 模塊提供給用戶的一系列應(yīng)用接口函數(shù),如 f_open, f_read, f_write 和 f_close 等,就可以像在 PC 上讀/寫文件那樣簡單。
  • 中間層 :FATFS 模塊,實(shí)現(xiàn)了 FAT 文件讀/寫協(xié)議。使用者一般不用修改,使用時(shí)將頭文件直接包含進(jìn)去即可。
  • 底層接口,包括存儲(chǔ)媒介讀/寫接口( disk I/O)和供給文件創(chuàng)建修改時(shí)間的實(shí)時(shí)時(shí)鐘。需要根據(jù)平臺(tái)和存儲(chǔ)介質(zhì)編寫移植代碼。
    關(guān)于文件系統(tǒng)的函數(shù)API使用可以通過下面這個(gè)網(wǎng)址進(jìn)行學(xué)習(xí)入門:
    FATFS 學(xué)習(xí)網(wǎng)址
    Xilinx SDK 的standalone 已經(jīng)移植好了 FATFS 文件系統(tǒng),因此在 SDK 中添加 xilffs 庫后, 就可以在程序中使用 FATFS 中的 API 函數(shù)來操作 SD 卡。

系統(tǒng)框圖

本次工程只使用了PS端的資源,通過 Xilinx SDK 自帶的 FATFS 庫,完成對 SD卡中 TXT 文本讀寫的功能,并將讀寫測試結(jié)果通過串口打印出來。系統(tǒng)框圖如下:

硬件平臺(tái)搭建

新建工程,創(chuàng)建 block design。添加ZYNQ7 IP,對zynq進(jìn)行初始化配置,勾選sd,uart資源,
設(shè)置BANK的電平,

取消勾選多余資源,點(diǎn)擊OK,完成硬件設(shè)計(jì)。如下圖:

然后我們進(jìn)行g(shù)enerate output product 然后生成HDL封裝。這里沒有進(jìn)行使用PL資源,也不需要進(jìn)行綜合布局,在導(dǎo)出硬件時(shí)也不用包含bit流文件。

SDK軟件部分

打開SDK后,新建application project。選中工程右擊選中設(shè)置板載支持文件模式。

這里選擇xilffs模式,

點(diǎn)擊standalone下的xilffs,可以對文件系統(tǒng)進(jìn)行配置,這里可以使能長文件名有效,改變勾選為true。

完成配置后點(diǎn)擊ok。

在main.c中輸入以下代碼:

#include "stdio.h" #include "xparameters.h" #include "ff.h" #include "string.h" #define FILE_NAME "vuko.txt" char str_wr[100]= "this is a sd read and write test~"; char str_rd[100]=""; FATFS fs; void sd_mount(); void sd_write_data(char wr_dat[], u32 wr_len); void sd_read_data(char rd_dat[], u32 rd_len); int main(){u32 len;sd_mount();len=strlen(str_wr);//寫數(shù)據(jù)sd_write_data(str_wr,len);//讀數(shù)據(jù)sd_read_data(str_rd,len);if(strcmp(str_rd,str_wr)==0){printf("%s\n",str_rd);printf("sd card test success!\n");}elseprintf("sd card test fail!\n");return 0; } //掛載sd卡 void sd_mount(){FRESULT status;BYTE work[FF_MAX_SS];//掛載sd卡,注冊文件系統(tǒng)對象status=f_mount(&fs,"",1);if(status != FR_OK){printf("%d\n",status);printf("It isn't FAT format\n");f_mkfs("",FM_FAT32,0,work,sizeof work);f_mount(&fs,"",1);} } //寫數(shù)據(jù) void sd_write_data(char wr_dat[], u32 wr_len){FIL fil;UINT bw;//創(chuàng)建或者打開文件f_open(&fil,FILE_NAME,FA_CREATE_ALWAYS | FA_WRITE | FA_READ);//移動(dòng)讀寫指針f_lseek(&fil, 0);//寫數(shù)據(jù)f_write(&fil,wr_dat,wr_len,&bw);//關(guān)閉文件f_close(&fil); } //讀數(shù)據(jù) void sd_read_data(char rd_dat[], u32 rd_len){FIL fil;UINT br;//創(chuàng)建或者打開文件f_open(&fil,FILE_NAME,FA_READ);//移動(dòng)讀寫指針f_lseek(&fil, 0);//讀取數(shù)據(jù)f_read(&fil,rd_dat,rd_len,&br);//關(guān)閉文件f_close(&fil); }

整體代碼思路

該工程代碼主要實(shí)現(xiàn)三個(gè)函數(shù),分別是掛載SD卡,讀取SD卡和寫入SD卡。在main函數(shù)中首先完成對SD卡的掛載,然后向指定文件內(nèi)寫入的字符串?dāng)?shù)據(jù),通過SD卡讀取函數(shù)把SD卡中指定文件的數(shù)據(jù)讀到數(shù)組中,完成數(shù)據(jù)的讀取后將寫入的字符串?dāng)?shù)據(jù)和讀取出來的字符串?dāng)?shù)據(jù)進(jìn)行對比,對比一致后,用串口打印測試成功的標(biāo)識(shí)。

部分代碼講解

對于具體的讀寫函數(shù)的使用,我們可以進(jìn)行參考下面這個(gè)網(wǎng)址進(jìn)行學(xué)習(xí):FATFS 學(xué)習(xí)網(wǎng)址
可以參考對應(yīng)的讀寫函數(shù)的使用示例進(jìn)行輔助開發(fā)設(shè)計(jì)。

對于寫入SD卡函數(shù)編寫:
首先我們要進(jìn)行創(chuàng)建或者打開文件,這里引入文件的結(jié)構(gòu)體,使用f_open()函數(shù)進(jìn)行打開,將讀寫的指針移動(dòng)到到指定位置,這里使用f_lseek(&fil, 0);把光標(biāo)移動(dòng)到初始位置。然后使用寫入函數(shù)進(jìn)行寫入數(shù)據(jù)f_write(&fil,wr_dat,wr_len,&bw);完成寫入后,關(guān)閉文件f_close(&fil);
讀取SD卡函數(shù)和寫入的思路類似,對于掛載函數(shù)來說,使用status=f_mount(&fs,"",1);注冊文件系統(tǒng)對象,如果讀取返回值不是FAT文件系統(tǒng),則使用f_mkfs("",FM_FAT32,0,work,sizeof work); 把SD卡進(jìn)行初始化。

運(yùn)行結(jié)果

串口數(shù)據(jù):

使用讀卡器讀取SD卡的文件數(shù)據(jù):

Reference

  • 正點(diǎn)原子ZYNQ開發(fā)視頻
  • xilinx UG585
  • 總結(jié)

    以上是生活随笔為你收集整理的ZYNQ-使用SD卡读写文本数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色吧久久 | 国产乱码一区二区三区播放 | 在线1区 | 肉体粗喘娇吟国产91 | 嫩草嫩草嫩草嫩草 | 97人人澡人人爽人人模亚洲 | 日韩午夜精品视频 | 国精产品一二三区精华液 | 无遮挡裸光屁屁打屁股男男 | 中文字幕乱码一区 | 男女激情在线观看 | 波多野结衣免费看 | 欧美日韩在线综合 | 日本视频黄色 | 国产私密视频 | 日韩特黄一级片 | 欧美mv日韩mv国产网站app | 亚洲精品一区二区在线 | 欧美zozo| 中文字幕在线国产 | 操操日 | 成人免费a视频 | 亚洲精品日产精品乱码不卡 | 中文字幕永久在线播放 | 亚洲一区二区三区四区五区六区 | 国产成人h | 欧美日韩成人一区二区 | 在线免费激情视频 | 国产伦精品一区二区三区在线 | 在线超碰av | 第一福利丝瓜av导航 | 四色成人av永久网址 | 欧美性猛交性大交 | 亚洲欧洲在线视频 | 美女穴穴 | 永久免费精品影视网站 | 色爱AV综合网国产精品 | 伊人久久大 | 加勒比波多野结衣 | 国产精品一二三级 | 国产小视频免费在线观看 | 国产精选中文字幕 | 欧美人妻一区二区三区 | 成人少妇影院yyyy | 日韩中文字幕免费在线观看 | 国产av无码专区亚洲av麻豆 | 强伦人妻一区二区三区视频18 | 又黄又爽一区二区三区 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 久久神马 | 影音先锋在线中文字幕 | 伦乱天堂 | 国产精品第一区 | 亚洲一级视频在线观看 | 久久久久国产一区二区 | 精品人妻在线一区二区三区 | 亚洲精品电影在线 | 五月婷婷国产 | 男人私人影院 | 国产一线在线观看 | 啪啪网站视频 | 国产精美视频 | 57pao成人国产永久免费视频 | 亚洲aaa级 | 最污的网站 | 国产精品日韩一区二区三区 | 长河落日电视连续剧免费观看 | 美女啪啪动态图 | 色一情一区二区三区四区 | av图片在线 | 亚洲av无码一区二区三区在线 | 正在播放老肥熟妇露脸 | 久久久久久影视 | 精品少妇人妻av一区二区三区 | 青草草在线视频 | av第一页 | 男男gay动漫 | 亚洲不卡免费视频 | 毛片亚洲av无码精品国产午夜 | 草久久 | 极品久久久久 | 国产精品久久久久久久久久久久久久久 | 久久咪咪| 麻豆精品免费观看 | 樱花草涩涩www在线播放 | 日本一级片在线播放 | 天堂俺去俺来也www 欧美大片在线播放 | www亚洲视频| 国产亚洲精 | 三级三级久久三级久久18 | 天天操天天射天天爽 | 韩日视频一区 | 欧美作爱视频 | 青青青青青青青青草 | 婷婷五月综合久久中文字幕 | 精品91久久久久久 | 午夜国产一区 | 91精品国产综合久久久密臀九色 | 插插插91|