文章目录
- 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论坛。
🔈欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🔈欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。