[技术讨论] 基于ZYNQ的创世SD NAND卡读写TXT文本实验

[复制链接]
1353|0
芯片芯语 发表于 2025-9-22 14:33 | 显示全部楼层 |阅读模式
, , , ,
  在之前的介绍中,我们介绍了雷龙SD NAND卡的焊接以及用途。由于SD NAND卡具有容量大,操作简单,可插拔等的特点,经常作为大容量的存储介质用来保存数据。本实验我们来使用FPGA对雷龙SD NAND进行一个简单的读写操作。简单示范一下雷龙SD NAND的使用用途。
  创建新的 Vivado 工程并命名为“rw_sd”,根据开发板型号选择相应的芯片型号。工程创建完成后创建新的 Block Design 并命名为“rw_sd”。
  创建完成后添加 ZYNQ7 Processing System IP 核,之后双击打开 IP 核设置页面,按照下面图片所示配置相关设置。取消 PS-PL Configuration 下 FCLK_RESET0_N和 M AXI GP0 interface 的勾选;Perpheral I/O Pins 下配置 SD0 和 UART,具体分配引脚参考开发板原理图;取消 Clock Configuration 下 FCLK_CLK0 的勾选;DDR Congifuration 下配置 DDR 控制器。
  配置完成后点击“OK”,之后点击“Run Block Automation”,如下图所示。
  在弹出的页面全选所有端口,点击“OK”。
  之后保存并验证设计的正确性。检查无误后生成顶层 HDL。之后导出硬件描述文件并打开SDK,在打开的 SDK 软件中创建一个新的工程并命名为“rw_sd”,工程模板选择空白模板。因为本实验需要用到 FATFS 文件系统,所以在板级支持包中添加文件系统的相关库函数。右键点击 rw_sd_bsp,在弹出的选项中选择“Board Support Package Setting”,如下图所示
  在弹出的界面中勾选“xilffs”, xilffs 即为 FATFS 库,如图示
  勾选后,会在左侧 Overview 的 standalone 一栏出现 xilffs,点击 xilffs。将use_lfn 设置为 true,使能长文件名以及文件名的小写字母,点击“OK”按钮完成设置。
  设置完成后,在 rw_sd_bsp→ps_cortexa9_0→libsrc 一栏下,会多出 FATFS 的库函数。
  文件系统库函数添加完成后,右键点击 rw_sd->src 添加主程序源文件并命名为“main.c”,之后在编辑框中输入以下程序:
#include "xparameters.h"        /* SDK generated parameters */
#include "xsdps.h"                /* SD device driver */
#include "xil_printf.h"
#include "ff.h"
#include "xil_cache.h"
#include "xplatform_info.h"

/************************** Function Prototypes ******************************/
int FfsSdPolledExample(void);

/************************** Variable Definitions *****************************/
static FIL fil;                /* File object */
static FATFS fatfs;

static char FileName[32] = "Test.txt";
static char *SD_File;

char DestinationAddress[20] ;
const char SourceAddress[20]= "hello mizar !";

#define TEST 7

int main(void)
{
        int Status;

        xil_printf("SD Polled File System Example Test \r\n");

        Status = FfsSdPolledExample();
        if (Status != XST_SUCCESS) {
                xil_printf("SD Polled File System Example Test failed \r\n");
                return XST_FAILURE;
        }

        xil_printf("Successfully ran SD Polled File System Example Test \r\n");

        return XST_SUCCESS;
}

int FfsSdPolledExample(void)
{
        FRESULT Res;
        UINT NumBytesRead;
        UINT NumBytesWritten;
        u32 BuffCnt;
        BYTE work[FF_MAX_SS];

         int FileSize = strlen(SourceAddress);

        TCHAR *Path = "0:/";

        //初始化文件系统
        Res = f_mount(&fatfs, Path, 0);

        if (Res != FR_OK) {
                return XST_FAILURE;
        }

        //格式化SD卡
        Res = f_mkfs(Path, FM_FAT32, 0, work, sizeof work);
        if (Res != FR_OK) {
                return XST_FAILURE;
        }

        //打开一个文件,如果文件不存在,则创建一个文件,该文件的权限为可读写
        SD_File = (char *)FileName;

        Res = f_open(&fil, SD_File, FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
        if (Res) {
                return XST_FAILURE;
        }

        //指针指向文件开头
        Res = f_lseek(&fil, 0);
        if (Res) {
                return XST_FAILURE;
        }

        //向文件中写入数据
        Res = f_write(&fil, (const void*)SourceAddress, FileSize,
                        &NumBytesWritten);
        if (Res) {
                return XST_FAILURE;
        }

        //指针指向文件开头
        Res = f_lseek(&fil, 0);
        if (Res) {
                return XST_FAILURE;
        }

        //从SD卡中的文件读出数据
        Res = f_read(&fil, (void*)DestinationAddress, FileSize,
                        &NumBytesRead);
        if (Res) {
                return XST_FAILURE;
        }

        //比较写入的数据与读出的数据是否相同
        for(BuffCnt = 0; BuffCnt < FileSize; BuffCnt++){
                if(SourceAddress[BuffCnt] != DestinationAddress[BuffCnt]){
                        return XST_FAILURE;
                }
        }
        //关闭文件
        Res = f_close(&fil);
        if (Res) {
                return XST_FAILURE;
        }
        return XST_SUCCESS;
}
  输入完成后快捷键 Ctrl + S 保存并编译程序。该程序是官方例程修改后得到的,读者可以在以下路径找到官方例程,里面的注释非常详尽,可仔细阅读。
  C:\Xilinx\SDK\2018.3\data\embeddedsw\lib\sw_services\xilffs_v4_0\example
  下载验证
  按如图烧录
  如图烧录成功,把雷龙SD卡拔出来,插到读卡器上。
  插到电脑,打开U盘(F:)
  文件内容与程序中定义的一致,说明本次实验验证成功。
  创世SD NAND作为一种新型的存储设备,正逐渐受到市场的青睐。它不仅能够支持TF卡启动的SOC,而且提供了STM32参考例程及原厂技术支持,使得开发者在使用时更加得心应手。目前,创世SD NAND的主流容量包括128MB、512MB、2GB、4GB和8GB,可以满足不同应用场景的需求。
  与TF卡相比,创世SD NAND在稳定性方面有着明显的优势。同时,它的价格也比eMMC更加亲民,使得开发者在成本控制上有了更多的选择。现在,更有样品免费试用的活动,让开发者有机会亲身体验创世SD NAND的卓越性能。如果你正在寻找一款性价比高的存储设备,不妨考虑一下创世SD NAND。深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部