您好,我们自己做的板子把一个4G emmc挂在MMC1上,没有用MMC0。
现在初始化里pinmux已设置为如下:
static struct module_pin_mux mmc1_pin_mux[] = {
{OFFSET(gpmc_ad8), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT0 */
{OFFSET(gpmc_ad9), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT1 */
{OFFSET(gpmc_ad10), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT2 */
{OFFSET(gpmc_ad11), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT3 */
{OFFSET(gpmc_ad12), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT4 */
{OFFSET(gpmc_ad13), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT5 */
{OFFSET(gpmc_ad14), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT6 */
{OFFSET(gpmc_ad15), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT7 */
{OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CLK */
{OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CMD */
{-1},
};
有个概念不知道是否理解正确,uboot代码里mmc 默认index从0开始,所以上面设置的mmc1,然后设备树里mmc index是从1开始,所以dts里添加如下配置mmc2,并把mmc0(设备树里的MMC1)给disable了:
mmc2_pins: pinmux_mmc2_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x80, PIN_INPUT_PULLUP | MUX_MODE2) /* (U9) gpmc_csn1.mmc1_clk */
AM33XX_IOPAD(0x84, PIN_INPUT_PULLUP | MUX_MODE2) /* (V9) gpmc_csn2.mmc1_cmd */
AM33XX_IOPAD(0x20, PIN_INPUT_PULLUP | MUX_MODE1) /* (U7) gpmc_ad8.mmc1_dat0 */
AM33XX_IOPAD(0x24, PIN_INPUT_PULLUP | MUX_MODE1) /* (V7) gpmc_ad9.mmc1_dat1 */
AM33XX_IOPAD(0x28, PIN_INPUT_PULLUP | MUX_MODE1) /* (R8) gpmc_ad10.mmc1_dat2 */
AM33XX_IOPAD(0x2c, PIN_INPUT_PULLUP | MUX_MODE1) /* (T8) gpmc_ad11.mmc1_dat3 */
AM33XX_IOPAD(0x30, PIN_INPUT_PULLUP | MUX_MODE1) /* (U8) gpmc_ad12.mmc1_dat4 */
AM33XX_IOPAD(0x34, PIN_INPUT_PULLUP | MUX_MODE1) /* (V8) gpmc_ad13.mmc1_dat5 */
AM33XX_IOPAD(0x38, PIN_INPUT_PULLUP | MUX_MODE1) /* (R9) gpmc_ad14.mmc1_dat6 */
AM33XX_IOPAD(0x3c, PIN_INPUT_PULLUP | MUX_MODE1) /* (T9) gpmc_ad15.mmc1_dat7 */
>;
};
&mmc2 {
pinctrl-names = "default";
vmmc-supply = <&vmmc_reg>;
pinctrl-0 = <&mmc2_pins>;
bus-width = <0x4>;
status = "okay";
};
UBOOT发现一个设备,是从0开始标记的,所以LOG里打印的初始化设备0应该就是我配置的MMC1,但是一直出现超时,我试过改MMC_TIMEOUT_MS超时时间到40,但是没有效果。
主要有几个问题:
1.硬件IO接GPMC_AD8-15是否支持,我看有资料说这个口不支持boot,但是挂载应该没问题。
2.软件配置请问是否有什么问题。
在线等,随时可以提供更多信息,谢谢支持!
Alvin Chen:
建议你参考一下:
github.com/…/cape-univ-emmc-00A0.dts
yongqing wang:
回复 Alvin Chen:
这部分官方应该有参考
Yan Jiang2:
回复 Alvin Chen:
示例用的GPMC_AD0-7,我用8-15能确认下可以识别emmc么?您给的链接里边生效的其实就是defaut模式,我配置模式7,还是不行。
Alvin Chen:
回复 Yan Jiang2:
Alvin Chen:
回复 Alvin Chen:
具体看下面的第七章:
www.ti.com/…/spruh73p.pdf
Alvin Chen:
回复 Alvin Chen:
你要不要试着改成SYSBOOT[4:0] 为11100b也就是说EMMC1优先启动
Yan Jiang2:
回复 Alvin Chen:
非常感谢回答,管脚都配置mode2,现在可以识别eMMC了
现在出现了另一个问题,从usb0烧写eMCC,启动顺序为MMC1,MMC0,UART0,USB0,(MMC1上的eMMC为空,MMC0没挂设备,UART0没有接电脑,按照理解应该从USB0启动)。把板子连电脑没有发现设备。看到这篇帖子
https://e2echina.ti.com/question_answer/dsp_arm/sitara_arm/f/25/t/113233
说到:“首先,确认板子用于启动的USB0的电路设计,必须要能工作在USB device的模式上”,想请问下,如果电路硬件没有设置为device模式,可以在uboot里配置寄存器设置,相当于通过uboot驱动,让电脑发现设备,再通过USB烧写,想请问如果可行,怎么具体操作,谢谢!