从驱动到应用:RT-Thread环境下的SDIO开发指南

描述

目录


 

硬件介绍


 

搭建开发环境


 

配置 SDIO 驱动


 

挂载文件系统


 

文件读写测试


 

演示视频


 

源码工程


 

总结

本文主要讲述RT-Thread环境下的SDIO开发指南,基于MCXN947开发板。


 

1 硬件介绍


 

本次测评的是SDIO模块。


 

SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。


 

比如SDIO可以访问micro SD卡、SD卡等存储类设备,或蓝牙、WIFI、GPS等无线设备。

这次测试的是使用SDIO接口访问micro SD卡,即所谓的TF卡,TF卡的引脚定义和SD卡会有所不同:

驱动

FRDM-MCXN947提供对应的驱动文件是bsp_sdhc.c


 

SDHC是大容量SD卡,也就是SD High Capacity,支持最大32GB大小容量。


 

SDHC,Secure Digital High Capacity,大容量SD,也就是说,超过2G的SD都叫SDHC,因为早期的SD使用的是FAT16文件系统,并不支持大容量,而SDHC升级为FAT32,才支持2G以上的大容量。


 

2 搭建开发环境


 

Keil :v5.32,官方推荐5.36及以上

RT-Thread env-windows-1.5.0


 

构建工程:

获取 RT-Thread 当前最新的工程 https://github.com/RT-Thread/rt-thread/

通过 env 工具进入 BSP目录:

rt-thread-master\bsp\nxp\mcx\mcxn\frdm-mcxn947

拷贝 rt-thread-master\bsp\nxp\mcx\tools\sdk_dist.py到刚才的BSP目录

执行

  •  

scons --dist --target=mdk5

驱动

生成的工程在dist目录,进入到dist下的project目录,需要做以下两个修改:

删除 sdk_dist.py,上传服务器或本地备份的时候不需要此文件

修改工程目录的Kconfig,否则menuconfig会找不到Libraries文件夹下的其它Kconfig

驱动

最后在生成的工程下执行

  •  

pkgs --update

驱动

到这里,就可以在KEIL愉快的玩耍了。


 

3 配置 SDIO 驱动


 

芯片的 SDIO 外设驱动

驱动

RT-Thread 的 SD/MMC 设备驱动

驱动

这里使用的是 elm-chan fatfs,即fat32;而 DFS 是对各种文件系统的抽象层,用于适配不同的文件系统

驱动

配置完成后,保存到新的 .config, 并在env工具下执行:

  •  

scons --target=mdk5


 

4 挂载文件系统


 

在 main.c 包含头文件,编译新生成的源文件,并下载到我们的开发板。

  •  

#include"dfs_fs.h"

如果挂载失败,可以优先进行这两个动作:


 

检查卡座的引脚是否存在虚焊

TF卡没有被格式化为FAT32文件系统,插入下面第10行代码进行格式化

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

#ifdef RT_USING_SDIO    rt_thread_mdelay(2000);    if (dfs_mount("sd", "/", "elm", 0, NULL) == 0)    {        rt_kprintf("sd mounted to /\n");    }    else    {        rt_kprintf("sd mount to / failed\n");        dfs_mkfs("elm", "sd");    }#endif

我这里使用的是闪迪 16GB TF卡,使用读卡器可以看到TF卡已经成功被格式化

驱动驱动


 

5 文件读写测试


 

回到主干 rt-thread-master\examples 目录,将目录名为 file 的文件夹拷贝到 sdio-project\rt-thread\components\utilities\file


 

测试准备

驱动

这里参照其它单元测试案例写 Kconfig 文件 和 SConscript 文件

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Import('rtconfig')from building import *
cwd     = GetCurrentDir()src     = Glob('*.c')
CPPPATH = [cwd]
group = DefineGroup('FilesUnitTest', src, depend = ['RT_USING_FILE_IO_TEST'], CPPPATH = CPPPATH)
Return('group')

  •  
  •  
  •  
  •  
  •  
  •  
  •  

menu "File IO Unit Test"
config RT_USING_FILE_IO_TEST    bool"RT-Thread File TestCases"    default n    endmenu

驱动驱动驱动

配置完成后,保存到新的 .config, 并在env工具下执行:

  •  

scons --target=mdk5

在KEIL重新编译,烧录,开始测试


 

6 测试结果


 

读写的速度跟卡本身,DMA,文件系统等等因素有关,这里仅表示单个文件的读写测试结果。


 

通过串口助手发送指令 readwrite 来进行测试,MCU接收到指令后,会写入240字节到目标文件

用法:readwrite + [filename]

驱动

通过串口助手发送指令 writespeed 来进行测试,MCU接收到指令后,会写入1048576(1M)字节到目标文件,并输出计算出的写入速度,速度为565KB/s

用法:writespeed + [filename]

驱动

通过串口助手发送指令 readspeed 来进行测试,MCU接收到指令后,会去读取目标文件,这里测试是紧跟着上一写测试进行的,测试出速度为1938KB/s

用法:readspeed + [filename]

驱动

 


 

9 总结


 

在RT-Thread的设备驱动框架下,NXP现成的驱动还是十分完善,可以快速的跳过设备的驱动,进而聚焦应用程序的开发。同时RT-Thread的生态十分强大,此次测试组件也是现成的代码,基本上是“零代码”测评。


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分