9.3. 挂载 SD 卡

zx-rtt 可以实现挂载 SD 卡(FAT32 格式),需要配置如下内容:

  • 配置 SDMC 接口;

9.3.1. 配置 SDMC 接口

挂载 SD 卡时,需将 对应 SDMC 接口选中,以 ZXM3C7D000M4R64 开发板为例,核对原理图可知,SD 卡对接的是 SDMC1,进入 SDK 的 menuconfig 菜单做如下配置:

Board options  --->
    [*] Using SDMC1
        SDMC1 Parameter

9.3.2. 设置自动挂载

target/<cpu>/<board>/board.c 中,找到 mount_table 数组,添加代码如下:

const struct dfs_mount_tbl mount_table[] = {
...
    {"sd0p0", "/sdcard", "elm", 0, 0, 0},       // SD 卡首个分区
    {"sd0", "/sdcard", "elm", 0, 0, 0},         // 设备节点,一定存在
...
};

关于 SD 卡及分区的解释:

  • sd0 通常为 SD 卡的设备节点;

  • sd0p0 通常为 SD 卡第一个分区,通常情况下也是唯一分区;假设 SD 卡有多个分区,那么文件名需要递增,例如 sd0p1、sd0p2 … ;

  • 若只有 sd0 没有 sd0p0,较多出现在使用过 linux 中的 mkfs.vfat 命令直接格式化 SD 卡的设备节点;

  • 本文示例以一个 SD 卡只有一个分区为例进行讲解。

编译烧录后,系统会自动挂载 SD 卡。

9.3.3. 编译烧录

配置完成后,保存退出,编译、烧录

9.3.4. 验证

9.3.4.1. SD 卡识别

烧录完成后,断开电源,接入 SD 卡,上电,检查设备,看到 sd0 和 sd0p0 设备,表明系统已识别 SD 卡:

aic /> list_device
device           type         ref count
-------- -------------------- ----------
...
sd0      Block Device         0
sd0p0    Block Device         1
...

备注

若使用手动挂载,则在此时执行 mount sd0 /sdcard elmmount sd0p0 /sdcard elm

9.3.4.2. 查看文件

进入 sdcard 目录,查看文件:

aic /> cd sd
aic /> cd sdcard
aic /sdcard> ls
Directory /sdcard:
lvgl_data           <DIR>
aicdoc.tar     89180160
tools               <DIR>
aic /sdcard>

至此, SD 卡挂载完成。