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
    评论
RT-Thread Studio是一款基于Eclipse的RT-Thread开发环境,它提供了一整套的开发工具,包括代码编辑器、编译器、调试器等,用于开发实时操作系统(RTOS)上的嵌入式软件。使用RT-Thread Studio,开发者可以更高效地进行实时系统的开发和调试。以下是关于RT-Thread Studio使用的一些主要特点和介绍: 1. 集成开发环境(IDE):RT-Thread Studio提供了直观的图形界面,使开发者能够轻松地创建、编辑、编译和调试RT-Thread应用程序。 2. 代码编辑器:RT-Thread Studio的代码编辑器支持多种语言,包括C/C++,开发者可以在其中编写和编辑代码。 3. 编译器:RT-Thread Studio集成了RT-Thread的编译器,可以将编写好的代码编译成可在嵌入式设备上运行的二进制文件。 4. 调试器:RT-Thread Studio提供了强大的调试工具,允许开发者在嵌入式设备上实时观察和修改代码的运行状态,以便进行调试和优化。 5. 集成工具链:RT-Thread Studio集成了RT-Thread的开发工具链,包括交叉编译工具、下载工具、性能分析工具等,方便开发者进行整个开发流程。 6. 代码版本管理:RT-Thread Studio支持代码版本管理,如Git,方便团队进行协作开发和版本控制。 7. 实时更新和文档:RT-Thread Studio提供了实时更新的RT-Thread版本和相关文档,方便开发者获取最新的功能和信息。 8. 集成仿真器:RT-Thread Studio支持多种仿真器,如QEMU、STM32CubeMX等,方便开发者在开发过程中进行模拟和调试。 使用RT-Thread Studio进行实时系统开发的一般步骤如下: 1. 安装和配置RT-Thread Studio:根据官方文档或教程,安装并配置RT-Thread Studio环境。 2. 创建新项目:使用RT-Thread Studio创建新的实时系统项目。 3. 编写代码:在代码编辑器中编写C/C++代码,实现所需的功能。 4. 编译代码:使用RT-Thread编译器将代码编译成可在嵌入式设备上运行的二进制文件。 5. 下载和部署:使用RT-Thread Studio提供的下载工具将二进制文件部署到嵌入式设备上。 6. 调试和优化:使用RT-Thread Studio的调试工具进行实时调试和性能优化。 7. 测试和发布:对部署到嵌入式设备上的软件进行测试,确保功能正常,然后进行发布。 总的来说,使用RT-Thread Studio进行实时系统开发可以提高开发效率,简化开发流程,并有助于提高软件的质量和性能。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Z_Tam

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

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

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

打赏作者

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

抵扣说明:

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

余额充值