SD卡检测
前言
最近公司拿到了Android P的代码,需要在原有的项目基础上将Android 8.1升级为Android 9.0;最为一个职场新人,独挑大梁是不现实的,不过帮大佬"打杂"还是可以的,在配置SD卡的时候,过程比较有意思,学到了一些东西,在此做个记录。目录
对于一个Android项目来说,SD卡应该是属于比较简单的一个模块,需要配置的地方也不多,如下:1、kernel-4.9-lc/arch/arm/boot/dts/[project].dts
2、kernel-4.9-lc/arch/arm/boot/dts/mtxxx.dts
3、kernel-4.9-lc/arch/arm/boot/dts/cust_mtxxxx_msdc.dtsi
4、kernel-4.9-lc/drivers/misc/mediatek/dws/mt6580/[project].dws
5、vendor/mediatek/proprietary/bootable/bootloader/lk/target/[project]/dct/dct/codegen.dws
6、vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/[project]/dct/dct/codegen.dws
代码分析
从上面所列代码路径来看,相关的dts文件有三个,[project].dts只作用于特定项目,SD相关代码如下:
&msdc1 {
index = /bits/ 8 <1>;
clk_src = /bits/ 8 <MSDC1_CLKSRC_187MHZ>;
bus-width = <4>;
max-frequency = <200000000>;
sd_need_power; //是否配置这条属性决定了当mmc_rescan函数没有检测到SD卡时是否下电,就是因为这个属性,让我兜兜转转转了一圈,后面详细说;
cap-sd-highspeed;
sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
sd-uhs-sdr104;
sd-uhs-ddr50;
no-mmc; //这两条标明不能作为mmc和sdio;
no-sdio;
pinctrl-names = "default","insert_cfg";
pinctrl-0 = <&mmc1_pins_insert_default>; //insert和中断相关,即检测脚相关
pinctrl-1 = <&mmc1_pins_insert_cfg>;
pinctl = <&msdc1_pins_default>;
pinctl_sdr104 = <&msdc1_pins_sdr104>;
pinctl_sdr50 = <&msdc1_pins_sdr50>;
pinctl_ddr50 = <&msdc1_pins_ddr50>;
register_setting = <&msdc1_register_setting_default>;
host_function = /bits/ 8 <MSDC_SD>; //表明被用作sd;
cd_level = /bits/ 8 <MSDC_CD_HIGH>; //如果被设置为0,表示低有效(即正确识卡的时候检测脚为低电平);反之则高电平有效;这个由软件和硬件上共同决定
cd-gpios = <&pio 14 0>; //设置中断脚为GPIO14;
vmmc-supply = <&mt_pmic_vmch_ldo_reg>; //供电,代码中会用到vmmc-supply和vqmmc-supply;
vqmmc-supply = <&mt_pmic_vmc_ldo_reg>;
}
#include <miki8321p2_9709/cust.dtsi