ZYNQ7000系列学习之TF卡读写(2)
ZYNQ读写实验(2)
1、实验原理
在TF卡读写实验1中,已经将每一个步骤都做完了,但是最后得到的结果是错误的。那个时候由于TF没有格式化,显示的是错误信息。在格式化后,再次实验,得到了预期的结果。此外,本人使用的开发板不具备SD卡的读写能力。

在这个基础上,通过在C语言的代码上进行修改,可以完成对TF读写操作的认识,为后续实现TF卡设计各种功能提供基础。
2、实验操作
阅读代码
想要修改代码,首先要看懂代码。而看代码,自然可以从结果向前逆向。
先看主函数main
int main()
{
init_platform();
print("zynq_sd_card_fatfs-test \r\n");
SD_Init();
Sd_Test_Write();
Sd_Test_Read();
while(1)
{
;
}
cleanup_platform();
return 0;
}
开始和结尾都是platform的操作,可以作为模块保留。
第二局语句是打印一段信息。
然后是三个功能函数和一个无限等待。重点的功能是是这三个函数。
1 int SD_Init()
2 {
3 FRESULT rc;
4 rc = f_mount(&fatfs,"",0);
5 if(rc)
6 {
7 xil_printf("ERROR: f_mount returned %d\r\n",rc);
8 return XST_FAILURE;
9 }
10 return XST_SUCCESS;
11 }
12 int Sd_Test_Write()
13 {
14 FIL fil;
15 FRESULT rc;
16 UINT br;
17 const char src_str1[] = "hsp test sd card write and read line1 string. if you see this message,sd_card fatfs test ok!\n";
18 rc = f_open(&fil,"test.txt",FA_WRITE|FA_CREATE_NEW);
19 if(rc)
20 {
21 xil_printf("ERROR : f_open returned %d\r\n",rc);
22 return XST_FAILURE;
23 }
24 rc = f_write(&fil,src_str1,sizeof(src_str1),&br);rc = f_sync(&fil);
25 rc = f_close(&fil);
26 }
27 int Sd_Test_Read()
28 {
29 FIL fil;
30 FRESULT rc;
31 UINT br;
32 const char src_str[4096]={0};
33 rc = f_open(&fil,"test.txt",FA_READ);
34 if(rc)
35 {
36 xil_printf("ERROR : f_open returned %d\r\n",rc);
37 return XST_FAILURE;
38 }
39 rc = f_lseek(&fil, 0);
40 rc = f_read(&fil,src_str,4096,&br);
41 xil_printf(src_str);
42 rc = f_close(&fil);
43 }
第一个函数先是使用FRESULT 申明了一个变量rc,从后面看好像还是整形的。使用f_mount得到一个返回值,用于判断初始化。rc为0时初始化成功。

这是在写入一次数据后再次写入数据时所得到的实验结果。可以看到,init的目的是判断TF卡内部是否有数据。
然后看一下Sd_Tset_write,这个函数定义了四个变量:FIL型,FRESULT型,UINT型和一个const char型数组。rc的作用和前面一样,就是判断某个函数是否成功执行。FIL则是获取地址的变量。br也是同样的作用。
然后看一下函数的功能。f_open,应该是新建文件。其中有文件名和文件格式。f_write,则是写入内容。他们联系的地方就是fil,这个变量可能具有标识作用。然后就是f_close,关闭文件。这是一次写操作。
后面就是Sd_Test_Read,从函数名可以看出这是一个读操作。同样是先用f_open打开文件。返回0则成功。然后是f_lseek,感觉这个函数是在寻找读取点。然后使用f_read读取数据,最后使用printf打印数据,显示在主机。然后使用f_close关闭文件。
这个程序还是比较标准的,阅读起来的问题也不是很大。
改写代码:
通过简单的尝试,代码改写需要找到相应库函数的定义,这里好像不大好做。以后有时间找到相应的资料再做吧。
3、实验结果
大体了解了ff.h的库函数,了解C在实现硬件功能时的工作原理。
ZYNQ7000系列学习之TF卡读写(2)的更多相关文章
- Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- 联盛德 HLK-W806 (十三): 运行FatFs读写FAT和exFat格式的SD卡/TF卡
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- MicroSD卡(TF卡)SPI模式实现方法
现在我们手机的内存卡多为Micro SD卡,又叫TF卡,所以Micro SD卡比SD卡常见.自己曾经也想写写SD卡的读取程序,但又不想特地再去买个SD卡,这时想起手机内存卡不是和SD卡很像吗?在网上查 ...
- FAT32文件系统--For TF卡
1. TF卡空间是如何分配的? 下面以4GB TF卡为例,通过WinHex工具进行分析,其空间分配如下图所示: FAT32把目录当做文件来管理,所以没有独立的目录区,所有的文件目录项都是在数据区里面的 ...
- TF卡的Class4/Class6/Class10
TF卡全称TransFlash卡,即T-Flash又称MicroSD,随设备微型化的需要,TF卡用途越来越广,速度也越来越快,从最初的Class2早已发展到目前主流的Class10,TF卡体积为15m ...
- TF卡速度测试对比 Class数越高速度越快
存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...
- TF卡和SD卡的区别
小型存储设备凭借低廉的价格.多样化的品种.实用等特性大量充斥在大家身边,比如智能手机手机上.数码照相机上.游戏机上(一般是掌机)等都小型电子设备都频繁的使用到这种统称为SD的产品,比如TF卡和SD卡( ...
- Android5.0以后版本把应用移动到SD或者TF卡的方法
由于手机内存较小,才8G,用的时间一久,内部存储就满了,天天删垃圾,WIFI还老断线,终于忍无可忍了,决定把应用移动到SD卡,实践下来,只有少部分App默认支持移动到SD卡,大部分程序不支持只能装在内 ...
- 【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种 的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准 ...
- 制作HP MicroServer Gen8可用的ESXi 5.x SD/TF卡启动盘
前些日子看到HP公司和京东在搞服务器促销活动,于是就入了一个 ProLiant MicroServer Gen8 的低配版 相比上一代产品,新一代 MicroServer系列微型服务器可更换处理器,还 ...
随机推荐
- Shiro实战2-Springboot集成Shiro实战
说明 最近打算打造一个简易的权限管理系统,打算用shiro做认证和授权.本篇作为springboot集成shiro的入门实战案例记录下来,希望也可以帮到大家,代码整理自网络. 技术栈 springbo ...
- 《系列二》-- 8、单例bean的创建
目录 1 源码入口概述 2 getSingleton(beanName, ObjectFactory) 的行为 总结 阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需 ...
- 2021-07-20 value!==value,JavaScript中NaN
关于NaN NaN 属性代表一个"不是数字"的number类型的字面量值.这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字. NaN的出现场 ...
- WSL2镜像文件压缩
WSL2的镜像文件(*.vhdx)支持自动扩容,但是一般不会自动缩容.一旦某次存放过大文件以后,即使后续删除,镜像文件体积仍然不会缩小,导致大量磁盘空间浪费.因此,可以定期对镜像文件进行手动压缩. 镜 ...
- xadmin后台的安装及配置使用
安装 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 在settings.py中注册如下应用 INSTALLED_ ...
- 【转载】重装系统小贴士:ssh、vscode免密登录
ssh安装 apt install openssh-server 然后到cd /etc/ssh下找sshd_config文件,打开把允许远程root登录的选项改为yes 重启ssh服务:/etc/in ...
- Python函数每日一讲 - 简洁快速学会globals()函数
引言 在 Python 中,globals() 函数是一个强大的工具,它允许您访问全局命名空间中的所有变量和函数.本文将深入探讨 globals() 函数的语法.用法以及实际应用场景,帮助大家更好地理 ...
- 【Azure 存储服务】关于Azure Storage Account(存储服务) 基于AAD用户的权限设定以及SAS key的管理问题
问题描述 如何查到一个Storage Account曾经创建过多少SAS key,这些Key是否可以回收和限定?能否基于AAD身份对 Container / Folder 进行权限的设定和管理? 问题 ...
- 【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
问题描述 错误的操作步骤: 1)更新Service Fabric 的证书,制定了次要证书(Secondary),但是只修改了Service Fabric Cluster证书,而没有指定VMSS(虚拟机 ...
- 解决 Steam for Linux 部分 Valve 游戏中文显示问题/军团要塞2的字体显示问题
解决 Steam for Linux 部分 Valve 游戏中文显示问题 发表于 Apr 7th 2019 | 分类于 Keep Digging Steam for Linux 上有许多好玩的免费游戏 ...