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 rmii2 管脚配置

Other Parts Discussed in Thread: AM3358

CPU:am3358   PHY:DP83848 X2   RMII接口 

RMII2中有个管脚U16 GPMC_A9 mode3有两种定义MMC2_DAT7 or RMII2_CRS_DV ,如下文所示:

(10) Silicon revision 1.0 devices only provide the MMC2_DAT7 signal when Mode3 is selected. Silicon revision 2.0 and newer devices implement another level of pin multiplexing which
provides the original MMC2_DAT7 signal or RMII2_CRS_DV signal when Mode3 is selected. This new level of of pin multiplexing is selected with bit zero of the SMA2 register. For more
details refer to Section 1.2 of the AM335x Technical Reference Manual.

1. rmii2插拔网线有link up/down的提示,但ping不通,应该跟该管脚mode3默认为MMC2_DAT7 有关吧?

2. 如果有关,在kernel下应如何修改呢?


  • 请各位大神解答一下,谢谢。

  • 可以查看trm的control module中pinmux的配置寄存器,进行配置

  • 感谢您的解答,我知道寄存器该配置成什么但不知道如何写代码。

    我应该在源码的哪个位置加呢,用什么函数呢,能否详细点,谢谢。

  • 薄工:

    这个寄存器是control module寄存器组的偏移值为1320的sma2寄存器,你调用的am33xx_cpsw_init()函数中就有对这组寄存器的操作函数,如:

    writel(gmii_sel, AM33XX_CTRL_REGADDR(AM33XX_CONTROL_GMII_SEL_OFFSET));

    你对应增加一个0x1320的偏移量的宏AM33XX_CONTROL_SMA2_OFFSET

    然后执行writel(0x1, AM33XX_CTRL_REGADDR(AM33XX_CONTROL_SMA2_OFFSET));

    放在你的板级初始化函数里。

    另外问下,你这个管脚用的是U16么?

  • 根据指导,并打印出SM2寄存器值

    static void __init am335x_evm_init(void)
    {
    #if 1 //bowei
    int sma2_val=readl(AM33XX_CTRL_REGADDR(AM33XX_CONTROL_SMA2_OFFSET));
    printk("before sma2= %x\n",sma2_val);
    writel(0x1, AM33XX_CTRL_REGADDR(AM33XX_CONTROL_SMA2_OFFSET));
    sma2_val=readl(AM33XX_CTRL_REGADDR(AM33XX_CONTROL_SMA2_OFFSET));
    printk("after sma2= %x\n",sma2_val);
    #endif //bowei
    am33xx_cpuidle_init();
    am33xx_mux_init(board_mux);
    omap_serial_init();
    am335x_evm_i2c_init();
    ...........

    **************************************

    打印信息如下:

    [ 0.105993] before sma2= 0

    [ 0.106019] after sma2= 1

    ...........

    Configuring network interfaces...

    [ 26.580131] net eth0: CPSW phy found : id is : 0x20005c90
    [ 26.772134] net eth1: CPSW phy found : id is : 0x20005c90
    done.

    并且插拔网线有如下提示:

    [ 541.770263] PHY: 0:01 - Link is Up - 100/Full
    [ 543.770249] PHY: 0:01 - Link is Down
    [ 545.600257] PHY: 0:03 - Link is Up - 100/Full
    [ 547.600235] PHY: 0:03 - Link is Down

    PHY:0:03可ping通;PHY:0:01无法ping通。

  • 首先,在U-boot下单独测这第二个网口是能ping通的么?用来确定硬件没问题。

    如果u-boot能ping通,在linux下敲ifconfig命令看下。

  • 在uboot下单独测试仍然不能ping通

    但mdio可以读取寄存器值,打印如下:

    get_phy_id():PHY_ID=20005c90
    get_phy_id():phyaddr=1
    phydev->speed=0
    phydev->link=1
    phydev->port=0
    phydev->addr=1
    phydev->phy_id=20005c90
    MII_BMCR=3100
    MII_BMSR=786d

    SMA2寄存器是立即生效的吗,

    我将写SMA2的代码尝试放在两个地方:

    1 在SPL阶段的enable_board_pin_mux()函数开始处;

    2 uboot阶段board_eth_init()中配置miisel寄存器【writel(RMII_MODE_ENABLE, &cdev->miisel)】函数前;

    #if 1 //bowei sma2 reg
    uint32_t sma2_val = readl(CTRL_BASE+0x1320);
    printf("before sma2_val=%x\n",sma2_val);
    writel(0x1, CTRL_BASE+0x1320); //write sma2 reg
    sma2_val = readl(CTRL_BASE+0x1320);
    printf("after sma2_val=%x\n",sma2_val);
    #endif //bowei sma2 reg

    打印信息:

    before sma2_val=0
    after sma2_val=1

    管脚配置pin mux我也仔细检查过了。

  • 首先要确定在U-boot下能调通第二个网口。

    CONFIG_PHY_ADDR这个指已经改为1了吧?gmii-sel寄存器也设置成0xc5了吧?

    感觉还是pinmux设置的问题

  • 你再仔细检查下管脚分配,实在不行协调一块AM335x SK参考板(双网口)给你做测试。

  • 薄工:

    第二个网口不通的问题解决了么?

  • 已解决。

    1.配置SMA2寄存器;

    2.双网口ip不同网段;

  • 问一下,第二个网口在U-boot下调通了么?也要设置不同的网段么?