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系列微型服务器可更换处理器,还 ...
随机推荐
- Java 使用SimpleDateFormat格式化日期
Java 使用SimpleDateFormat格式化日期,这里只涉及最实用的方面. 用途 用于格式化日期和解析日期类型字符串. formatting (date -> text), parsin ...
- Java并发编程实例--17.使用read/write锁同步数据访问
锁机制带来的最有意义的改进是提供了ReadWriteLock接口及其实现类ReentrantReadWriteLock. 这个类有2个锁,一个针对读操作另一个针对写操作. 可以有多个线程使用读操作,但 ...
- win32 - 使用VerQueryValue获得应用程序的名称
比如: Google Chrome: 类似于任务管理器中显示名字,见下图 那么我们就需要使用VerQueryValue, 从指定的版本信息资源中检索指定的版本信息.若要检索适当的资源,在调用VerQu ...
- vscode中python类型注解插件及自动格式化
# 插件名称 Python Type Hint # 如何ctrl+s保存时格式化,推荐安装yapf包 (flake8貌似不支持有类型注解的) 1.安装yapf包:pip install yapf 2. ...
- 进程之间共享数据Manager,线程相关使用Thread,用类定义线程,守护线程setDaemon,线程锁Lock,线程信号量Semaphore---day32
1.Manager # ### Manager (list列表,dict字典)进程之间的共享数据(列表或字典等) from multiprocessing import Process,Manager ...
- win上vscode配置ffmpeg
参考博客https://blog.csdn.net/leixiaohua1020/article/details/38868499 https://blog.csdn.net/weixin_37515 ...
- Android的BLE广播数据包解析---Android系列, 蓝牙技术(含BLE)
一.引言 理解和分析这个数据包结构(这里面也涉及广播间隔时间的设置,设备广播数据间隔设置长了,会影响设备被发现的效率:设置短时,又响应功耗). 我们所说的BLE设备,其实是有区分有两种角色 Centr ...
- C++ //提高编程 模板(泛型编程 STL) //模板不可以直接使用 它只是一个框架 //模板的通用并不是万能的 //语法 //template<typename T> //函数模板两种方式 //1.自动类型推导 必须推导出一致的数据类型T,才可以使用 //2.显示指定类型 模板必须确定出T的数据类型,才可以使用
1 //C++提高编程 模板(泛型编程 STL) 2 //模板不可以直接使用 它只是一个框架 3 //模板的通用并不是万能的 4 //语法 5 //template<typename T> ...
- .net中最简单的http请求调用(比如调用chatgpt的openAI接口)
支持.Net Core(2.0及以上)/.Net Framework(4.5及以上),可以部署在Docker, Windows, Linux, Mac. http请求调用是开发中经常会用到的功能,因为 ...
- php编写日历类
<?php /** * 日历类 * Class Calendar * @author fengzi * @date 2022-05-05 15:42 */ class Calendar{ pro ...