贴片SD卡移植FATFS文件系统

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、前言

手头有一块深圳雷龙提供的贴片 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 成功命令行操作文件系统功能正常

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6