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的CPSW是如何决定用哪个Slave通信的?



CPSW下可挂2个Slave,比如说我接2个PHY,在uboot下执行个ping命令,CPSW如何决定使用哪个PHY的呢?

  • 印象中这个是由你端口的IP以及端口ARP缓存来确定,比如你的PHY1接net1,PHY2接net2,两者的网段IP不一样,维护的ARP缓存也是不一样的,ping时候就会尝试到相应的网口上发包。但如果遇到了两个PHY接到了同样一个网络的情况,就可能会出现对外ping不通的可能,因为两个端口的ip是一致的,且在同一个网络意味着对外的ARP缓存也一致,如果双网口要同时工作的话,如何发包呢?这时候就需要划分VLan来解决这个问题。不过一般来说,双网口的这种同时工作在同一网段的应用非常少,因为没多大意义。一般就是用作backup(这个没问题,因为一个时间只会有一个工作,出问题了更换另一个),或者是在两个网段。

  • 印象中uboot只支持一路以太网

  • 在SDK06的U-boot中的这个变量:

    static struct cpsw_platform_data cpsw_data = {
     .mdio_base  = AM335X_CPSW_MDIO_BASE,
     .cpsw_base  = AM335X_CPSW_BASE,
     .mdio_div  = 0xff,
     .channels  = 8,
     .cpdma_reg_ofs  = 0x800,
     .slaves   = 1,
     .slave_data  = cpsw_slaves,
     .ale_reg_ofs  = 0xd00,
     .ale_entries  = 1024,
     .host_port_reg_ofs = 0x108,
     .hw_stats_reg_ofs = 0x900,
     .mac_control  = (1 << 5),
     .control  = cpsw_control,
     .host_port_num  = 0,
     .version  = CPSW_CTRL_VERSION_2,
    };

    slaves的值为1,而且cpsw_phy_init()函数中的phy_connect 函数也是指定地址为CONFIG_PHY_ADDR的PHY,所以应该是只初始化了一路以太网。

  • 你好,TI

    我這邊有個疑問,那就是 kernel/arch/arm/mach-omap2/device.c 裡有個地方是 phy_id=0:4, phy_id=0:05 這代表的是掛兩顆 PHY的意思嗎? 謝謝。