找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2088

积分

0

好友

296

主题
发表于 2025-12-30 03:54:08 | 查看: 21| 回复: 0

SD卡与TF卡(Micro SD卡)是嵌入式系统中常用的存储与扩展接口。要使其在RK3568平台上正常工作,需要理解其硬件连接、软件配置,并掌握基本的调试方法。以下是针对RK3568的SD/TF卡接口配置详解。

SD/TF卡核心信号

SD卡接口通常包含以下几类关键信号:

  • DATA:数据线,用于数据传输。
  • CLK:时钟信号,由主机提供给SD卡。
  • VCC_SD:为SD卡核心供电的电源。
  • VCCIO_SD:为SD卡数据线I/O引脚供电的电源,通常需要与主控I/O电压匹配。
  • CMD:命令/应答信号。主机通过此线发送命令,SD卡通过同一线路返回响应。
  • CD (Card Detect):卡检测信号。当卡插入时,该引脚电平会发生变化,通知主机有卡插入,通常连接到主控的DET引脚。

RK3568 SDMMC0接口与TF卡槽连接电路图
图1:RK3568平台上SDMMC0控制器与TF卡插槽的典型连接电路,包含数据线、命令线、时钟及检测引脚。

SD卡内部结构框图与引脚排列
图2:SD卡的内部功能模块示意图(右)及外部引脚排列定义(左),包括电源、时钟、命令与数据线。

SD卡SDIO与SPI模式引脚功能对比图
图3:SD卡在SDIO模式(左)和SPI模式(右)下的引脚功能定义对比。RK3568通常使用SDIO模式。

硬件引脚定义参考

了解卡座本身的引脚排列对于硬件设计和排查问题至关重要。

TF卡卡槽引脚示意图
图4:TF卡(Micro SD卡)卡槽的引脚示意图,标注了写保护检测、卡插入检测及各数据/命令引脚。

TF卡详细规格参数表
图5:TF卡的详细电气与物理规格参数表,包括工作电压、电流、温度范围以及SD和SPI模式下的完整引脚定义。

开发板TF卡连接引脚图
图6:开发板PCB上TF卡连接器的引脚图,显示了卡检测信号(插入后为低电平)与TF卡各引脚的对应关系。

设备树配置详解

计算机基础中,设备树是描述硬件的重要机制。RK3568的SDMMC控制器配置主要在设备树(DTS)文件中完成。

你需要确认SD/TF卡使用的是哪个SDMMC控制器(例如sdmmc0),并在对应的设备树文件中启用它,同时检查GPIO引脚配置是否正确。注意关闭其他未使用的SDMMC节点(如sdmmc1, sdmmc2),避免冲突。
通常,sdmmc0的配置可能位于 kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi 这样的文件中,而具体板级的覆写可能在类似 rk3568-evb1-ddr4-v10.dtsi 的文件中。

以下是一个sdmmc0节点的配置示例及关键属性说明:

&sdmmc0 {
    max-frequency = <150000000>; /* 最大工作频率150MHz */
    no-sdio; /* 非SDIO设备(如Wi-Fi)*/
    no-mmc; /* 非eMMC存储 */
    bus-width = <4>; /* 数据总线宽度,4线模式 */
    cap-mmc-highspeed;
    cap-sd-highspeed; /* 支持高速SD卡 */
    disable-wp; /* 禁用写保护检测 */
    sd-uhs-sdr104; /* 支持UHS-SDR104模式 (SDIO 3.0) */
    vmmc-supply = <&vcc3v3_sd>; /* SD卡供电(3.3V) */
    vqmmc-supply = <&vccio_sd>; /* SD卡IO引脚供电 */
    pinctrl-names = "default";
    pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>; /* 引脚复用配置 */
    status = "okay"; /* 启用此控制器 */
};

对应的引脚控制(pinctrl)配置定义了具体哪些GPIO引脚被复用为SDMMC功能:

sdmmc0 {
    /omit-if-no-ref/
    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>;
    };
    /omit-if-no-ref/
    sdmmc0_clk: sdmmc0-clk {
        rockchip,pins =
            /* sdmmc0_clk */
            <2 RK_PA2 1 &pcfg_pull_up_drv_level_2>;
    };
    /omit-if-no-ref/
    sdmmc0_cmd: sdmmc0-cmd {
        rockchip,pins =
            /* sdmmc0_cmd */
            <2 RK_PA1 1 &pcfg_pull_up_drv_level_2>;
    };
    /omit-if-no-ref/
    sdmmc0_det: sdmmc0-det {
        rockchip,pins =
            /* sdmmc0_det */
            <0 RK_PA4 1 &pcfg_pull_up>;
    };
};

内核日志分析

配置正确且硬件连接无误后,系统启动或插入SD卡时,内核会打印识别信息。以下是成功识别一张SDXC卡的日志示例:

[  523.042244] mmc_host mmc1: Bus speed (slot 0) = 148500000Hz (slot req 150000000Hz, actual 148500000HZ div = 0)
[  523.060196] dwmmc_rockchip fe2b0000.dwmmc: Successfully tuned phase to 270
[  523.060301] mmc1: new ultra high speed SDR104 SDXC card at address aaaa
[  523.062755] mmcblk1: mmc1:aaaa SN64G 59.5 GiB
[  523.067518]  mmcblk1: p1

最后两行表明系统不仅识别了卡(mmcblk1),还识别到了其上的第一个分区(mmcblk1p1)。

功能验证与挂载

识别到存储设备后,可以手动挂载并进行读写测试:

# 将SD卡上的第一个分区(假设为FAT32格式)挂载到 /mnt 目录
mount -t vfat /dev/mmcblk1p1 /mnt
# 随后可以查看 /mnt 目录下的文件,或进行复制删除操作以验证读写功能

常见问题排查

  1. 无法识别文件系统:内核可能未编译对应文件系统(如exFAT、NTFS)的驱动,需要在内核配置中启用。
  2. 开机不读卡,热插拔正常:这通常是电源时序或上电稳定性问题,需检查电源电路。
  3. 概率性不识别:可以尝试在设备树中降低工作频率(max-frequency)或增加卡检测延时,以增强兼容性和稳定性。如果降频后问题消失,应重点检查PCB布局(Layout),特别是时钟和数据线的走线。
    &sdmmc0 {
        card-detect-delay = <1200>; /* 增加卡检测延时,单位毫秒 */
        // max-frequency = <100000000>; /* 尝试降低频率 */
    };

U-Boot启动顺序配置

如果希望从SD卡启动系统,需要在U-Boot中配置启动顺序。修改文件 u-boot/arch/arm/dts/rk3568-u-boot.dtsi(路径可能因版本而异):

chosen {
    stdout-path = &uart2;
    u-boot,spl-boot-order = &sdmmc0, &sdhci, &nandc0, &spi_nand, &spi_nor;
};

在上述配置中,&sdmmc0 被放在了SPL(Secondary Program Loader)启动顺序的首位,这意味着U-Boot会优先尝试从sdmmc0(即TF卡槽)加载下一阶段的引导程序。

通过以上对硬件引脚、设备树配置、内核日志及常见问题的分析,你应该能完成RK3568平台上SD/TF卡接口的驱动与调试。更多关于底层硬件交互与操作系统驱动的深入讨论,欢迎访问云栈社区进行交流。


参考链接




上一篇:Nginx性能优化:详解4个核心参数配置,助力高并发与负载均衡
下一篇:实战 RK3568 Ubuntu 22.04 根文件系统rootfs制作与定制
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 11:55 , Processed in 0.217778 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表