贴片SD卡移植FATFS文件系统(SD NAND FLASH)

一、前言
 手头有一块深圳雷龙提供的贴片 cs 创世 sd nand flash,挂载个文件系统把玩一下。首先介绍一下使用的贴片 sd 卡,以前使用的都是拔插式的 sd 卡,下面这个样子:
 sd nand,贴片式tf卡,贴片式sd卡
 深圳雷龙提供的cs创世 sd nand flash 如下图:
 sd nand,贴片式tf卡,贴片式sd卡
 二、贴片 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 硬件接线如下:
 sd nand,贴片式tf卡,贴片式sd卡
 我使用小熊派开发板来挂载 fatfs 到雷龙这块 sd 卡上
 三、配置 cubemx 底层接口
 首先使用 cubemx 配置底层 sd 卡接口,选择单线模式,分频设置高一点,其他参数保持默认
 sd nand,贴片式tf卡,贴片式sd卡
 配置完 sd 卡后开启 fatfs 的文件系统,选择挂载到 sd 卡,文件名选择 us ,buff 放到 stack 上(注意调大栈空间)
 sd nand,贴片式tf卡,贴片式sd卡
 配置完成后生成代码,cubemx 主要是以下两个初始化函数:
 sd nand,贴片式tf卡,贴片式sd卡
 四、编写命令行测试代码
 使用我之前移植的命令行框架,编写测试函数
 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 nand,贴片式tf卡,贴片式sd卡
 读的数据有些乱码,用读卡器读出来看看:
 sd nand,贴片式tf卡,贴片式sd卡
 可以看到成功写入,sd 卡挂载 fatfs 成功,命令行操作文件系统功能正常
 ————————————————
 【本文转载自csdn,作者:top嵌入式】
 深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。

Dialog半导体公司为三星Galaxy Fit提供蓝牙低功耗连接方案
Google Pixel 4概念图曝光,经典的背部撞色设计大家喜欢吗?
关于全球激光智能制造基地开工建设的分析和介绍
紫光南京集成电路基地项目正式开工!
ptn设备是干什么用的
贴片SD卡移植FATFS文件系统(SD NAND FLASH)
传统汽车制造商因疫情推迟电动车计划 特斯拉将扩大领先地位
bios中英文对照表
无人机通过智能调节系统可以消除外界干扰?
鸿蒙系统首批升级名单已定 覆盖华为37款机型
柔性电路板上倒装芯片组装技术解析
如何优化舞台音响效果
RS232转pn网桥扫码枪连接plc程序
2018诺贝尔物理学奖揭晓:美法加三位科学家共同分享
加快建筑机器人应用,推动建筑业数字化转型
电气设备的日常管理
华为云人工智能引领云原生进入Cloud Native 2.0时代
脉冲信号发生器原理
曝苹果确实在开发小插件相关功能 但不会出现在iOS 14正式版中
火线/零线/地线如何区分