贴片SD卡移植FATFS文件系统

news/2024/10/18 12:32:41/

一、前言

手头有一块深圳雷龙提供的贴片 CS 创世 SD NAND Flash,挂载个文件系统把玩一下。首先介绍一下使用的贴片 SD 卡,以前使用的都是拔插式的 SD 卡,下面这个样子:

深圳雷龙提供的CS创世 SD NAND Flash 如下图:

二、贴片 SD 卡介绍

深圳雷龙提供的 CS 创世 SD NAND 属于 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 成功,命令行操作文件系统功能正常


http://www.ppmy.cn/news/465018.html

相关文章

SD和SDHC和SDXC卡的区别, class与u1/u3关系

origin: https://product.pconline.com.cn/itbk/digital/ydcc/1107/2483449.html u1/u3与class2/class4/class10等指的是速度 SD和SDHC和SDXC卡的区别是什么 SD和SDHC和SDXC卡的区别是什么?SD卡,SDHC卡,SDXC卡区别在于规格不一样&#xff0c…

芯片的SD/MMC控制器以及SD卡介绍

1、MMC、SD卡、eMMC介绍 1.1、三者关联 (1)最早出现的是MMC卡,卡片式结构,按照MMC协议设计。(相较于NandFlash芯片来说,MMC卡有2个优势:第一是卡片化,便于拆装;第二是统一了协议接口&#xff0…

SD卡小结

目录 卡类型不同卡之间的对比MMCmicro vs. MicroSD参数一览接口类型写入速度视频写入速度Application 写入速度选购参考 UHSSD、SDHC和SDXC卡的区别是什么参考文献 卡类型 外置存储卡历史上出现过各种外形、标准的卡,(MMC,索尼记忆棒等等&am…

LiangGaRy-学习笔记-Day23

1、准备说明 1.1、环境准备 服务器:3台 克隆虚拟机–>起码克隆三台192.168.75.131~133关闭防火墙、关闭selinux配置/etc/hosts文件的对应关系修改IP–>/etc/sysconfig/network-scripts 克隆虚拟机 点击虚拟机–>设置–>克隆–>克隆–>然后默…

(2023最新版)互联网大厂1120道Java面试真题附答案详解

很多 Java 工程师的技术不错,但是一面试就头疼,10 次面试 9 次都是被刷,过的那次还是去了家不知名的小公司。 问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。 应届生:你该如何准备简历&#…

numpy 笔记:histogram

1 方法介绍 计算数据的直方图 numpy.histogram(a, bins10, rangeNone, densityNone, weightsNone) 2 参数介绍 a输入数据,直方图是在展平(flatten)的数据上计算的bins bins 是int ——>定义给定范围内等宽 bin 的数量bins是序列 ——&…

仿真软件计算机配置,电脑配置关于ANSYS等仿真软件,AMDcpu可选择吗?

不建议采用AMD处理器。 Ansys等仿真软件涉及大量科学运算,其底层通常采用MKL进行加速,众所周知MKL对AMD处理器基本上是负优化。当然网上也有通过修改环境变量的方式强制开启MKL支持,但这种做法没有得到官方测试和支持,稳定性无法保…

电磁场仿真软件ANSYS Electronics下载附安装教程

ANSYS Electronics电磁分析是一款专业的电磁场仿真软件,适用于各种领域的电子和机械工程应用。它提供了强大的电磁场仿真和分析功能,可以帮助用户更好地理解和优化电子和机械系统中的电磁性能。 作为一种专业的电磁场仿真软件,ANSYS Electron…