0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ZYNQ的创世SD NAND卡读写TXT文本实验

jim 来源:雷龙发展 作者:雷龙发展 2025-09-22 14:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在之前的介绍中,我们介绍了雷龙SD NAND卡的焊接以及用途。由于SD NAND卡具有容量大,操作简单,可插拔等的特点,经常作为大容量的存储介质用来保存数据。本实验我们来使用FPGA对雷龙SD NAND进行一个简单的读写操作。简单示范一下雷龙SD NAND的使用用途。

创建新的 Vivado 工程并命名为“rw_sd”,根据开发板型号选择相应的芯片型号。工程创建完成后创建新的 Block Design 并命名为“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 控制器

ZYNQ7 Processing System IP 核Perpheral I/O Pins创建完成后添加 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 控制器创建完成后添加 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”,如下图所示。

Run Block Automation

在弹出的页面全选所有端口,点击“OK”。

在弹出的页面全选所有端口,点击“OK”。

之后保存并验证设计的正确性。检查无误后生成顶层 HDL。之后导出硬件描述文件并打开SDK,在打开的 SDK 软件中创建一个新的工程并命名为“rw_sd”,工程模板选择空白模板。因为本实验需要用到 FATFS 文件系统,所以在板级支持包中添加文件系统的相关库函数。右键点击 rw_sd_bsp,在弹出的选项中选择“Board Support Package Setting”,如下图所示

Board Support Package Setting

在弹出的界面中勾选“xilffs”, xilffs 即为 FATFS 库,如图示

xilffs

勾选后,会在左侧 Overview 的 standalone 一栏出现 xilffs,点击 xilffs。将use_lfn 设置为 true,使能长文件名以及文件名的小写字母,点击“OK”按钮完成设置。

use_lfn 设置为 true

设置完成后,在 rw_sd_bsp→ps_cortexa9_0→libsrc 一栏下,会多出 FATFS 的库函数。

  设置完成后,在 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 rn");

Status = FfsSdPolledExample();

if (Status != XST_SUCCESS) {

xil_printf("SD Polled File System Example Test failed rn");

return XST_FAILURE;

}

xil_printf("Successfully ran SD Polled File System Example Test rn");

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:XilinxSDK2018.3dataembeddedswlibsw_servicesxilffs_v4_0example

下载验证

SD NAND下载实验 sd nand测试结果

按如图烧录

SD NAND烧录中 sd nand烧录过程SD NAND烧录成功 sd nand烧录数据成功

如图烧录成功,把雷龙SD卡拔出来,插到读卡器上。

将创世贴片SD卡拔出来,插到读卡器上读取数据将创世贴片SD卡拔出来,插到读卡器上读取数据

插到电脑,打开U盘(F:)

将创世贴片SD卡拔出来,插到读卡器上再插到PC端口读取数据SD NAND,贴片式TF卡,贴片式SD卡,北京君正,nor flash,存储,芯片,主控,小尺寸emmc,大容量SLC Nand

文件内容与程序中定义的一致,说明本次实验验证成功。

创世SD NAND作为一种新型的存储设备,正逐渐受到市场的青睐。它不仅能够支持TF卡启动的SOC,而且提供了STM32参考例程及原厂技术支持,使得开发者在使用时更加得心应手。目前,创世SD NAND的主流容量包括128MB、512MB、2GB、4GB和8GB,可以满足不同应用场景的需求。

与TF卡相比,创世SD NAND在稳定性方面有着明显的优势。同时,它的价格也比eMMC更加亲民,使得开发者在成本控制上有了更多的选择。现在,更有样品免费试用的活动,让开发者有机会亲身体验创世SD NAND的卓越性能。如果你正在寻找一款性价比高的存储设备,不妨考虑一下创世SD NAND。深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Zynq
    +关注

    关注

    10

    文章

    633

    浏览量

    49571
  • SD NAND
    +关注

    关注

    0

    文章

    124

    浏览量

    1872
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    车载DVR存储失效分析:震动环境下的TF接触不良根治方案

      创世 SD NAND是近年来在工业控制、车载电子、医疗设备、物联网终端等领域快速普及的一种贴片式存储芯片,也常被称作贴片式TF、贴片式SD
    发表于 04-08 18:05

    99.99% 稳定性:CS 创世 SD NAND 在精密仪表中的落地应用

    的电磁噪声、实验室中频繁的开关机操作,都对这些核心数据的存储构成了持续的威胁。为应对这一挑战,本文将深入介绍一套基于ST意法半导体高性能主控STM32H7B0与CS创世工业级SD NAND
    发表于 03-24 17:15

    野外数据采集系统中的稳定存储:CS 创世 SD NAND 应用分析

    。CS创世SD NAND采用高品质的SLC NAND晶圆,理论擦写寿命高达5~10万次。更重要的是,其内置的平均读写算法(Wear-Leve
    发表于 03-20 18:17

    CS创世 SD NAND测试报告

    设计的,拿到手后,可以直接插入读卡器中进行存储测试。本人在前些时,就自制了基于GL823的USB2.0读卡器。这时刚好拿来测试。 这是前些时自制的基于GL823的TF读卡器: 将CS创世 SD
    发表于 01-09 18:07

    SD读写均衡失效问题分析

    一、读写均衡失效引发的核心问题 读写均衡(磨损均衡,Wear Leveling)是SD固件通过算法将数据均匀分配到闪存芯片各单元,避免局部单元过度擦写的关键机制。瀚海微
    的头像 发表于 12-29 15:08 623次阅读
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>读写</b>均衡失效问题分析

    SD NAND、TFSD的应用领域大揭秘

    在如今这个数据爆炸的时代,各类存储设备犹如繁星般闪耀,而SD NAND、TFSD更是其中的佼佼者。它们看似相似,实则各有千秋,在不同的
    的头像 发表于 11-30 15:16 1321次阅读
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>、TF<b class='flag-5'>卡</b>、<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的应用领域大揭秘

    解锁SD NAND、TFSD的应用密码

    在科技飞速发展的今天,数据存储的需求渗透到生活与工作的每一个角落——从手腕上的智能手表,到专业摄影师的相机,再到工厂里的工业路由器,都离不开高效可靠的存储介质。SD NAND、TFSD
    的头像 发表于 11-24 11:04 727次阅读
    解锁<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>、TF<b class='flag-5'>卡</b>、<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的应用密码

    瀚海微SD NAND/TF数据读写超时(Data Transfer Timeout)问题深度解析

    数据读写超时是SD NAND/TF卡在数据传输环节的高频故障,直接导致数据传输中断、设备卡顿甚至业务停工,广泛影响消费级、工业级等多场景使用。以下从故障涉及的核心方面、深层诱因及针对性解决方案展开
    的头像 发表于 11-17 10:04 1158次阅读

    解锁存储密码:SD NAND、TFSD的应用全景

    在数据洪流的时代,存储介质就如同数字世界的基石,支撑着各类设备的正常运转。SD NAND、TFSD,虽同属
    的头像 发表于 10-29 14:24 985次阅读

    SD NAND写保护问题的分析

    说起SD NAND /SD写保护的问题,我们先分析一下出现写保护的一些原因 首先,我们先除去SD大卡的物理开关的问题,目前TF
    的头像 发表于 10-21 10:28 766次阅读
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>写保护问题的分析

    基于ZYNQ创世SD NAND读写TXT文本实验

    在之前的介绍中,我们介绍了雷龙SDNAND的焊接以及用途。由于SDNAND卡具有容量大,操作简单,可插拔等的特点,经常作为大容量的存储介质用来保存数据。本实验我们来使用FPGA对雷龙SDNAND
    的头像 发表于 09-22 14:30 699次阅读
    基于<b class='flag-5'>ZYNQ</b>的<b class='flag-5'>创世</b><b class='flag-5'>SD</b> <b class='flag-5'>NAND</b><b class='flag-5'>卡</b><b class='flag-5'>读写</b><b class='flag-5'>TXT</b><b class='flag-5'>文本</b><b class='flag-5'>实验</b>

    CS创世SD NAND在北京君正平台和瑞芯微RK平台的应用

    /mnt/sdcard/test.c echo \"测试内容\" > /mnt/sdcard/test.txt 二:SD底层协议简要介绍(由于SD NAND
    发表于 08-22 17:01

    CS创世SD NAND在北京君正平台和瑞芯微RK平台的应用

    介绍、对SD NAND进行读写操作的三大方式、SD的驱动框架介绍以及SD NAND启动,前三个板
    的头像 发表于 08-22 16:52 2939次阅读
    CS<b class='flag-5'>创世</b><b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>在北京君正平台和瑞芯微RK平台的应用

    SD—雷龙 SD NAND

    一、SD介绍 1.基本介绍 本质:nand flash + 控制芯片 1.SD ,Secure Digital Card,称为安全数字
    的头像 发表于 07-21 17:59 4134次阅读
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b>—雷龙 <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>

    【嵌入式开发】SD—雷龙 SD NAND

    ,比TF稳定,比eMMC易用。 可以看到,雷龙CS SD NAND要远远比TF小。 芯片相关封装尺寸 芯片各引脚的功能及用途如图所示,由此可知该芯片能支持两种
    发表于 07-21 17:56