目录
硬件介绍
搭建开发环境
配置 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行代码进行格式化
#ifdefRT_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')frombuilding 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" defaultn 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的生态十分强大,此次测试组件也是现成的代码,基本上是“零代码”测评。