Zynq(6)FATFS读写eMMC

news2024/12/27 0:53:28

在这里插入图片描述

文章目录

  • 1.简介eMMc与FAT
  • 2.eMMC与FAT的关系
  • 3.添加xilinx库
  • 4.用 FATFS完成emmc的读写
  • 5.传送门

1.简介eMMc与FAT

eMMC (embedded MultiMediaCard) 是一种嵌入式闪存存储解决方案,由NAND闪存和内置的控制器组成,NAND闪存存储数据,而控制器负责管理数据的读写、坏块管理、错误校正等任务。用在eMMC在嵌入式系统中常用于存储大量数据且要求较高读写速度的应用场景。eMMC 采用统一的 MMC 标准接口,该接口可以兼容SD卡。比起SD卡,emmc具备更好的读写性能和更快的读写速度,他可以更方便的集成在电路中。Flash、eeprom主要用来存储boot程序,或者某些与硬件绑定的信息,如板卡的ID信息等。而eMMC通常用于应用层需要稳定可靠的大批量、快速读写的场合。当然,在ZYNQ系统中,也可以配置让程序从emmc启动。
FAT(文件分配表,File Allocation Table) 是一种早期的文件系统格式,广泛用于存储设备(如硬盘、U盘、SD卡、eMMC等)的数据管理。Vitis中xilinx提供了一个库叫xilffs,使用者无需理会FATFS的内部结构和复杂的FAT协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write和f_close 等,就可以像在PC上读/写文件那样简单。

2.eMMC与FAT的关系

对于Zynq开发而言,读写eMMC有两种方式一种是raw读写,一种是FAT读写。RAW模式是直接操控存储设备,“想写哪里就写哪里,想写什么就写什么”,没有规则和限制,类似于用MIG IP核读写DDR,通过地址指针的方式在制定位置写入指定数据,这里可以把MIG类比成eMMC内部的控制器。FAT读写是通过文件系统(如FAT16、FAT32或exFAT)对存储设备进行操作,存储的数据以文件和目录的形式管理。我自己对于二者的理解:如果用raw写,那么可以在任何区域写入任何数据,而用FAT写是否可以理解为在一些特定区域写入一些特定含义的东西,这么做就是为了满足FAT的标准和规范。如果你的应用需要高效率(没有应用数据之外的额外地址开销所以效率高)、固定结构的存储且不需要与外部设备共享,选择RAW无协议读写。如果你的应用需要方便用户访问和通用存储,选择FAT文件系统读写。
eMMC与FAT文件系统的关系其实是硬件存储设备与文件系统的关系。 文件系统是操作系统用于组织和存储数据的一种逻辑结构,它并不是硬件功能的一部分,但硬件的特性会影响其使用,支持FAT文件系统主要依赖于存储设备的控制器功能,而不是存储介质本身。硬件本身(如Flash芯片)并没有"支持“或”不支持"FAT的概念。FAT文件系统可以在任何提供块设备接口的存储设备上使用。关键点在于设备的控制器是否能够提供合适的接口和管理功能。U盘、SSD、eMMC等设备由于内置控制器,可以直接支持FAT文件系统。
为了更透彻的理解相关概念之间的关系,应该搞明白一个问题,为啥U盘插上PC机之后就会被识别成一个个文件和一个个文件夹? 首先是U盘插入USB接口,PC电压检测到USB设备之后进行设备地址分配,然后复位进行设备描述,操作系统通过描述符识别到这是个存储设备。而u盘一般是fat32文件系统,Windows 可以识别这种文件系统,所以 win 电脑可以看到 u盘的文件。你看到的U盘,可以设置不同的文件系统,就类似于用window的应用,选择文件打开的格式,例如图片,可以选择png打开,也可以选择bmp打开。

By the way,一个用在FPGA上的FAT文件系统的成熟IP市场价至少在40W。

3.添加xilinx库

添加xilinx库,助力zynq开发,如下图展示了添加xilinx官方库xilffs(用于实现fat读写emmc)的方法。
在这里插入图片描述
官方提供的这些库的功能罗列如下。
libmetal是一个用于嵌入式系统的软件库,专为Xilinx嵌入式平台(如 ZCU、Zynq、Versal等)设计,提供了对硬件资源的抽象层,支持操作系统无关的硬件抽象。通常用于裸机开发或实时操作系统(RTOS)中,用来管理硬件访问和资源调度。
lwip211,lwIP(轻量级IP)是一个开源的TCP/IP协议栈,特别适用于资源受限的嵌入式系统。lwip211代表的是某个特定版本的lwIP协议栈。提供网络通信支持,允许嵌入式设备通过Ethernet、Wi-Fi等方式进行网络连接,支持TCP、UDP、ICMP等协议。
xilffs是一个文件系统库,用于Zynq上的文件系统操作。它提供了对NAND Flash、SD 卡等存储设备的访问支持。本文用的就是这个库。
xilflash库提供了对Flash存储器(如 NAND Flash 或 NOR Flash)的低级访问接口。用于读写Flash存储器,支持初始化、擦除、编程等操作。
xilfpga提供了FPGA配置和管理相关的API。它允许在PS(处理系统)端控制FPGA配置,包括加载比特流文件、管理FPGA资源等。在需要动态加载 FPGA 配置或与 FPGA 资源交互的应用中使用。
xilmailbox提供了对硬件邮件框架(mailbox)的支持,通常用于PS和PL(或不同的处理核心)之间的通信。支持多处理器间或PS和PL之间的消息传递。邮件框通常用于同步或传递小的数据块。
xilpm是一个电源管理库,用于Xilinx嵌入式平台,提供电源管理、状态监控、睡眠模式控制等功能。
xilsecure提供了安全相关的功能,如加密、解密、身份验证等。xilskey 库是用于 Xilinx 提供的硬件密钥管理的工具,通常用于加密和保护嵌入式系统。

4.用 FATFS完成emmc的读写

我在MPSoC-P5的板子学习vitis ps端读写SD卡和eMMC实验,有一个思考是,如果在vivado zynq IP核里面设置同时连接了SD卡和eMMC,那我怎么确定我的数据是写到了SD卡里面还是eMMC里面;或者说,当我有一个应用,既要读写eMMC又要读写SD卡时,理论上PS端有两个SD控制器。没有看出来在PS端应该如何做这个区分?其实是在xsdps_g.c中的XPAR_PS7_SD_0_DEVICE_ID。
本文与Hello world例程的vivado mpsoc配置一致,在导出xsa文件之后只需要在vitis平台添加fat库操作代码即可实现读写emmc操作。效果如下:
在这里插入图片描述

5.传送门

  • 我的主页
  • 【Zynq从零开始】汇总导航
  • 上一篇:Zynq(5)AXI GPIO IP核的使用
END

🔈文章原创,首发于CSDN论坛。
🔈欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🔈欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】gdb / cgdb 调试 + 进度条

🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、Linux调试器-gdb 🌟开始使用 🌠小贴士: 🌟gdb指令 🌠小贴士: ✨watch 监视 ✨打条件断点 二、小程序----进…

如何解决maven项目使用Ctrl + /添加注释时的顶格问题

一、问题描述 相信后端开发的程序员一定很熟悉IDEA编译器和Maven脚手架,使用IDEA新建一个Maven工程,通过SpringBoot快速构建Spring项目。在Spring项目pom.xml文件中想添加注释,快捷键Ctrl /,但是总是顶格书写。 想保证缩进统一…

python学习——数据的验证

文章目录 1. str.isdigit()2. str.isnumeric()3. str.isalpha()4. str.isalnum()5. str.islower()6. str.isupper()7. str.istitle()8. str.isspace()实操 以下是Python中字符串数据验证方法的详细解释: 1. str.isdigit() 这个方法用于检查字符串中的所有字符是否都…

基于Springboot+Vue的在线答题闯关系统

基于SpringbootVue的在线答题闯关系统 前言:随着在线教育的快速发展,传统的教育模式逐渐向互联网教育模式转型。在线答题系统作为其中的一个重要组成部分,能够帮助用户通过互动式的学习方式提升知识掌握度。本文基于Spring Boot和Vue.js框架&…

Web(CSS+JS+HTML实现简单界面)

前言 写的是个人博客界面,代码比较冗余,web的一个小作业。。。。。。 因为后面改了一次,有些css是直接写到了html文件中,重复的代码也比较多。 项目结构 CSS style.css * {margin: 0;padding: 0;box-sizing: border-box; }b…

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符,或者是a,或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…

经验帖 | Matlab安装成功后打不开的解决方法

最近在安装Matlab2023时遇到了一个问题: 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下: matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…

VCU——matlab/simulink软件建模

一、认识MATLAB/Simulink 1. matlab主界面 2. simulink 二、Simulink 建模基础 1. Simulink模块 2. 模型的仿真 matlab 中比较两个浮点型,不要用,采取差值和Compare To Constant的方案 3. 自动代码生成

(软件测试文档大全)测试计划,测试报告,测试方案,压力测试报告,性能测试,等保测评,安全扫描测试,日常运维检查测试,功能测试等全下载

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

Crash-SQLiteDiskIOException

目录 相关问题 日志信息 可能原因 问题排查 相关问题 蓝牙wifi无法使用 日志信息 可能原因 磁盘空间不足:当设备上的可用存储空间不足时,SQLite无法完成磁盘I/O操作,从而导致SQLiteDiskIOException。 数据库文件损坏:如果数…

PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具

PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具 PyTorch 作为一个深度学习框架,以其灵活性、可扩展性和高效性广受欢迎。无论是在研究领域进行创新实验,还是在工业界构建生产级的深度学习模型,PyTorch 都能提供所需的工具和…

Java Web 4 Maven

本文详细介绍了Maven的用途,包括依赖管理、项目结构统一和构建流程标准化;然后讲解了Maven的安装、IDEA中的集成以及依赖管理的核心概念。 1 什么是Maven? 什么是apache? 2 Maven的作用 (1)方便依赖管理 有…

无人机吊舱类型详解!

一、侦察与监测类吊舱 电子侦察吊舱 功能:主要用于侦察和监测目标,具备侦察、监听、干扰等多种功能。 设备:通常安装有电子侦察设备和通信设备,可以实时获取目标的电子信息,并将数据传输回地面指挥中心。 应用&…

数据结构与算法之美:顺序表详解

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《题海拾贝》、《编程之路》、《数据结构与算法之美》 欢迎点赞、关注&#xff01; 1、 什么…

Neo4j 图数据库安装与操作指南(以mac为例)

目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew&#xff08;可选&#xff09; 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…

Linux centOS 7 安装 rabbitMQ

1.安装前需要了解&#xff0c;rabbitmq安装需要先安装erlang&#xff0c;特别注意的是erlang与rabbitmq的版本之间需要匹配。 el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm - rabbitmq/rabbitmq-server packagecloud 3.10版本的rabbitmq 对于erlang的版本要求可以看此连接…

SpringBoot整合Mockito进行单元测试超全详细教程 JUnit断言 Mockito 单元测试

Mock概念 Mock叫做模拟对象&#xff0c;即用来模拟未被实现的对象可以预先定义这个对象在特定调用时的行为&#xff08;例如返回值或抛出异常&#xff09;&#xff0c;从而模拟不同的系统状态。 导入Mock依赖 pom文件中引入springboot测试依赖&#xff0c;spring-boot-start…

QT 中 sqlite 数据库使用

一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …

微信小程序配置less并使用

1.在VScode中下载Less插件 2.在微信小程序中依次点击如下按钮 选择 从已解压的扩展文件夹安装… 3.选中刚在vscode中下载安装的插件文件 如果没有修改过插件的安装目录&#xff0c;一般是在c盘下C:\用户\用户名.vscode\extensions\mrcrowl.easy-less-2.0.2 我的路径是&#xf…

ClouderaManager 集群搭建

前提&#xff1a;服务器之前做过域名映射、免密登录 ClouderaManager 集群 1. 组件分布规划 服务器服务器h1zk、hdfs(dn)、yarn(nm)、spark、kafka、flumeh2hdfs(nn-standy)、yarn(rm-active)、sparkh3hdfs(nn-active)、yarn(rm-standy)、hive、sparkh4zk、hdfs(dn)、yarn(n…