移植OpenWrt的uboot的时候,发现明明配置好了mmc的管脚(board/ti/am335x/mux.c),能读取到MLO,通过MLO也能读取到u-boot.img。但是进入到uboot的命令模式下却发现怎么都找不到mmc,如下所示:
U-Boot SPL 2017.01 (Apr 08 2018 - 07:27:14)
Trying to boot from MMC2Card did not respond to voltage select!
** Bad device mmc 0 **
Using default environment
reading u-boot.img
reading u-boot.img
reading u-boot.img
reading u-boot.img
U-Boot 2017.01 (Apr 08 2018 - 07:27:14 +0000)
CPU : AM335X-GP rev 2.1
Model: TI AM335x EVM
DRAM: 256 MiB
NAND: 0 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
MMC: no card present
** Bad device mmc 0 **
Using default environment
<ethaddr> not set. Validating first E-fuse MAC
Net: Could not get PHY for ethernet@4a100000: addr 0
eth0: ethernet@4a100000
Hit any key to stop autoboot: 0
=>
=> mmc info
MMC: no card present
=>
=> mmc dev 0
MMC: no card present
=> mmc dev 1
MMC: no card present
=>
=>
原来是没有u-boot-2017.01已经用上了设备树,所以需要配置设备树。在网上发现u-boot-2016.05也有这个问题,所以要重也要在设备树下配置管脚。
arch/arm/dts/am335x-evm.dts:
mmc2_pins_default: pinmux_mmc2_pins {
pinctrl-single,pins = <
0x000 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
0x004 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
0x008 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
0x00c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
0x010 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
0x014 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
0x018 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
0x01c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
>;
};
mmc2_pins_sleep: pinmux_mmc2_pins_sleep {
pinctrl-single,pins = <
0x000 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
0x004 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
0x008 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
0x00c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
0x010 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
0x014 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
0x018 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
0x01c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
>;
};
......
&mmc2 {
status = "okay";
vmmc-supply = <&vmmcsd_fixed>;
bus-width = <8>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&mmc2_pins_default>;
pinctrl-1 = <&mmc2_pins_sleep>;
ti,non-removable;
};
问题解决。