我观察到的硬件和软件配置如下:
- 硬件连接:GPIO1_PB7 引脚连接到一个 PMOS 开关的栅极。这个 PMOS 负责接通或断开供给 SD 卡 VDD 的 3.3V 电源。因此,GPIO1_PB7 的电平状态直接决定了 SD 卡是否上电。
- 设备树 pinctrl 配置:在 rk3506-luckfox-lyra.dtsi 中,&mmc 节点的 pinctrl-0 属性列表里包含了 &sdmmc_pwren 句柄。这个 &sdmmc_pwren 节点的作用是将 GPIO1_PB7 这个物理引脚配置为 GPIO 功能。
- 设备树 regulator 配置:&mmc 节点的 vmmc-supply 属性指向了 &vcc_3v3 节点。而 &vcc_3v3 节点被定义为一个 regulator-fixed(固定稳压器),并且带有 regulator-always-on(常开)属性。
- 既然硬件上必须通过 GPIO1_PB7 来控制电源,请问在内核的驱动模型中,是哪个模块、通过什么机制来实际驱动 GPIO1_PB7 这个引脚,以控制 PMOS 开关的呢?
- 这个sdmmc_pwren是和sdmmc_detj结合使用实现插卡后上电的是吗?取缔pmos开关和sdmmc_pwren使SD卡VDD直连3V3不断电是硬件上安全的吗
Code: Select all
&mmc {
/* For SDMMC */
max-frequency = <52000000>;
bus-width = <4>;
no-sdio;
no-mmc;
cap-mmc-highspeed;
cap-sd-highspeed;
cd-gpios = <&gpio1 RK_PB6 GPIO_ACTIVE_LOW>; //det
disable-wp;
//sd-uhs-sdr104;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk_pins &sdmmc_cmd_pins &sdmmc_bus4_pins &sdmmc_det &sdmmc_pwren>;
vqmmc-supply = <&vcc_3v3>;
vmmc-supply = <&vcc_3v3>;
status = "okay";
};
&pinctrl {
sdmmc {
/omit-if-no-ref/
sdmmc_pwren: sdmmc-pwren {
rockchip,pins = <1 RK_PB7 RK_FUNC_GPIO &pcfg_pull_down>;
};
sdmmc_det: sdmmc-det {
rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
};

