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