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

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

3天内不再提示

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

深圳市雷龙发展有限公司 2025-09-22 14:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在之前的介绍中,我们介绍了雷龙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 \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 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年,专业提供小容量存储解决方案。

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

    关注

    16

    文章

    1747

    浏览量

    140459
  • Zynq
    +关注

    关注

    10

    文章

    625

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【紫光同创国产FPGA教程】【第八章】SD读写实验

    SD是现在嵌入式设备重要的存储模块,内部集成了nand flash控制器,方便了主机的的管理。本实验主要是练习对sd
    的头像 发表于 02-05 11:35 9147次阅读
    【紫光同创国产FPGA教程】【第八章】<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>读写实验</b>

    STM32+SD NAND(贴片SD)完成FATFS文件系统移植与测试

    贴片式SD,使用起来与普通的SD一样,简单的区别就是:比TF稳定,比eMMC便宜。 下面章节里会详细介绍下 CS
    的头像 发表于 07-17 17:24 1.1w次阅读
    STM32+<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>(贴片<b class='flag-5'>SD</b><b class='flag-5'>卡</b>)完成FATFS文件系统移植与测试

    基于Zynq FPGA对雷龙SD NAND的测试

    文章目录 一、SD NAND特征 1.1 SD简介 1.2 SDBlock图 二、
    发表于 12-22 17:43

    CS 创世SD NAND FLASH 存储芯片,比TF更小巧轻便易用的大容量存储,TF替代方案

    文章目录   介绍   创世SD   引脚   与NOR Flash存储比较 介绍   SD NAND FLASH(Secure Digi
    发表于 01-24 18:30

    关于SD NAND 的概述

    以其卓越的性能、可靠性和小巧的尺寸,受到市场的广泛关注和应用。   2.CS创世SD NAND的特点   1. 小巧的尺寸:采用6x8mm LGA-8封装,便于机器贴片,解决了传统TF
    发表于 12-06 11:22

    arduino学习笔记18 - SD读写实验

    本次实验使用arduino驱动SD,在SD中进行文件读写。需要说明的是arduino的
    发表于 10-24 10:09

    SD NAND Flash哪家好?CS品牌(创世)最佳选择

    `  CS品牌创世SD NAND内置的控制器可以支持3D TLC的管理,功能非常强大,读写速度最高支持到10MB/S,满足物联网和可穿戴设备的需求,并且兼容市面主流主控。    支持S
    发表于 09-29 16:45

    什么是tSD/qSD?CS创世 SD NAND又有什么区别呢?

    /TF。  tSD和qSD的主流容量是8GB和16GB。 但是后来,由于各种原因,这两款产品相继退出市场,如今CS创世 SD NAND
    发表于 06-09 14:46

    基于FPGA的SD的数据读写实现(SD NAND FLASH)

    文章目录1、存储芯片分类2、NOR Flash 与 NAND Flash的区别3、什么是SD?4、什么是SD NAND?5、
    发表于 12-16 17:18

    【正点原子STM32精英V2开发板体验】CS SD NAND在本开发板上的测试-是时候将TF换为SD NAND了!

    打印如下 以上测试可以看出,用SD的程序完全可以不做任何修改应用于CS SD NAND, 软件可以无缝切换。 总结CS创世
    发表于 04-18 23:03

    CS SD NAND在STM32精英V2开发板的测试-是时候将TF换为SD NAND

    \\\\2,标准例程-HAL库版本\\\\实验34 SD实验 编译下载运行,可以看到串口打印如下 以上测试可以看出,用SD
    发表于 09-26 17:40

    ARM基础应用实验06_SD读写

    ARM嵌入式应用程序架构设计实例精讲--ARM基础应用实验06SD读写
    发表于 07-08 11:08 0次下载

    ARM基础应用实验_SD读写

    电子专业单片机相关知识学习教材资料——ARM基础应用实验06SD读写
    发表于 09-13 17:23 0次下载

    CS创世SD NAND的存储芯片应用方案

    NAND FLASH,嵌入式sd,工业级sd,单片机 nand flash,贴片式TF
    的头像 发表于 11-15 18:09 1296次阅读
    CS<b class='flag-5'>创世</b><b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>的存储芯片应用方案

    什么是SD NAND存储芯片? SD NAND与TF的区别

    什么是SD NAND?它俗称贴片式T,贴片式TF,贴片式SD,贴片式内存
    的头像 发表于 01-06 14:35 3196次阅读
    什么是<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>存储芯片? <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>与TF<b class='flag-5'>卡</b>的区别