zynq linux tf卡系统升级,zynq之TF卡写入常见问题
zynq之TF卡写入常见问题
1、基本原理
前面做过zynq的TF读写实验,使用串口返回了实验所需的现象。那个时候也没有深究头文件"ff.h"里的几个常用的函数。这次需要使用TF卡做实验时发现很多操作都不大一样,不能够简单的重复,这里把几个常见的问题列举出来,方便以后的查阅。
2、实际问题
先用一段完整的代码:
#include #include"xil_printf.h"#include"xdevcfg.h"#include"xparameters.h"#include"ff.h"
int SD_Init(void);int Sd_Test_Write(void);intmain()
{
SD_Init();
Sd_Test_Write();while(1)
{
;
}return 0;
}staticFATFS fatfs;intSD_Init()
{
FRESULT rc;
rc= f_mount(&fatfs,"",0);if(rc)
{returnXST_FAILURE;
}returnXST_SUCCESS;
}intSd_Test_Write()
{
FIL fil;
FRESULT rc;
UINT br;const char src_str1[] = "t";
rc= f_open(&fil,"tesc.txt", FA_OPEN_ALWAYS |FA_WRITE);if(rc)
{
;
}
rc= f_lseek(&fil, f_size(&fil));
rc= f_write(&fil,src_str1,sizeof(src_str1),&br);
rc= f_lseek(&fil, f_size(&fil));
rc= f_write(&fil,"t/n",sizeof("t/n"),&br);//rc = f_sync(&fil);
rc = f_close(&fil);
}
代码中几个重要的部分如下:
SD_Init函数中的f_mount是启动SD卡的分区的,一般一次就足够了,可以获得SD卡的地址方便后面函数使用。其他的判断返回语句都是用于显示地址载入是否成功。f_mount同样可以用于注销工作区,f_mount(0,NULL)就可以注销0为根目录的工作区。
Sd_Test_Write函数中比较关键的函数有:f_open , f_lseek , f_write , f_sync,f_close , f_size;
(1)f_open
打开文件的,也可以用于创建文件,第一个参数是文件对象的地址,第二个是字符串名称,第三个是对应相关的模式。
FA_OPEN_ALWAYS:总是打开模式,有则打开,无则创建,反正要执行到底。
FA_OPEN_EXISTING:存在打开模式,有才打开,无则失败,需要确认有文件才执行。
FA_CREATE_NEW:创建新文件模式,无才创建,有则失败,需要确认没有文件才执行。
FA_CREATE_ALWAYS:总是创建模式,无则创建,有则覆盖创建(原文件被覆盖),反正要建新文件。
FA_WRITE:写模式,允许写入数据
FA_READ:读模式,允许读取数据
显然,前面四种模式是执行模式,后面两种是权限模式,执行和权限可以同时设置。
注意总是打开和总是创建的区别,两者最后都会生成一个文件,总是打开模式会留有已存文件,而总是创建模式只会出新文件。
(2)f_lseek
用于设置起始操作点,第一个参数还是文件对象的地址,第二个可以是数字表示长度,也可以是专门的文件大小的类。这里可以配合f_size(文件对象的地址)得到的文件长度来设置为文件尾为初始操作。
(3)f_write
用于写入数据的函数。第一个参数依旧是文件对象的地址,第二个是字符串或者数组地址(也可能有其他的,还没有遇到),第三个是字符长度,这里可以使用sizeof函数读取,第四个是无符号整型变量的地址,用于指针计数。第四个参数的作用暂时不清楚。
这里需要注意的是,在打开文件之后,如果进行多次的f_write操作,写入的字符串不能太大,否则容易出现乱码。也可以提高写入数据的长度(具体多大根据测试可知,一般需要提高到256的整数倍才可以避免乱码)。这也是f_write不好作为SD卡写入的函数的原因,容易浪费资源。找资料时发现可以使用f_printf,有时间再测试一下。
(4)f_sync
这个好像是一个用于检查的函数,写入失败可能会有一些提示,由于没有测试这个函数,就不好多解释了。参数也就是文件对象的地址。
(5)f_close
关闭文件。这个就一个参数,文件对象的地址。
test my_sd function!test my_sd function!test my_sd function!t
t
t
t/n
这个是开头源码产生的文件的内容,可以参考一下(不完全是,还有其他操作的内容)。
3、概括小结
总结一下文件写操作的基本步骤:
创建工作区 == 打开移动存储卡
打开文件 == 打开文件(这里也可以通过转义字符实现目录的构建)
确认写入起点 == 鼠标点击某处
写入特定长度字符 == 键盘输入数据
检查文件 ==确认输入正确
关闭文件 == 关闭文件
关闭工作台 == 拔出移动存储卡
这就是写操作的基本流程与PC操作的基本流程的对应关系。
至于读操作,基本原理是一样的,就是将f_write换成f_read。两者的参数都是一样的,注意f_open的工作模式即可。注意存储数据需要使用字符串数组存储。
zynq之TF卡写入常见问题
zynq linux tf卡系统升级,zynq之TF卡写入常见问题相关推荐
- zynq linux内核出错,Xilinx Zynq Linux内核源码编译过程
1.交叉编译环境的安装配置 1) +Xilinx+Tools 2.uboot的编译 1)下载uboot源代码 下载uboot源代码,务必要下载tar.gz格式的文件,地址: https://githu ...
- ZYNQ Linux 移植:包含petalinux移植和手动移植debian9
问题: 1.ZYNQ Linux启动流程: BOOTROM→FSBL→Uboot→Kernel→RootFS 环境: 虚拟机ubuntu16.04 petalinux2018.3 vivado2018 ...
- ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)
ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实 ...
- linux ps-pl中断,zynq linux驱动之PL-PS中断
PC:Windows 10 虚拟机:ubuntu 16.04 vivado:2017.04 PetaLinux:2017.04 开发板:黑金AX7010 根文件系统:debian8 --------- ...
- zynq linux开发与普通ARM平台的不同点
zynq系列 linux开发特点 前言 平台简介 开发方式 使用petalinux直接配置 使用源码工程传统开发 启动linux文件的区别 1.patelinux配置开发 2.使用源码工程开发 pin ...
- zynq Linux软件中断,zynq linux驱动之PL-PS中断【转】
PC:Windows 10 虚拟机:ubuntu 16.04 vivado:2017.04 的的PetaLinux:2017.04 开发板:黑金AX7010 根文件系统:debian8 ------- ...
- ebaz s9 zynq linux中关于网络的一些小问题
ebaz s9 zynq linux中关于网络的一些小问题 在使用petaalinux 编译ebaz的linux时,如果只按照某金与某原子的linux教程制作linux系统会卡死在内核启动的过程中.其 ...
- ZYNQ + Linux
ZYNQ Linux操作系统移植说明文档 http://xilinx.eetrend.com/content/2019/100018437.html 1,组成 ZYNQ上面移植Linux操作系统包括四 ...
- ZYNQ Linux 添加I2C-RTC驱动
原文链接:ZYNQ:Linux添加I2C-RTC驱动 硬件情况 使用的是DS1338这款RTC时钟芯片,I2C总线对应到PS端的I2C1. 配置 内核 添加有关的驱动: 因为DS1338用的驱动与DS ...
最新文章
- 关于项目数据库设计--投票系统
- [论文笔记] A model for correlated failures in N-version programming(IIE Trans, 2004)
- [OSDI 16] Wukong : 基于RDMA的高并发、快速的分布式RDF Graph Query系统
- Android小项目源码汇总
- 机器学习快速截图工具matlab版本——文件夹批量处理(原创)
- JVM插桩之一:JVM字节码增强技术介绍及入门示例
- 笔记整理——linux程序设计
- C语言里的几个拷贝函数memcpy、memset、strcpy、strncpy
- leetcode-40-组合总和 II
- Spring源码学习笔记:经典设计模式之策略模式
- ubuntu opencv4 需要的依赖
- 转DateTimePicker 控件的使用
- libjpeg、libpng使用方法
- 局域网SDN技术硬核内幕 一 分布式任意播网关
- linux下批量修改文件名称
- Oracle number类型详解
- Docker真实应用场景案例解析——ASSA ABLOY
- Beijing's Antitrust Blunder
- VirusTotal 为 Chrome 和 Firefox 发布 VT4Browsers 扩展
- 解决Vue history模式下使用嵌套路由打包部署后刷新页面为空白页