zynqsd的读写数据_ZYNQ7000系列学习之TF卡读写(2)

本文详细介绍了基于ZYNQ7000的TF卡读写实验,包括实验原理、C语言代码解析及实验操作。通过分析`f_mount`、`f_open`、`f_write`、`f_read`等库函数,理解了文件系统的操作过程。文章还讨论了如何改写代码以实现TF卡的不同功能,并概述了实验带来的收获,即深入理解FF.h库函数和C语言实现硬件功能的方式。
摘要由CSDN通过智能技术生成

ZYNQ读写实验(2)

1、实验原理

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

在这个基础上,通过在C语言的代码上进行修改,可以完成对TF读写操作的认识,为后续实现TF卡设计各种功能提供基础。

2、实验操作

阅读代码

想要修改代码,首先要看懂代码。而看代码,自然可以从结果向前逆向。

先看主函数main

intmain()

{

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 intSD_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 returnXST_FAILURE;9 }10 returnXST_SUCCESS;11 }12 intSd_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 returnXST_FAILURE;23 }24 rc = f_write(&fil,src_str1,sizeof(src_str1),&br);rc = f_sync(&fil);25 rc = f_close(&fil);26 }27 intSd_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 returnXST_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在实现硬件功能时的工作原理。

Zynq-7000系列之linux开发学习笔记是一系列关于在Zynq7030数据采集板上进行Linux开发的文章。在这些文章中,作者提供了关于编译Linux内核、制作设备树、安装NFS等方面的指导和经验。在其中一篇文章中,作者遇到了在挂载NFS时出现的问题,提示"wrong fs type, bad option, bad superblock"等错误信息。作者还提供了Linux内核源码的下载链接以及开发环境的相关信息。整个学习笔记的目标是让开发板能够连接外网,并通过NFS挂载到虚拟机上运行一个helloworld程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Zynq-7000系列之linux开发学习笔记:NFS配置与开发板联网(七)](https://blog.csdn.net/Claudedy/article/details/94591622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)](https://blog.csdn.net/Claudedy/article/details/90760085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值