☰
BSP调试#07:Micro SD卡(全志T527)
2026/10/8 22:55:45 网站建设 项目流程

BSP调试#07:Micro SD卡(全志T527)

调试前

(1)了解 MMC 子系统

Linux 提供了 MMC 子系统来实现对各种 SD/MMC/EMMC/SDIO 设备访问, MMC 子系统由上到下可以分为 : 用户空间、块设备层 、MMC 核心层 (Core)、主机控制器驱动层 (Host)、硬件层,系统框图如下:

(2)搞清楚 TF 、Micro SD 以及 SD 卡

所以是, TF 卡 == Micro SD卡 (只不过现在很多工程师口头习惯叫 “TF卡”) ,而 SD 卡是 更大的、标准尺寸的卡。Micro SD 卡可以通过卡套转换成 SD 卡。

Micro SD 卡

Micro SD 卡(即TF卡)与 SD 卡

Micro SD 卡(即TF卡)转 SD 卡

(3)了解 Micro SD 的两种模式

Micro SD 卡支持两种可选的通信协议: SDIO 和 SPI总线模式 ,主机系统可以选择任一模式。

SDIO 模式 支持 4 位高性能数据传输。Micro SD 卡工作在SDIO 模式下一共有6根信号线(CLK、CMD、DAT0-DAT3),总线宽度4bit,SDIO 总线允许动态配置从1到4双向数据信号的数据线数量。

为了兼容性,刚接通电源时,默认情况下 Micro SD 卡仅使用 DAT0 进行基本的通信(比如确认 Micro SD ID、设置工作模式)。完成初始化后,主控可以修改总线宽度与 Micro SD 卡进行数据传输。

SPI 模式 为 SPI 信道实现轻松、通用的接口。SPI 模式下一共有 4 根信号线(CLK、CS、 MOSI、MISO ),串行通信,半双工。 SPI模式牺牲了性能,换来了极大的通用性和简易性。它是一种“兼容模式”或“备选方案”。

如何选择模式? 主机系统可以根据自身的能力(是否有SDIO控制器)和性能需求,来选择使用哪一种模式与之通信。 上电后,主机通过拉低 CS 信号线来强制Micro SD卡进入SPI模式,否则Micro SD卡就默认进入SDIO模式。

(4)Micro SD 卡引脚定义

硬件设计

SOC 内部集成了 SDMMC 控制器,因此在设计 Micro SD卡电路时,只需将这些接口相应地接到Micro SD卡座即可。

需要注意的是,不同主控对电路设计可能有所差异,具体自行阅读 soc 原厂数据手册。但其接口定义以及通信原理都是一致的、标准的。

电路原理:

DET: 主控通过检测 SDC0_DET 引脚的电平状态来判断是否有 Micro SD 卡插入。Micro SD 卡插入时,SDC0_DET 引脚的弹片与外壳接触,使 C/D 引脚接地为低电平,系统判断有 Micro SD 卡插入,反之为 Micro SD 卡拔出。

DAT[3:0]: 4bit数据总线,数据可以与主机进行双向通信;

CLK: 时钟信号,每个时钟周期传输一条指令或数据,频率可在0~25MHz之间任意频点工作;

CMD: 指令信号或指令应答信号,命令是由控制器发给Micro SD 卡,可以是从控制器到单个Micro SD 卡,也可以是到 Micro SD 总线上所有卡;响应是存储卡对控制器发送的命令应答,应答可以来自单卡或所有卡。

软件配置

sys_config.fex

参数解析: card_ctrl:0选择卡量产相关的控制器 card_high_speed:速度模式 0 为低速,1 为高速 card_line:代表卡总线宽度,分别有 1,4,8 sdc_d1:sdc data1 的 GPIO 配置 sdc_d0:sdc data0 的 GPIO 配置 sdc_clk:sdc clk 的 GPIO 配置 sdc_cmd:sdc cmd 的 GPIO 配置 sdc_d3:sdc data3 的 GPIO 配置 sdc_d2:sdc data2 的 GPIO 配置

dts

参数解析: bus-width:线宽 cd-gpios:卡检测的 GPIO 配置 cd-used-24M:使用 24M 时钟检测插拔卡中断 non-removable:不可移除 broken-cd:sd 卡检测方式:轮询 cd-inverted:卡检测的高电平有效还是低电平有效 data3-detect:data3 线检测卡 cap-sd-highspeed:SD 卡的 High speed sd-uhs-sdr50:SD 卡的 uhs-sdr50 sd-uhs-ddr50:SD 卡的 uhs-ddr50 sd-uhs-sdr104:SD 卡的 uhs-sdr104 no-sdio:无 sdio no-mmc:无 mmc sunxi-power-save-mode:发送数据或者命令才有时钟输出 sunxi-dis-signal-vol-sw:关闭电压切换 max-frequency:最大频率 ctl-spec-caps:控制 spec 能力 vmmc-supply:供电电压、工作电压,需要根据实际 pmu 供电方案修改 vqmmc33sw-supply:3.3V 的 IO 电压,需要根据实际 pmu 供电方案修改 vdmmc33sw-supply:3.3V 的卡检测电压,需要根据实际 pmu 供电方案修改 vqmmc18sw-supply:1.8V 的 IO 电压,需要根据实际 pmu 供电方案修改 vdmmc18sw-supply:1.8V 的卡检测电压,需要根据实际 pmu 供电方案修改

内核配置

进入 menuconfig 后,选中 “Allwinner SD/MMC Host Controller Support” 即可使能全志平台 MMC 驱动。

调试过程

拔插Micro SD 卡可查看 log 判断读卡初始化是否正常,并通过 fdisk -l 或 df -h 确认卡是否识别成功。

如果以上都正常,直接进行性能测试。如无法识别Micro SD卡,先排查硬件。因为驱动都是芯片原厂经过验证的,出现问题的概率极低。

功能验证

写入测试

dd if=/dev/zero of=/run/media/mmcblk1p1/test bs=1M count=500 conv=fsync

读取测试

dd if=/run/media/mmcblk1p1/test of=/dev/null bs=1M

调试总结

SoC 的 MMC 接口,其实是个标准件。SoC 原厂提供好驱动、电路设计等,用户直接套用以及配置下引脚接口,对于下游的BSP工程师来说没多少可操作空间,有问题就排查硬件。

调试思路: 参考公版提供的原理图进行设计,硬件重点确认供电以及连接情况;设计完进行软件配置,软件调试重点看SDC0_DET 引脚,拔插 Micro SD 卡根据 log 进行问题分析定位。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询