贴片SD卡移植FATFS文件系统
Posted Top嵌入式
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贴片SD卡移植FATFS文件系统相关的知识,希望对你有一定的参考价值。
一、前言
手头有一块深圳雷龙的 SDIO 接口的贴片 SD 卡,挂载个文件系统把玩一下。首先介绍一下使用的贴片 SD 卡,以前使用的都是拔插式的 SD 卡,下面这个样子:
拿到的贴片雷龙 SD 卡如下图:
二、贴片 SD 卡介绍
雷龙的 SD 卡 LGA-8 封装,标准SDIO接口,兼容SPI/SD/eMMC接口,兼容各大MCU平台,可替代普通TF卡/SD卡,尺寸6x8mm毫米,内置SLC晶圆擦写寿命10万次,通过1万次随机掉电测试耐高低温,支持工业级温度-40°~+85°,机贴手帖都非常方便,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)标准的SD2.0协议普通的SD卡可直接驱动。
贴片 SD 卡的使用很简单,管脚的连接方式和普通拔插的 SD 卡一致,所以我们设计硬件时按照普通 SD 的接线方式设计就行,以小熊派开发板为例子,单线 SDIO 硬件接线如下:
我使用小熊派开发板来挂载 FATFS 到雷龙这块 SD 卡上
三、配置 CubeMX 底层接口
首先使用 CubeMX 配置底层 SD 卡接口,选择单线模式,分频设置高一点,其他参数保持默认
配置完 SD 卡后开启 FATFS 的文件系统,选择挂载到 SD 卡,文件名选择 US ,buff 放到 STACK 上(注意调大栈空间)
配置完成后生成代码,cubemx 主要是以下两个初始化函数:
四、编写命令行测试代码
使用我之前移植的命令行框架,编写测试函数
void mount(char argc, char *argv)
if (argc > 1)
if (!strcmp("init", &argv[argv[1]]))
FRESULT ret = FR_INT_ERR; ret = f_mount(&SDFatFS, SDPath, 1); if (ret != FR_OK) shell_printf("mount init failed! %d\\r\\n", ret); else shell_printf("mount init succ!\\r\\n");
else if (!strcmp("deinit", &argv[argv[1]])) FRESULT ret = FR_INT_ERR; ret = f_mount(NULL, "", 1); if (ret != FR_OK) shell_printf("mount deinit failed!\\r\\n"); else shell_printf("mount deinit succ!\\r\\n");
else
shell_printf("mount need more arguments!\\r\\n");
; void open(char argc, char *argv)
if (argc > 1)
FRESULT ret = FR_INT_ERR; ret = f_open(&SDFile, &argv[argv[1]], FA_READ | FA_WRITE | FA_CREATE_NEW); if (ret != FR_OK) shell_printf("open %s failed! code: %d \\r\\n ", &argv[argv[1]], ret); else shell_printf("open %s succ!\\r\\n", &argv[argv[1]]);
else
shell_printf("mount need more arguments!\\r\\n");
; void close(char argc, char *argv)
if (argc > 1)
FRESULT ret = FR_INT_ERR; ret = f_close(&SDFile); if (ret != FR_OK) shell_printf("close %s failed!\\r\\n", &argv[argv[1]]); else shell_printf("close %s succ!\\r\\n", &argv[argv[1]]);
else
shell_printf("mount need more arguments!\\r\\n");
; void write(char argc, char *argv)
if (argc > 1)
FRESULT ret = FR_INT_ERR; uint32_t write_num = 0; ret = f_write(&SDFile, &argv[argv[1]], strlen(&argv[argv[1]]), &write_num); if (ret != FR_OK) shell_printf("write file failed!\\r\\n"); else shell_printf("write file succ!\\r\\n");
else
shell_printf("mount need more arguments!\\r\\n");
;
void read(char argc, char *argv)
if (argc > 1)
FRESULT ret = FR_INT_ERR; uint32_t read_num = 0; uint8_t read_buff[100]; ret = f_read(&SDFile, read_buff, 50, &read_num); if (ret != FR_OK) shell_printf("read file failed! %d\\r\\n", ret); else shell_printf("read file succ!\\r\\n"); shell_printf("read dat: %s, read num %d\\r\\n", read_buff, read_num);
else
shell_printf("mount need more arguments!\\r\\n");
; |
将测试函数挂到命令行中:
const static_cmd_st static_cmd[] = "ls", shell_ls_cmd, "mount", mount, "open", open, "close", close, "read", read, "write", write, "\\0", NULL, NULL, ; |
下载代码,在命令行测试挂载以及读写函数:
读的数据有些乱码,用读卡器读出来看看:
可以看到成功写入,SD 卡挂载 FATFS 成功,命令行操作文件系统功能正常
以上是关于贴片SD卡移植FATFS文件系统的主要内容,如果未能解决你的问题,请参考以下文章
STM32+雷龙SD NAND(贴片SD卡)完成FATFS文件系统移植与测试
STM32+雷龙SD NAND(贴片SD卡)完成FATFS文件系统移植与测试
STM32CubeMX学习笔记(27)——FatFs文件系统使用(操作SD卡)