这个问题很典型,是T113平台SDC2控制器配置问题。当SD卡无法识别而自动跳转到eMMC时,通常是软件配置导致的。以下是解决方案:
// 在设备树中检查sdc2节点
&sdc2 {
status = "okay"; // 必须为okay
bus-width = <4>;
cap-sd-highspeed;
sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
sd-uhs-sdr104;
max-frequency = <150000000>;
no-mmc; // 重要:禁止MMC功能
no-sdio; // 禁止SDIO功能
// cd-gpios = <&pio PH 12 6>; // 根据实际硬件调整CD引脚
cd-used-24M;
/* cd-inverted; */ // 根据实际CD极性调整
};
&sdc2_pins_a {
allwinner,pins = "PC2", "PC3", "PC4", "PC5", "PC6", "PC7";
allwinner,function = "sdc2";
allwinner,muxsel = <3>;
allwinner,drive = <3>;
allwinner,pull = <1>;
};
确保内核配置正确:
# 检查内核配置
make menuconfig
# 确保以下配置开启:
Device Drivers --->
MMC/SD/SDIO card support --->
<*> Sunxi SD/MMC Host Controller support
[*] Sunxi MMC DDR52 mode support
[*] Sunxi MMC HS200 mode support
[*] Sunxi MMC HS400 mode support
# 查看MMC控制器状态
cat /sys/kernel/debug/mmc0/ios
cat /sys/kernel/debug/mmc1/ios
cat /sys/kernel/debug/mmc2/ios
# 查看SD卡检测
cat /sys/kernel/debug/gpio
# 检查驱动加载日志
dmesg | grep -i sdc
dmesg | grep -i mmc
# 重新扫描SD卡槽
echo 1 > /sys/bus/mmc/devices/mmc2:0001/uevent
# 或者强制移除再添加
echo 1 > /sys/bus/mmc/devices/mmc2:0001/remove
echo 1 > /sys/bus/mmc/drivers/mmcblk/rescan
// 在设备树中检查时钟配置
&sdc2 {
max-frequency = <150000000>;
/* 确保时钟源正确 */
clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
clock-names = "ahb", "mmc";
};
// 检查SD卡电源控制
&sdc2 {
vmmc-supply = <®_dcdc1>; // 确保电源控制正确
vqmmc-supply = <®_ldo2>; // IO电压
};
如果硬件检测有问题,可以软件强制指定:
// 在驱动中强制设置卡类型
static int sunxi_mmc_scan(struct mmc_host *host)
{
// 强制设置为SD卡
host->caps |= MMC_CAP_SD_HIGHSPEED;
// 禁用eMMC检测
host->caps &= ~MMC_CAP_MMC_HIGHSPEED;
return mmc_rescan(host);
}
编译更新设备树
重启系统
检查日志:
dmesg | grep -i "sdc|mmc"
4.查看设备节点:
ls /dev/mmcblk*
按照以上步骤排查,应该能解决SDC2无法识别T卡的问题。重点是设备树配置和确保eMMC相关配置被正确禁用。
下一篇:没有了!
电话:176-6539-0767
Q Q:135-0379-986
邮箱:1350379986@qq.com
地址:深圳市南山区后海大道1021号C座