【【萌新的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(结构体指针 , 数据 , 写多少个数据 ,返回一个指针类型表示有多少数据写成功了)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值