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
 
       
     


















