Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
risc-v_RISCV
SDIO总线
先楫HPM_RISCV
【先楫HPM6750测评】RT-Thread SDIO驱动和文件系统
发布于 2022-06-26 22:13:46 浏览:1682
订阅该版
[tocm] 开始本篇实验前,需要搭建RT-Thread开发环境,可以参考我之前的帖子:[http://bbs.eeworld.com.cn/thread-1205739-1-1.html](http://bbs.eeworld.com.cn/thread-1205739-1-1.html) 在HPM6750上使用RT-Thread驱动SD卡实现文件读写只需要三步: - 配置FATFS和SDIO功能 - 编译项目代码 - 烧录二进制到开发板 PS:本篇内容特点——实操性强,异常简单,有手就行。 ## 一、准备工作 ### 1.1 准备好开发板和SD卡 开始本篇实验之前,需要准备一个MicroSD卡,我这里准备的是一个32G的铠侠蓝卡: ![kioxia_sdcard.png](https://oss-club.rt-thread.org/uploads/20220626/7ed003fbde22b9cc7ca6a880d047fb96.png.webp "kioxia_sdcard.png") ### 1.2 创建RT-Thread项目 首先,使用RT-Thread Studio创建名为hpm_sdio_test的项目: ![01_create_project.png](https://oss-club.rt-thread.org/uploads/20220626/ac84daec722da9969ef91d2d1a892c9d.png "01_create_project.png") 注:如果已有RT-Thread项目,则可以跳过此步骤。 ## 二、配置RT-Thread *这里仅以RT-Thread Studio为例,对RT-Thread进行配置。除此之外,使用RT-Thread的Env工具,在命令行环境下进行相关配置也是可以的。* ### 2.1 打开FATFS和SDIO组件 创建项目后,打开RT-Thread Settings,开启FATFS和SDIO配置: ![enable_fatfs_sdio.png](https://oss-club.rt-thread.org/uploads/20220626/2db8d07baca93ffa9c0de803e1993732.png.webp "enable_fatfs_sdio.png") 可以看到,打开的组件,图标显示为彩色。这里的SDIO属于RT-Thead驱动框架的SDIO部分。 为了方便观察实验现象,这里最好再打开SDIO组件的调试日志: ![enable_rt_sdio_debug.png](https://oss-club.rt-thread.org/uploads/20220626/7fa253f28890fca450d8db5e3f188a8c.png "enable_rt_sdio_debug.png") 图中顶栏的几个部分,对于RT-Thread Studio创建的RT-Thread项目,通常而言: - 内核栏中的属于内核组件配置,相关源码位于rt-thread子目录; - 组件栏中的属于系统组件配置,相关源码位于rt-thread/components子目录; - 软件包栏中的属于三方组件配置,相关源码默认不在项目中;在打开相应配置并保存后,才会下载到项目的packages子目录; - 硬件栏中的属于BSP配置,相关源码通常在board子目录; ### 2.2 打开SDIO驱动 前面打开的仅是SDIO驱动框架,要使用SDIO功能,还需要打开HPM开发板的SDXC驱动: ![enable_hpm_sdxc_driver.png](https://oss-club.rt-thread.org/uploads/20220626/6af886e2457b49675ececdc8daea42a0.png "enable_hpm_sdxc_driver.png") 修改完成,Ctrl+S保存修改。 ## 三、编译、烧录、运行 ### 3.1 编译项目代码 完成上面的配置工作后,Ctrl+B编译项目: ![rtt_build_done.png](https://oss-club.rt-thread.org/uploads/20220626/eb26eb0e48f9ed72c4a9a8ad623cfbc6.png "rtt_build_done.png") 编译完成后,可以在控制台看到Flash和RAM占用情况。 ### 3.2 烧录程序 编译成功后,我们需要将生成的二进制程序代码文件烧录到开发板上。 开始测试之前,我们需要先将MicroSD卡插入开发板(RT-Thread目前还不支持SD卡热插拔): ![insert_sdcard.png](https://oss-club.rt-thread.org/uploads/20220626/86e4fc491dfcbaba9ca80a8df0c81cb8.png.webp "insert_sdcard.png") 插入SD卡后,将开发板通过USB线连接到PC。 此时,我们可以看到,正面的SD卡指示灯已经亮起了: ![hpm_sdcard_led.png](https://oss-club.rt-thread.org/uploads/20220626/7624e7e5e3abb228cdeb5dc63b9823d5.png.webp "hpm_sdcard_led.png") ### 3.3 运行程序 接着,回到RT-Thread Studio,用Ctrl+Alt+D快捷键,将编译好的程序烧录到开发板上。 烧录完成后,我们就可以在串口终端看到——已经检查到sd卡了: ![rtt_sdio_test_start.png](https://oss-club.rt-thread.org/uploads/20220626/bf885b527e4d735c04e984af09dd3f31.png "rtt_sdio_test_start.png") 可以看到,RT-Thread版本信息已经打印出来了,同时看到了熟悉的msh提示符。 基于RT-Thread的项目默认情况下开启了msh,并且将UART0串口初始化为console输入输出。因此,我们可以在串口中断软件中,输入msh支持的命令,查看命令的输出。 ## 四、在msh中操作SD卡 烧录完成后,我们就可以在RT-Thread的msh环境中愉快地操作SD卡了。本节我将在串口终端中演示——如何在HPM6750开发板上使用RT-Thread提供的文件系统、目录、文件操作相关命令。 首先,我们可以通过help命令查看此时msh中支持哪些命令: ![rtt_help.png](https://oss-club.rt-thread.org/uploads/20220626/acea7f2154685e211116b236a858dbd7.png "rtt_help.png") 可以看到,这里有很多命令,我们接下将会使用到的有: - 文件操作命令——ls/cp/mv/cat/rm - 可以写文件的命令——echo - 目录操作命令——cd/pwd/mkdir - 文件系统操作命名——mkfs/mount/umount/df 使用过Linux的朋友应该会对上面这些命令感到熟悉。 接下来,我将会在msh中演示——如何通过这些命令对SD卡进行一些操作。 ### 4.1 查看块设备 我们可以在串口终端内使用list_device命令查看设备: ![rtt_list_device.png](https://oss-club.rt-thread.org/uploads/20220626/2d508032817f53a0ef2b6fbf285d3059.png "rtt_list_device.png") 此时,我们可以看到已经有了一个名为“sd0”的块设备。 ### 4.2 格式化SD卡 初次使用的SD卡,可能没有文件系统,或者文件系统不是FAT格式的,需要将SD卡格式化为FAT文件系统,RT-Thread后续才能挂载成功。 **注意:**格式化操作会导致SD卡上已有数据全部丢失;因此,在执行格式化操作前,请确认SD卡上没有重要数据,或者你已对SD卡上的重要数据进行了备份。 接下来,我们可以通过mkfs命令对SD卡进行格式化: ![rtt_mkfs.png](https://oss-club.rt-thread.org/uploads/20220626/65a6dec87b529c9cb9f750092d8d6c5e.png "rtt_mkfs.png") mkfs执行会持续一段时间,请耐心等待(具体因不同SD卡容量和速度等级而异,我的32GB卡消耗了几秒钟)。 ### 4.3 挂载文件系统 接下来,我们可以在串口终端内使用mount命令将SD卡挂载到根目录: ![rtt_mount_fs.png](https://oss-club.rt-thread.org/uploads/20220626/1e7817e1e6025aaa1903c456c6643e4f.png "rtt_mount_fs.png") 这里,我先使用了mount -h查看了mount命令的用法。 另外需要注意的是,fstype参数使用的是elm(这里的elm实际就是FATFS)。 ### 4.4 简单的文件读写测试 前面提到echo命令比较特殊,可以写文件,接下来使用echo写文件,cat读文件,ls查看文件: ![rtt_echo_cat_ls.png](https://oss-club.rt-thread.org/uploads/20220626/a87080279c96b9712cb33ee53a33e1b2.png "rtt_echo_cat_ls.png") 这里使用了ls、echo、cat命令,进行了文件读写操作。 ### 4.5 简单的目录操作测试 接下来,进行简单的目录操作演示。 ![rtt_pwd_mkdir_cd.png](https://oss-club.rt-thread.org/uploads/20220626/d6324aab6e70fdfbffcdf74fa2c4f54b.png "rtt_pwd_mkdir_cd.png") 这里首先使用了pwd查看当前工作目录,然后演示了ls、mkdir、cd命令; 如果你是对RT-Thread了解不多的朋友,看到这里可能会非常惊奇——在一个可以运行在单片机的RTOS上,居然可以这么方便的进行文件系统、目录、文件操作。 ## 五、业务代码中使用SD卡 前面都是使用命令进行相关操作的,实际项目中往往需要在业务代码中使用前面的那些功能,包括文件系统、目录、文件操作。 ### 5.1 使用代码进行相关操作 所谓“授人以鱼不如授人以渔”,这里不准备展开介绍前面所有命令行操作如何用代码实现,只介绍如何找到前面那些操作的源码实现。总体来说,主要有两个方法: - grep大法 - grep结合正则表达式进行搜索 - 使用其他你熟悉的工具也是可以的 - RTFSC(read the f**king source code) - 根据搜索到的位置打开文件并阅读源码 对,会这两招就可以了(找到之后该干什么不用我说了吧)。 下面以搜索mount命令的实现代码为例进行演示。我们知道RT-Thread的msh命令是通过MSH_开头的宏注册到命令列表中的。因此可以搜索: ![rtt_grep_mount.png](https://oss-club.rt-thread.org/uploads/20220626/8622cd4e8b0d6124c5d4d7f114878c0d.png.webp "rtt_grep_mount.png") 接下来,就可以打开./rt-thread/components/finsh/msh_file.c文件,跳转到526进行查看了: ![rtt_vim_mount.png](https://oss-club.rt-thread.org/uploads/20220626/2d37e0552fa326aaade41e30fdb8f7b7.png.webp "rtt_vim_mount.png") 可以看到这里调用了dfs_munt实现了文件系统挂载功能。 ## 六、完善细节 绝大部分文件系统都有文件的创建、修改时间信息,FATFS也不例外。因此,为了能够让SD卡上文件具有正确的创建、修改时间信息正常,建议使用SD卡的同时启用RTC(Real Time Clock)以及NTP(Network Time Protocol)对时功能。本节主要介绍如何开启RT-Thread的RTC和NTP对时功能。 ### 6.1 使能RTC 在RT-Thread系统中,RTC的实现有两种,一种是纯软件方式,另一种是硬件方式。 软件方式的RTC,RT-Thread内核已经有了完整的实现,一般用于没有硬件RTC的设备上(或者硬件RTC驱动还没有支持的情况下)。RT-Thread的硬件RTC,和其他硬件功能类似,有RTC驱动框架和RTC硬件驱动两部分。其中,RTC驱动框架已有RT-Thread内核实现,RTC硬件驱动由厂商实现(一般通过BSP或者CSP提供出来)。 软件模拟RTC以及RTC驱动框架的配置项可以通过RT-Thread Settings进行设置: ![rtt_kernel_rtc.png](https://oss-club.rt-thread.org/uploads/20220626/c614fcd4d787b356883c917a5b04f140.png "rtt_kernel_rtc.png") HPM6750的BSP中已经实现了RTC硬件驱动,我们可以在RT-Thread Settings中设置硬件RTC功能: ![enable_rtc_config.png](https://oss-club.rt-thread.org/uploads/20220626/bc2407a548552db196af7c76a32e707a.png "enable_rtc_config.png") ### 6.2 使能网络和NTP——实现联网自动对时 使能WiFi联网,具体操作参考我此前的帖子:[http://bbs.eeworld.com.cn/thread-1206656-1-1.html](http://bbs.eeworld.com.cn/thread-1206656-1-1.html) RT-Thread的netutils软件包种包含了NTP功能,使能NTP功能可以参考帖子中使能netutils软件包中ifconfig相关的介绍。 ## 七、本篇小结 可以看到,在基于RT-Thread系统的项目中,我们没有添加任何代码,就可以实现对HPM6750开发板上的SD卡进行文件系统、目录、文件相关操作。这是因为RT-Thread系统本身已经积累了大量优秀开发者的工作成果,其中包括SDIO驱动框架、FATFS支持、芯片厂的SDXC驱动。所谓的“站在巨人的肩膀上”,大概就是这种体验吧。 本篇就到这里了,感谢你的阅读,下次再会。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
xusiwei1236
https://blog.csdn.net/xusiwei1236
文章
11
回答
33
被采纳
4
关注TA
发私信
相关文章
1
代码分享,stm32f407的sdio驱动。
2
求个在STM32F103 RTT上使用SDIO接口的例子
3
是否能增加一个 SDIO AP61xx 的驱动呢
4
sdio和fsmc驱动lcd冲突
5
发现了sdio_unregister_driver里的一个bug
6
用sdio框架驱动过w8801(wifi模块)的坛友请进(已解决)
7
关于rt-thread系统sdio驱动框架使用
8
问题请教,关于在rt-thread中调试RT1052中调试sdio wifi模块
9
【文件系统学习】+海中陆地+RT-Thread文件系统学习挂载SDIO...
10
sdio驱动是怎么使用的?也没有文档和例程啊
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
9
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
lizimu
1
篇文章
3
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部