cubemx的fatfs的使用(基于SPI方式SD卡)

更新时间:2023-12-01 04:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

十八、FATfs(基于SPI-SD卡)

1.基础条件:128MB的SD卡,采用SPI方式进行读写,参考十七部分。完成基本的扇区读和写 2.配置cubemx,启用fatfs

注:参数配置基本没有改变,只是把扇区的大小变为512。如果采用的是flash芯片,这个地方的参数是4096,就是一个扇区的大小,让fatfs文件扇区大小与硬件设备扇区大小匹配。 3.调整stack区大小

1 / 6

这个的计算依据还没有分析好,应该需要一个较大的RAM空间 4.移植程序,修改接口函数

Cubemx对fatfs进行优化,移植时修改的函数较少了。 (1)初始化函数

2 / 6

应为前面自编函数初始化的SD卡,因此这个返回OK就可以。注意,未修改前,这个返回的是没有硬件,不能用系统。一定要修改 (2)获得硬盘状态

(3)用户读扇区数据

把底层SD卡的扇区读函数在这里使用,注意,参数sector是扇区的号,从0,1,2,参数count是读扇区的个数。 (4)写扇区数据

3 / 6

注意,这里函数的接口缓冲区指针是个常量,因此把它进行转换复制给了一个变量 (5)读取参数操作

注:这里只是实现了几个参数,另外case后面的常量是fatfs定义好的,估计是上层调用使用,不能乱改 以上内容完成移植了 5.使用fatfs

4 / 6

思路:加载驱动器---格式化(可选)---读—写—获得磁盘状态

注意:磁盘的路径信息,存放在fatfs.C的数组中,其它.C文件使用,必须进行extern声明

具体代码可以参考 //=================

//1.挂载 FATFS fs; uint8_t res = f_mount(&fs, USERPath, 0); if (res != FR_OK) {

printf(\ } else printf(\ //2.格式化 uint8_t my_mkfs_status=0; //0为不格式化,1为格式化 if(my_mkfs_status==1) { printf(\ res = f_mkfs(USERPath, 1, 512); if (res == FR_OK) { printf(\ } else { printf(\ } }

//3.写入文件 FIL file; FIL *pf = &file; //uint8_t res;

res = f_open(pf, \ if (res == FR_OK) {

printf(\ } else {

printf(\

printf(\ }

f_printf(pf, \

res = f_close(pf); if (res != FR_OK) {

printf(\ printf(\ }

5 / 6

//4.写文件 //FIL file; //FRESULT res; unsigned int bw;

uint8_t rbuf[100] = {0};

res = f_open(&file, \ if (res != FR_OK) {

printf(\ } else { f_read(&file, rbuf, 20, &bw); printf(\ res = f_close(&file); if (res != FR_OK) {

printf(\

printf(\ } }

//5.读取磁盘状态 //FATFS fs; FATFS *fls = &fs; //FRESULT res; unsigned long fre_clust; res = f_getfree(\ if (res == FR_OK) { printf(\ /* Print free space in unit of MB (assuming 4096 bytes/sector) */ printf(\ \

128*1000*1000/1024,fre_clust*512/1024); } else { printf(\ printf(\ } //====================

使用方法比较简单,还有很多函数没有使用,例如查询文件、删除文件、修改文件等。目录的管理等。根据具体应用可以进一步细化

6 / 6

//4.写文件 //FIL file; //FRESULT res; unsigned int bw;

uint8_t rbuf[100] = {0};

res = f_open(&file, \ if (res != FR_OK) {

printf(\ } else { f_read(&file, rbuf, 20, &bw); printf(\ res = f_close(&file); if (res != FR_OK) {

printf(\

printf(\ } }

//5.读取磁盘状态 //FATFS fs; FATFS *fls = &fs; //FRESULT res; unsigned long fre_clust; res = f_getfree(\ if (res == FR_OK) { printf(\ /* Print free space in unit of MB (assuming 4096 bytes/sector) */ printf(\ \

128*1000*1000/1024,fre_clust*512/1024); } else { printf(\ printf(\ } //====================

使用方法比较简单,还有很多函数没有使用,例如查询文件、删除文件、修改文件等。目录的管理等。根据具体应用可以进一步细化

6 / 6

本文来源:https://www.bwwdw.com/article/x4ft.html

Top