【【萌新的SOC学习之SD卡读写TXT文本实验】】

萌新的SOC学习之SD卡读写TXT文本实验

SD卡

Secure Digital Card

SD卡的引脚定义

我们会用的数据脚就这几个

对于我们FPGA 其实更会倾向于选择 SPI的功能

而TF卡相对于SD卡的区别在于

SD卡只有一个电源地


这里相对于原本的SPI多了一个CD引脚

CD信号是相当于一个卡检测信号 连接上 CD变为 低 没有插入卡电平就被上拉为高

文件系统 (File System)

负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。即在磁盘上组织文件的方法。

常用的文件系统

-FAT/FATFS : 大部分SD卡的文件系统

-NTFS : 基于安全性的文件系统,是windows NT所采用的独特的文件系统结构

-CDFS :CDFS是大部分的光盘的文件系统

-exFAT

SD 卡读写TXT文本实验

先把TF卡连接到开发板中,然后PS端对开发板进行读写操作。它会在TF卡中创建一个.txt的文本

朝文本里面写入数据,再把数据读出来,我们再验证写入读出的数据是否一致

因为TF端引脚都是连接到PS端上的 PS端包含了外设 通过这个外设对SD卡完成这样子的读写操作

SD/SDIO 就是我们使用的外设接口

我们先介绍SDIO 控制器的使用流程

SD/SDIO 外设有2个 一个连接到了SD卡 还有一个连接到 eMMC

在本讲中,我们并不是直接操作SDIO控制器,而是通过操作文件操作系统FATFS来完成对SDIO控制器的读写

因为我们创建的是.txt的文本是属于文件系统的范畴了

我们先看zynq-7000的结构框图

这里我们会发现有两个接口SD/SDIO 完成对SD和eMMC 的操作

SD是在MMC的基础上发展起来的

针对SD接口我们可以选择一线或者四线的方式进行传输

SDIO可以路由连接到MIO的接口 或者通过EMIO接口连接到PL引脚

eMMC 不能作为主要启动设备(第一启动设备) 只能作为第二启动设备或者说辅助启动器件

开发板有一个拨码开关 他可以控制我们的从哪里启动 是从SD卡 还是QS_PIFlash 并不支持直接从eMMC中直接启动

而SD/SDIO这种外设又是怎么和ARM交互的呢 它是通过 AHB总线---高带宽

APB 高级外设总线 ---传输数据比较小的情况

AHB与arm连接 SD/SDIO 连接外部

下面我们讲解 FATFS文件系统

文件系统 (File System)

负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。即在磁盘上组织文件的方法。

常用的文件系统

-FAT/FATFS : 大部分SD卡的文件系统

-NTFS : 基于安全性的文件系统,是windows NT所采用的独特的文件系统结构

-CDFS :CDFS是大部分的光盘的文件系统

-exFAT

FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统设计。 用标准的C语言写

FATFS是可裁剪的文件系统。

这个FATFS模块的层次结构图

最顶层是应用层,使用者无需理会 FATFS 的内部结构和复杂的 FAT 协议,只需要调用 FATFS 模块提供给用户的一系列应用接口函数,如 f_open,f_read,f_write 和 f_close 等,就可以像在 PC 上读/写文件那样简单。中间层 FATFS 模块,实现了 FAT 文件读/写协议。FATFS 模块提供的是 ff.c 和 ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。FATFS 模块提供的底层接口,它包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟。

先分配一个动态的工作区域

然后可以来挂载我们的逻辑磁盘

f_open

f_mount重新挂载

...

最后f_mount(0, " " ,0 ) ;

最后一个是取消挂载 的意思

free(ps) 释放

进行程序设计

本章的实验任务是通过xilinx SDK自带的FATFS库 , 完成对TF卡中 TXT文本读写的功能 ,并将测试结果通过串口打印出来

SD这个外设主要是对TF卡进行驱动

添加的UART外设 将TF卡的操作结果用串口打印出

f_mount-----注册或取消注册一个卷的区域

f_mount(文件系统的项目 ,逻辑驱动的序号 , 初始化的选项opt)

当这个opt=0 时,表示独立挂载 1 :检测准备好之后开始强制挂载


第一个是指针变量 指的是内容我们在上面创建的那块区域

第二个是逻辑分区的序号---这也是指针类型的变量

第三个是 1 挂载

它会返回一个值 挂载失败之后先格式化SD卡

这里面我们用到了f_mkfs 这个函数

这个函数是格式化f_mkfs( 逻辑驱动的序号 , 格式化的类型,0 ,工作区域 ,工作区域的大小)

其实它整个也是调用函数的形式

SD卡读写

第一步先打开文件

f_open(指针类型的指向我们的文件参数 ,文件名称 , 创建文件 或者选择写 )

FA_CREATE_ALWAYS

FA_WRITE

f_lseek (取地址 , 0 )

fwrite(结构体指针 , 数据 , 写多少个数据 ,返回一个指针类型表示有多少数据写成功了)

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
ZPC82104 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82104 天前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习