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卡操作,后面有时间的话打算实现使用板载屏幕做一个电子小说阅读器。


关键词: