This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x uboot中如何使能mmc2

Other Parts Discussed in Thread: SYSCONFIG

我们的板子上使用mmc0做系统boot使用,同时想使用mmc2做文件存储。但是目前mmc2功能在Uboot中无法使用。

我在mux.c中添加了引脚初始化

static struct module_pin_mux mmc2_pin_mux_sk_evm[] = {
{OFFSET(gpmc_be1n), (MODE(3) | RXACTIVE | PULLUP_EN)}, /* MMC2_DAT3 */
{OFFSET(gpmc_a3), (MODE(3) | RXACTIVE | PULLUP_EN)}, /* MMC2_DAT2 */
{OFFSET(gpmc_a2), (MODE(3) | RXACTIVE | PULLUP_EN)}, /* MMC2_DAT1 */
{OFFSET(gpmc_a1), (MODE(3) | RXACTIVE | PULLUP_EN)}, /* MMC2_DAT0 */
{OFFSET(gpmc_clk), (MODE(3) | RXACTIVE | PULLUP_EN)}, /* MMC2_CLK */
{OFFSET(gpmc_csn3), (MODE(3) | RXACTIVE | PULLUP_EN)}, /* MMC2_CMD */
{OFFSET(mcasp0_axr0), (MODE(4) | RXACTIVE | PULLUP_EN)}, /* MMC2_CD */
{-1},
};

同时在。omap_hsmmc.c

#define OMAP_HSMMC1_BASE 0x48060100
#define OMAP_HSMMC2_BASE 0x481D8100

#define OMAP_HSMMC3_BASE 0x47810100

也在代码初始化中调用了omap_mmc_init(2)。但是在Uboot中还是无法读取MMC2的信息。

经过代码追踪,发现在mmc模块复位时读取寄存器异常。只要读取sd_sysconfig就引起死机。

后来在uboot中直接读取内存地址,也是直接死机。

U-Boot# md.w 48060110
48060110: 2015 0000 0001 0000 0000 0000 0000 0000 . ..............
48060120: 0000 0000 0000 0000 0000 0000 0600 0000 ................
48060130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
48060140: 0000 0000 0000 0000 0000 0000 0000 0000 ................
48060150: 0000 0000 0000 0000 0000 0000 0000 0000 ................
48060160: 0000 0000 0000 0000 0000 0000 0000 0000 ................
48060170: 0000 0000 0000 0000 0000 0000 0000 0000 ................
48060180: 0000 0000 0000 0000 0000 0000 0000 0000 ................
U-Boot# md.w 47810110
47810110:

无论是读取mmc1(未使用),mmc2均直接死机。

请问,如果要使用MMC2还需要特别设置什么东西吗?我使用的是sdk 6.0。

  • MMC2可以在Linux中挂载成一个存储文件的分区啊,为什么要在U-boot中使能呢。整个根文件系统可以用MMC0。

    在U-boot中使能MMC2要改动很多东西

  • 您可以查查  Table 8-23. Bus Interface Clocks 中,可以看到MMC 2是挂在L3总线上的,所以可以看看CM_PER_L3S_CLKSTCTRL这个时钟是否打开,如果没有打开,我的理解应该会导致读写相应寄存器出错。

  • Yaoming Qin 说:

    您可以查查  Table 8-23. Bus Interface Clocks 中,可以看到MMC 2是挂在L3总线上的,所以可以看看CM_PER_L3S_CLKSTCTRL这个时钟是否打开,如果没有打开,我的理解应该会导致读写相应寄存器出错。

    根据您的提示,打开了时钟功能后,果然可以操作SD卡了。但是仍然有点问题。

    我打开CONFIG_MMC_TRACE功能时,可以使用fatls功能查看mmc中的文件。但是把CONFIG_MMC_TRACE去掉时,就开始报错。报错信息如下:

    U-Boot# fatls mmc 1

    mmc_send_cmd : timeout: No status update

    Card did not respond to voltage select!

    ** Bad device mmc 1 **

    估计应该是时间引起的,在有打印信息时的了某种延时。去了调试信息时,时间不够造成的问题,我尝试把hsmmc.c文件中的延时加一倍后,仍然报错

    /* If we fail after 1 second wait, something is really bad */

    #define MAX_RETRY_MS    1000

    改成2000也无效。请问在这种情况下,还有其它地方的延时可以增加吗?

  • 您看看在uboot中,用下面的命令看看

    setenv mmcdev 2

    mmc rescan 2