首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • M4-R1

    • 一、简介

      • M4-R1简介
    • 二、快速上手

      • 01 OpenHarmony概述
      • 02 镜像烧录
      • 03 应用开发快速上手
      • 04 设备开发快速上手
    • 三、应用开发

      • 01 ArkUI

        • 1 ArkTS语言简介
        • 2 UI 组件-Row 容器介绍
        • 3 UI 组件-Column 容器介绍
        • 4 UI 组件-Text 组件
        • 5 UI 组件-Toggle 组件
        • 6 UI 组件-Slider 组件
        • 7 UI 组件-Animation 组件&Transition 组件
      • 02 资料获取

        • 1 OpenHarmony 官方资料
      • 03 开发须知

        • 1 Full-SDK替换教程
        • 2 引入和使用三方库
        • 3 HDC调试
        • 4 命令行恢复出厂模式
        • 5 升级App为system权限
      • 04 构建第一个应用

        • 1 构建第一个ArkTs应用-HelloWorld
      • 05 案例

        • 01 串口调试助手应用案例
        • 02 手写板应用案例
        • 03 数字时钟应用案例
        • 04 WIFI 信息获取应用案例
    • 四、设备开发

      • 1 Ubuntu环境开发

        • 01 环境搭建
        • 02 下载源码
        • 03 编译源码
      • 2 使用DevEco Device Tool 工具

        • 01 工具简介
        • 02 开发环境的搭建
        • 03 导入SDK
        • 04 HUAWEI DevEco Tool 功能介绍
    • 五、内核外设与接口

      • 01 指南
      • 02 设备树介绍
      • 03 GPIO介绍
      • 04 I2C通讯
      • 05 SPI通信
      • 06 PWM 控制
      • 07 串口通讯
      • 08 TF卡
      • 09 屏幕
      • 10 触摸
      • 11 Ethernet(以太网)
      • 12 M.2 硬盘
      • 13 音频
      • 13 WIFI & BT
      • 14 摄像头
    • 六、资料下载

      • 资料下载
  • M5-R1

    • 一、简介

      • M5-R1简介
    • 二、快速上手

      • 镜像烧录
      • 环境搭建
      • 下载源码
    • 三、外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
    • 四、资料下载

      • 资料下载

08 TF卡

1 TF卡介绍

SD卡由松下、东芝和SanDisk于1999年推出的非易失性存储卡格式。它被广泛用于数码相机、摄像机、游戏机和大量嵌入式设备中。TF卡(Micro SD卡)由SanDisk公司于2004年推出的产品,在实现相同功能的情况下,体积大幅度缩减,成为目前最主流的移动设备存储卡,我们的M4-R1 开发板就搭载了一个TF卡槽,方便进行数据存储。 这个卡槽通过PCB上的走线直接连接到RK3568芯片的 SDMMC引脚(包括 CMD, CLK, DATA0-DATA3 以及电源和地)。

提示

SDMMC接口是SD卡和MMC卡的标准接口,SD卡是SDMMC接口的一种,MMC卡是SDMMC接口的另一种。

TF卡结构图

在软件层面,Linux内核已经包含了完善的SDMMC控制器驱动和SD卡协议栈。Rockchip也为其芯片提供了良好的主线内核支持。

2 TF卡板卡接口

TF卡板卡接口

3 TF卡使用---命令行方式

3.1 设备树解析

提示

下文的文件路径:out/kernel/src_tmp/linux-5.10/arch/arm64/boot/dts/rockchip/ 需要先编译码源。

基础控制器定义( rk3568.dtsi ):

sdmmc0: dwmmc@fe2b0000 {
    compatible = "rockchip,rk3568-dw-mshc", "rockchip,rk3288-dw-mshc";
    reg = <0x0 0xfe2b0000 0x0 0x4000>;
    interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
    max-frequency = <150000000>;
    clocks = <&cru HCLK_SDMMC0>, <&cru CLK_SDMMC0>,
             <&cru SCLK_SDMMC0_DRV>, <&cru SCLK_SDMMC0_SAMPLE>;
    clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
    fifo-depth = <0x100>;
    resets = <&cru SRST_SDMMC0>;
    reset-names = "reset";
    status = "disabled";
};

RK3568芯片定义了4个SDMMC控制器,这里以TF卡使用的sdmmc0控制器为例进行讲解,其余控制器只是最大频率和寄存器地址有所区别:

  • compatible : 兼容性字符串,指定驱动程序
  • reg : 寄存器地址范围(0xfe2b0000-0xfe2b3fff)
  • interrupts : 中断号98,高电平触发
  • max-frequency : 最大工作频率150MHz
  • clocks : 四个时钟源(总线时钟、接口时钟、驱动时钟、采样时钟)
  • fifo-depth : FIFO深度256字节
  • resets : 复位控制
  • status : 默认禁用状态

引脚复用配置(引脚层 - rk3568-pinctrl.dtsi):

sdmmc0 {
    sdmmc0_bus4: sdmmc0-bus4 {
        rockchip,pins =
            /* sdmmc0_d0 */
            <1 RK_PD5 1 &pcfg_pull_up_drv_level_2>,
            /* sdmmc0_d1 */
            <1 RK_PD6 1 &pcfg_pull_up_drv_level_2>,
            /* sdmmc0_d2 */
            <1 RK_PD7 1 &pcfg_pull_up_drv_level_2>,
            /* sdmmc0_d3 */
            <2 RK_PA0 1 &pcfg_pull_up_drv_level_2>;
    };

    sdmmc0_clk: sdmmc0-clk {
        rockchip,pins =
            /* sdmmc0_clk */
            <2 RK_PA2 1 &pcfg_pull_up_drv_level_2>;
    };

    sdmmc0_cmd: sdmmc0-cmd {
        rockchip,pins =
            /* sdmmc0_cmd */
            <2 RK_PA1 1 &pcfg_pull_up_drv_level_2>;
    };

    sdmmc0_det: sdmmc0-det {
        rockchip,pins =
            /* sdmmc0_det */
            <0 RK_PA4 1 &pcfg_pull_up>;
    };

    sdmmc0_pwren: sdmmc0-pwren {
        rockchip,pins =
            /* sdmmc0_pwren */
            <0 RK_PA5 1 &pcfg_pull_none>;
    };
};

SDMMC0引脚组:

  • sdmmc0_bus4 : 4位数据线(D0-D3)
  • sdmmc0_d0: RK_PD5 (GPIO1_D5)
  • sdmmc0_d1: RK_PD6 (GPIO1_D6)
  • sdmmc0_d2: RK_PD7 (GPIO1_D7)
  • sdmmc0_d3: RK_PA0 (GPIO2_A0)
  • sdmmc0_clk : 时钟线 RK_PA2 (GPIO2_A2)
  • sdmmc0_cmd : 命令线 RK_PA1 (GPIO2_A1)
  • sdmmc0_det : 卡检测 RK_PA4 (GPIO0_A4)
  • sdmmc0_pwren : 电源使能 RK_PA5 (GPIO0_A5)

板级配置( rk3568-toybrick.dtsi ):

&sdmmc0 {
    max-frequency = <150000000>;
    supports-sd;
    bus-width = <4>;
    cap-mmc-highspeed;
    cap-sd-highspeed;
    disable-wp;
    sd-uhs-sdr104;
    vmmc-supply = <&vcc3v3_sd>;
    vqmmc-supply = <&vccio_sd>;
    pinctrl-names = "default";
    pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
    status = "okay";
};
  • supports-sd : 支持SD卡
  • bus-width = <4> : 4位数据总线
  • cap-sd-highspeed : 支持高速模式
  • sd-uhs-sdr104 : 支持UHS-I SDR104模式
  • vmmc-supply : 主电源供应
  • vqmmc-supply : I/O电压供应
  • pinctrl-0 : 指定使用的引脚组

3.2 应用层使用TF卡的方法

当SD卡(TF卡)插入时,系统会检测到插入事件(通过引脚轮询检测),并发送信号对卡进行识别,识别成功后在系统中创建一个块设备,过去的开发中,内核识别到SD卡以后,我们需要手动使用 mount 命令将SD卡挂载到指定路径下方便后续进行读取,读取完成后需要使用 umount 命令取消挂载。现在大部分的操作系统以及支持对TF卡和U盘设备的自动挂载。

对于应用开发来说,我们并不需要关心硬件和内核是如何配置SD卡的,只需要调用Linux下的文件操作API即可完成对SD卡中的内容进行访问

实际使用时,对于本开发板,只需要插入TF卡到TF卡座(支持热插拔),然后通过 df -h 命令即可查看系统上所有已挂载的磁盘、分区、存储设备的总容量、已用空间、剩余空间以及挂载点等信息。我们进入相应的挂载点即可对TF卡的内容进行读取和操作

3.3 具体功能演示

测试使用的TF卡如下:

测试TF卡

输入df -h 查看挂载目录:

df -h
TF卡挂载目录

进入对应的挂载点即可查看TF卡的内容

TF卡内容查看

4 TF卡使用---NAPI方式

在 GitHub 上编辑此页
上次更新:
贡献者: fxx, hjf
Prev
07 串口通讯
Next
09 屏幕