第一次在CSDN上写这些东西,技术也不是很好,记录一下自己的学习过程,望各路大神见谅。
使用FATFS文件系统前需要阅读一些相关的文档,起码知道各个函数的功能。这里介绍创建文件的方式(自己尝试过的)。本人使用的是正点原子的库,调试时使用的是正点原子的USMART。
#define FA_READ 0x01
#define FA_OPEN_EXISTING 0x00
#if !_FS_READONLY
#define FA_WRITE 0x02
#define FA_CREATE_NEW 0x04
#define FA_CREATE_ALWAYS 0x08
#define FA_OPEN_ALWAYS 0x10
#define FA__WRITTEN 0x20
#define FA__DIRTY 0x40
以上为正点原子库里面定义的宏,但是USMART,用串口 调试时无法用宏,只能使用后面的数字(0x01)
1.mf_mkdir(); 创建新文件夹
mf_mkdir("0:lzkfile");
在SD卡里面创建一个lzkfile文件夹
2.mf_open;打开/创建文件
mf_open("0:lzkfile/2018.txt",0X10);
在原先创建的lzkfile文件夹里面再创建一个2018.txt文件。想往txt写数据还需要敲mf_open("0:lzkfile/2018.txt",0X02)
注意,使用USMART调试时不能使用mf_open("0:lzkfile/2018.txt",0X02|0X10),否则会识别提示参数错误。
3.mf_write();写数据
mf_write("123456789",9);
在2018.txt文件里面写入123456789九个数据 ;
4.mf_lseek();寻址位移
mf_lseek(9);
上面已经写入了九个数据,因此需要位移9个再从后面继续添加新的数据;再敲mf_write("987654321",9);
5.mf_close();关闭
每次写完数据都需要关闭文件,不让之前写的内容就无法存进文件里面;需要特别注意;
6.mf_read();读数据
执行读操作前要先定位到之前存文件的位置;敲mf_open("0:lzkfile/2018.txt",0X1);
再敲mf_read(0x18)-——因为之前存了18个数字,当然也可以使用高级点的方法,读取到文件的数据的结尾,完成自动续字功能。
下面是串口调试界面的内容
/*******************************/
mf_mkdir("0:lzkfile")=0X0;
mf_open("0:lzkfile/2018.txt",0X10)=0X0;
mf_open("0:lzkfile/2018.txt",0X2)=0X0;
mf_write("123456789",0X9)
Begin Write file...
Write data len:9
Writed data len:9
Write data over.
=0X0;
mf_lseek(0X9)=0X0;
mf_write("987654321",0X9)
Begin Write file...
Write data len:9
Writed data len:9
Write data over.
=0X0;
mf_close()=0X0;
mf_open("0:lzkfile/2018.txt",0X1)=0X0;
mf_read(0X12)
Read file data is:
123456789987654321
Readed data len:18
Read data over
=0X0;
mf_close()=0X0;
/*****************************************/
以上是我搞自学所用到的几个函数。FATFS里面的其他函数暂时还没使用,后面会继续学习操作。