RT-Thread Studio驱动SD卡


前言

硬件平台:RT-Thread ART-Pi STM32H750XBH6开发板 H750开发板
开发软件:RT-Thread Studio
相关组件:elm FatFs虚拟文件系统、SPI驱动、SD设备驱动和SDIO
参考博客:RT-Thread Studio使用SDIO驱动SD卡挂载文件系统
官方资料:虚拟文件系统
实验目的:使用开发板上的SD卡接口,实现对SD卡数据的读和写。
ART-Pi


一、创建基本工程

1、创建Bootloader

 打开RT-Thread Studio,按 “文件 -> 新建 -> RT-Thread项目” 路径新建Bootloader工程。
具体配置如下所示:
在这里插入图片描述
 点击完成后即可得到一个Bootloader程序。
在这里插入图片描述

  • 打开该程序点击编译在这里插入图片描述
  • 编译完成后再带点击下载。、
    在这里插入图片描述

 BootLoader主要用于使用外挂Falsh存储代码时 初始化外挂的Flash、映射物理地址及地址跳转。ART - Pi使用QSPI连接8M的W25Q64。

2、创建项目工程

 打开RT-Thread Studio,按 “文件 -> 新建 -> RT-Thread项目” 路径新建led工程。
具体配置如下所示:
在这里插入图片描述
  点击完成后即可得到一个led闪烁程序。
在这里插入图片描述

  • 打开该程序点击编译在这里插入图片描述
  • 编译完成后再带点击下载。、
    在这里插入图片描述
  • 效果演示:

在这里插入图片描述


二、配置RT-Thread Settings

 双击左侧项目资源管理器下led工程的“RT-Thread Settings”打开可视化配置。
在这里插入图片描述
 打开后如下图所示。
在这里插入图片描述
 鼠标左键单击打开Fatfs、SDIO组件,Ctrl + s保存。
在这里插入图片描述
 直接编译发现有报错,没有打开BSP_USING_SDIOx。
在这里插入图片描述
 既然没打开,那就打开它就好了。SDIO属于芯片外围硬件,所以应打开硬件配置。
在这里插入图片描述
 使能SDIO,选择SDIO1。
在这里插入图片描述
 为什么是SDIO1而不是SDIO2呢?看开发板的原理图就能确定,SD卡接入了SDIO1中。
在这里插入图片描述
 重新保存配置并编译,发现没有报错。但是到这里只是成功配置组件,要实现对SD卡数据的读写还需要先挂载文件系统。
在这里插入图片描述
 因为sd卡使用的dfs属于部件,因此使用”部件自动初始化“函数对其完成注册。在终端输入”list_device“指令可以查看已经挂载的设备。
在这里插入图片描述
 挂载文件系统代码:

#include "dfs_fs.h"

int sd_init(void)
{
    rt_thread_mdelay(100);//这段延时必须加上,系统上电过程中存在延时,否则会出现先挂载后注册块设备sd0的情况
    //mkfs("elm","sd0");//挂在前需格式化
    if(dfs_mount("sd0","/","elm",0,0)==0) //挂载文件系统,参数:块设备名称、挂载目录、文件系统类型、读写标志、私有数据0
    {
        rt_kprintf("dfs mount success\r\n");
    }
    else
    {
        rt_kprintf("dfs mount failed\r\n");
    }
    return 0;
}
INIT_COMPONENT_EXPORT(sd_init);

 读写SD卡数据
在这里插入图片描述
 读写数据代码:

#include "dfs_posix.h"

void SD_RW(void)
{
    char wbuf[] = "hello world!", rbuf[30] = {0};
    int rsize = 0;
    int fd = 0;                                 //文件描述符

    //写入数据
    fd = open("/a.txt", O_WRONLY | O_CREAT);    //打开文件,如果不存在就新建一个
    if(fd>0)
    {
        write(fd, wbuf, sizeof(wbuf));
        close(fd);
        rt_kprintf("write success\r\n");
    }

    //读取数据
    fd = open("/a.txt", O_RDONLY);              //使用只读格式打开
    if(fd>0)
    {
        rsize = read(fd, rbuf, 100);
        close(fd);
        if(rsize>0)
        {
            rt_kprintf("READ(%d): %s",rsize,rbuf);
        }
    }
}

 (tips:如果要将数据追加在文件末尾而非覆盖数据,打开文件时按位或上 O_APPEND 参数)
在这里插入图片描述


三、代码分析

 因为选用的硬件平台是RT-Thread官方发布的,所以组件包对硬件已经做好了兼容无需自己去配置板上资源。
 若是使用其他硬件平台,可在 ”HAL_SD_MspInit“ 中配置具体使用到的GPIO和模式配置。(可使用CubeMx配置后替换)
在这里插入图片描述
 ART-Pi SDMMC1的IO分配:
在这里插入图片描述


四、效果验证

  • 插到电脑上直接看
    在这里插入图片描述

  • 在终端输入”cat + 文件名“
    在这里插入图片描述


总结

 当前只是实现了最基本SD卡数据的读和写,后续再继续研究文件目录的相关操作并把log存到SD卡中。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_Tam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值