RK356X RKAndroid12 TF卡配置 自动挂载
RK3568 有三个SDMMC接口,分别为SDMMC0 SDMMC1 SDMMC2
DTS
配置
1. max-frequency = <150000000>;
此配置设置
SD
卡的运行频率,虽然设置为
150M
,但是还要根据
SD
卡的不同模式进行调整。这部分不
需要用户关心,实际运行频率和模块的关系软件会关联。最大不超过
150MHz
。
2. supports-sd;
此配置标识此插槽为
SD
卡功能,为必须添加项。否则无法初始化
SD
卡。
3.
bus
-
width = <4>
;
此配置标识需要使用
SD
卡的线宽。
SD
卡最大支持
4
线模式,如果不配置就模式使用
1
线模式。另外这个位只支持的数值为 1
,
4
,配置其他数值会认为是非法数值,强制按照
1
线模式进行使用。
4. cap-mmc-highspeed; cap-sd-highspeed;
此配置为标识此卡槽支持
highspeed
的
SD
卡。 如果不配置,表示不支持
highspeed
的
SD
卡。
5. 配置使用 SD3.0
首先确保芯片支持
SD3.0
模式
(3288,3328,3399,3368)
,并且需要配置
vqmmc
这一路的
SDMMC
控制器的 IO 电源,并添加如下一些
SD3.0
的速度模式
sd-uhs-sdr12: 时钟频率不超过24M
sd-uhs-sdr25: 时钟频率不超过50M
sd-uhs-sdr50: 时钟频率不超过100M
sd-uhs-ddr50: 时钟频率不超过50M,并且采用双沿采样
sd-uhs-sdr104: 时钟频率不超过208M
7. 配置 SD 卡热拔插检测脚
如果检测脚是直接连接到芯片的
SDMMC
控制器的
sdmmc_cd
脚,则请直接将该脚位配置为功能脚,并 在 sdmmc
节点的
default
的
pinctrl
内进行引用即可。
如果检测脚是使用其他
GPIO
,则需要在
sdmmc
节点内使用
cd-gpios
来进配置,例如
cd
-
gpios = <&gpio4 24 GPIO_ACTIVE_LOW>
;
如果使用
GPIO
的检测脚,但是又要求反向检测方式
(
即
SD
卡插入时检测脚为高电平
)
,则需要追加
cd-
inverted
;
通用RK TF设备树配置如下:
&sdmmc2 {
max-frequency = <150000000>;
supports-sd;
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
vmmc-supply = <&vcc3v3_sd>;//默认可以去掉
vqmmc-supply = <&vccio_sd>;//默认可以去掉
pinctrl-names = "default";
pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_cmd &sdmmc2m0_clk &sdmmc2m0_det>;
status = "okay";
};
&sdmmc1 {
max-frequency = <150000000>;
supports-sd;
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
vmmc-supply = <&vcc3v3_sd>;//默认可以去掉
vqmmc-supply = <&vccio_sd>;//默认可以去掉
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1_bus4 &sdmmc1_clk &sdmmc1_cmd &sdmmc1_det>;
status = "okay";
};
&sdmmc0 {
max-frequency = <150000000>;
supports-sd;
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
vmmc-supply = <&vcc3v3_sd>;//默认可以去掉
vqmmc-supply = <&vccio_sd>;//默认可以去掉
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
status = "okay";
};
插卡正常出现的日志:
[ 293.194013] mmc1: new high speed SDXC card at address 59b4
[ 293.198185] mmcblk1: mmc1:59b4 00000 59.6 GiB
[ 293.204351] mmcblk1: p1
如果在内核看到这样的打印,说明
SD
卡已经被正确识别,并且已经有一个可用的分区
p1
。
如果在用户界面看不到
SD
卡设备或者设备不可使用,请排查用户态磁盘守护进程,如
vold
。
另外可手动验证分区是否可以使用
mount
-
t vfat /dev/block/mmcblk1p1 /mnt
或者
mount
-
t vfat /dev/block/mmcblk1 /mnt
然后到
mnt
目录下看下是否有
SD
卡里面的文件
常见问题排查
问题1:无法识别128GTF卡,只能识别64G以下TF卡
可能是你配置了SD3.0模式,检查硬件原理图 vccio_sd所接的供电能否进行3.3V/1.8V切换
如果不支持去掉sd-uhs-sdr104。
1. SD 卡
从左到右依次是:
DET ----
检测脚
DATA1 ----
数据线
DATA0
GND
CLK ----
时钟
VCC_SD ---- SD
卡供电电源
VCCIO_SD ----
数据线的
IO
供电电源
CMD ----
命令线
DATA3
DATA2
除了
DET/CLK/GND
外,其它的
DATA0-3/VCC_SD/VCCIO_SD/CMD
必须都为
3.3v
左右,最小不能低
于
3v
;
DET
脚插入为低,拔出为高;
DATA0-3/CMD
的电压都是
VCCIO_SD
供给的,所以
DATA0-
3/CMD
必须跟
VCCIO_SD
保持一致,而
VCC_SD
和
VCCIO_SD
要保持一致(
NOTE: SD 3.0
,要求
VCCIO_SD
为
1.8v
);
如果
VCC_SD/VCCIO_SD
的电源是长供电,那么请保证
VCC_SD
和
VCCIO_SD
在卡拔插时不会有塌 陷;
2. 开机不读卡,运行时拔插 OK:大概率时电源问题
例如:拔掉所有电源,发现查着
HDMI
发现有漏电到
VCC_SD
卡里面;或者使用外接电源进行测试。
3.
概率性不识别:
mmc1: new high speed SD card at address b368
mmcblk1: mmc1:b368 SMI 486 MiB
[mmc1] Data transmission error !!!! MINTSTS: [0x00002000]
dwmmc_rockchip ff0c0000.rksdmmc: data FIFO error (status=00002000)
mmcblk1: error -110 sending status command, retrying
need_retune:0,brq->retune_retry_done:0.
降频和增加卡检测延时增强电源稳定性,如果降频
OK
的话,请检查硬件
layout
&sdmmc {
card-detect-delay = <1200>;
}
自动挂载
RKAndroid12默认支持SDMMC0的TF自动挂载,接入TF可以在/storage/目录下见到
SDMMC1自动挂载( sdmmc2类同)在 device/rockchip/common/scripts/fstab_tools/fstab.in 这个里面修改,或者可以用get_build_var PRODUCT_FSTAB_TEMPLATE 看看是否这个路径
//sdmmc1
/devices/platform/fe2c0000.dwmmc/mmc_host* auto auto defaults voldmanaged=sdcard1:auto