zynq中通過xilffs讀寫SD卡

2021-09-10 09:24:39 字數 2206 閱讀 2385

在xilinx sdk的standalone已移植好了fatfs庫(sdk中叫做xilffs),所以在sdk中新增xilffs庫後就可以在程式中使用fatfs中各api來操作sd卡,該庫支援fat12, fat16 and fat32檔案系統(本例將sd卡格式化為fat32)。fatfs api詳細說明可檢視

zynq中ps部分已經整合了sd卡控制器,在ps部分需要開啟sd卡控制器,並配置對應管腳(取決於開發板),本人用的開發板ps部分配置如下圖

綜合實現生成.bit後匯出,lautch sdk進入sdk新建工程和bsp,由於用了xilffs庫所以在bsp中需要選擇開啟xilffs,如下圖

對於xilffs的設定如下圖

enable_mmc選擇false;fs_inte***ce選擇1;read_only選擇false。可以參考後面description描述來設定。本例使用如上預設配置即可。

c程式如下:

/*

* main.c

* * created on: 2023年8月20日

* author: hsp

* 本檔案實現sd寫入一段字串,然後從其中讀出並列印到串列埠。

* */

#include

#include "platform.h"

#include "xparameters.h"

#include "xil_printf.h"

#include "ff.h"

#include "xdevcfg.h"

static fatfs fatfs;

int sd_init()

return xst_success;

}int sd_transfer_read(char *filename,u32 destinationaddress,u32 bytelength)

rc = f_lseek(&fil, 0);

if(rc)

rc = f_read(&fil, (void*)destinationaddress,bytelength,&br);

if(rc)

rc = f_close(&fil);

if(rc)

return xst_success;

}int sd_transfer_write(char *filename,u32 sourceaddress,u32 bytelength)

rc = f_lseek(&fil, 0);

if(rc)

rc = f_write(&fil,(void*) sourceaddress,bytelength,&bw);

if(rc)

rc = f_close(&fil);

if(rc)

return xst_success;

}#define file "test.txt"

int main()

注意:由於使用了strlen函式需要#include;使用了fatfs api所以要#include "ff.h";使用了xst_success之類的巨集定義作為返回值所以要#include "xdevcfg.h"

關於檔名

剛開始定義#define file "husipeng_test.txt",每次執行在開啟檔案時返回6即fr_invalid_name,也就是說檔名無效,查詢api庫path names頁面,再看檔案ffconf.h中有定義#define _fs_rpath 0u;即檔名不能用子目錄而且為8.3 format file name (sfn)格式,也就說檔名只能為:<8個字元+.+<3字元方式,所以這裡定義的檔名太長才引起的錯誤,所以改為#define file "test.txt"這樣的短檔名即可解決這個問題。

zynq中通過xilffs讀寫SD卡

本文主要介紹在zynq中通過xilffs庫讀寫sd卡的乙個例子,並給出在使用中遇到的問題 在xilinx sdk的standalone已移植好了fatfs庫 sdk中叫做xilffs 所以在sdk中新增xilffs庫後就可以在程式中使用fatfs中各api來操作sd卡,該庫支援fat12,fat16...

zynq通過ps呼叫user ip

新建vivado工程 新增user ip路徑 新建bd檔案 新增zynq system ip並配置 新增自定義ip 連線 clk i fclk clk0 rstn i fclk reset0 n led 0 選中右擊make external改名為led 0 generate output 生成bi...

zynq中mgtx應用 ZYNQ中斷體系

arm中斷體系 01 arm體系中,在儲存位址的低位,固化了乙個32位元組的硬體中斷向量表。異常中斷發生時,程式計數器pc所指的位置不同,異常中斷就不同。中斷結束後,中斷不同,返回位址也不同。但是,對於系統復位中斷,不需要返回,因為整個應用系統就是從復位中斷中開始的。快速中斷請求 外部引腳的快速中斷...