1.1 本章内容
首先对SDHI和SDIO本质上的区别进行说明,然后使用RT-Studio新建工程进行开发,通过RASC对RA6M3的底层硬件配置,然后使用SDHI接口实现SD的识别,搭配文件系统对SD卡进行读写操作,同时记录开发遇到的问题。
1.2 模块介绍
(资料图)
本次的测评任务是SDHI,之前用SDIO用的比较多,不太了解SDHI,先对SDHI进行介绍:
SDHI是Secure Digital Host Interface的缩写,是一种SD存储卡控制器的接口规范。SDHI负责管理SD存储卡的内部状态,并将读写请求发送到存储卡中。SDHI与处理器之间进行通信,以便处理器可以直接访问SD存储卡。
而SDIO是Secure Digital Input/Output的缩写,是一种基于SD标准的接口规范,主要用于连接各种外部设备,例如Wi-Fi模块、蓝牙模块、数字相机等。SDIO定义了一个特定的层次结构,使设备之间能够简单地交换数据。
SDIO和SDHI分别描述了两个不同的方面:SDIO提供与外部设备通信的功能,而SDHI提供主机与SD存储卡通信的功能。两者在功能和应用场景上并不相同。
RA6M3的SDHI可以支持1-bit和4-bit总线用于连接SD、SDHC以及SDXC不同格式的存储卡,也可以支持1-bit、4-bit和8-bit的MMC总线,用于供eMMC4.51(JEDEC标准JESD84-B451)设备的接入与访问。
SD/MMC Host 接口框图
1.3 开发软件
RT-Studio
1.4 硬件设计
SD卡连接的是SDHI1,引脚连接如下所示:
2.1新建工程
- 点击文件,新建RT-Thread项目
- 基于开发板,选择HMI-Board,本次基于模板工程即可,调试器选择DAP-Link,接口SWD,板载的调试器,方便调试。
2.2芯片底层驱动配置
- 完成工程新建后,右击RA Smart Configurator选择FSP3.5.0的安装路径,用于配置芯片底层硬件驱动
- 配置完成后,双击进入配置页面
- 选择Pins,找到SDHI,选择SD-MMC 1bit
- 然后找到Stacks,配置SDHI,配置为1bit,同时添加DTC
- 配置完成后,点击Generate Project Content,会将配置同步到刚才的新建工程配置。
2.3 RT-Thread 配置
- 双击RT-Thread Setting,进入配置页面,点亮DFS,Fatfs以及SDIO
- 右击进入配置项,在硬件下是使能SDHI以及文件系统
- 在组件下选择使用设备虚拟文件系统,进行配置
- 选择对设备使用devfs
- 接下来找到使用SD/MMC设备驱动程序进行配置,然后点击保存,关闭配置页面
编译工程,下载,将内存卡插入板载的SD卡槽
打开终端,复位,查看输出,内存卡读取成功,但是挂载失败
这里我研究了一段时间,根据输出可以看出,刚开始读取设备得到的是0,然后开始挂挂载,导致挂载失败,之后又读取到了设备,说明时序不对。
接下来找到内存卡挂载的文件,mnt.c,在board文件下,ports文件下
将挂载SD卡的程序挪出来,放在之后初始化,这里我选择的是新建一个函数
新建一个函数用于挂载SD卡,先进行一个延时,然后格式化SD卡,这个步骤可以使用命令行操作,会把内存卡的内容清掉。
将刚才的SD卡挂载函数放在main函数前,这里放在末尾初始化,避免时序的原因挂载不上
重编译,下载程序,查看终端输出,直接挂载成功
接下来就可以使用命令对SD进行操作了,新建一个文件夹
将RA6M3输入到Test.txt,然后读取Test.txt
本次HMI-Board 的SDHI使用已经完成,刚开始对SDIO和SDHI的区别进行了介绍,然后新建工程实现对SD卡的操作,在本次使用过程中遇到时序上的问题,刚开始不知道什么原因,后面慢慢查询调试找到了问题所在,本次实现的是简单的SD卡操作,后面有时间的话打算实现使用板载屏幕做一个电子小说阅读器。
关键词: