4. SD/MMC 卡操作指南

4.1. 操作准备

  1. 使用SDK 发布的 U-boot 和 kernel。

  2. 文件系统:
    对于SD/MMC卡来说,SDK仅支持FAT文件系统,支持可读可写。
    启动至kernel后需挂载至/mnt/sd目录或根据项目需求的目录即可。
  3. 可透过fdisk工具实现分区的工作。

  4. Cv180x/cv181x SD 支持 2.0与3.0:

目前cv180x/cv181x SD/MMC卡仅支持3.3V VDDIO,使用者需注意。

4.2. 操作过程

  1. 默认SD/MMC 相关驱动模块已全部编入内核,不需再额外执行加载命令。

  2. 插入卡片上电启动,可以在U-boot下,通过fat相关指令查看卡片内容。 启动平台至kernel后,会自扫卡识别产生响应节点:/dev/mmcblk0和/dev/mmcblk0p1。

  3. Uboot下卡片不支持热插拔操作,kernel下支持热插拔。在kernel下插入 SD 卡,就可以对 SD卡进行相关的操作。 具体操作请参见“3.3 操作示例”

4.3. 操作示例

SD 卡的读写操作示例如下。

初始化及应用:

待 SD卡插入后,进行如下操作(下文 X 为分区号,其值由 fdisk 工具进行分区时决定):
指定fdisk 操作的具体目录为: ~ $ fdisk /dev/mmcblk0

步骤1. 检查分区信息

  1. 若没有显示出 p1,表示SD卡还没有分区, 请在Linux下用 fdisk 工具进行分区或是在windows系统上将SD卡进行格式化之后,进入步骤 2。

  2. 若有显示分区信息 p1,则表示 SD卡已经被检测到,并已进行过分区,可进入步骤 2进行挂载。

步骤2. 挂载

  1. ~ $ mount /dev/mmcblk1pX /mnt/sd ,此命令会将SD卡上第X个分区挂载至/mnt/sd目录

4.4. 操作中需要注意的问题

  1. 需确保SD卡与卡槽硬件脚位接触良好,如若接触不良,有可能会出现检测错误或读写数据错误相关错误信息,并导致读写失败。

  2. 每次插入 SD 卡后,都需要做一次挂载操作,才能读写 SD 卡;如果SD 卡已经挂载到文件系统,拔卡前则必须做一次卸载(umount)操作,否则有可能在下次插入SD卡后看不到SD卡分区。另,异常拔卡亦需要进行卸载动作。

  3. 必须确保 SD 卡已经创建分区,并将该分区格式化为 FAT或FAT32文件系统(LINUX下通过 fdisk命令,Windows下使用磁盘管理工具)。

  4. 在正常操作过程中不能进行的操作:

    • 读写 SD 卡时不要拔卡,否则会打印一些异常信息,并且可能会导致卡中文件或文件系统被破坏。

    • 若当前目录是处于挂载目录之下如/mnt/sd 时,则无法进行卸载操作,必须离开当前目录如/mnt/sd,才能进行卸载操作。

    • 系统中读写挂载目录的进程没有完全结束前,不能进行卸载操作,必须完全结束操作挂载目录的任务才能正常卸载。

    • 在操作过程中出现异常时的操作:

      1. 如果因为读写数据或其它不明原因导致文件系统被破坏,读写SD卡时可能会出现文件系统错误信息,这时需要进行卸载操作,拔卡,再次插卡并挂载,才能再次正常读写 SD 卡。

      2. 因为SD卡的注册,检测/注销过程需要一定的时间,因此拔卡后若再快速地插入卡,有可能会出现检测不到SD卡的现象。

      3. 如果在测试过程中异常拔卡,使用者需要按 ctrl+c 以回退出到kernel shell 下,否则会一直不停地打印异常信息。

      4. SD 卡上有一个以上的分区时,可以通过挂载操作切换挂载不同的分区,但最后需确认挂载操作的次数与卸载操作次数相等,才能确保完全卸载所有的挂载分区。