TI中文支持网
TI专业的中文技术问题搜集分享网站

网络速度问题

千兆以太网的网络网络方案:6657 EMAC接PHY(888E1112),再接交换机芯片(BCM53125)到RJ45;

1、通过网线接到PC机上面,链路协商的速率是千兆,交换机芯片的两个交换端口互联传输数据,使用的feiq,传输速度可以到45MB/s,说明交换机芯片的工作正常;

2、整个网络链路的传输速率测试只有1.12MB/s,可能的原因是DSP和PHY之间的链路速率只有10M;

3、DSP端的SGMII接口在配置的时候只能配置为slave模式(在和PHY连接的时候),SGMII在配置自己端速率的 时候根据Link Partner Advertised Ability Register (MR_LP_ADV_ABILITY)寄存器获取的值来配置;检查该寄存器的值为0xD0001,显示的从PHY端(执行完SGMII自协商后)获取的速率为10M,所以整个链路的整体速率也就只能跑到1.12MB/s;

问题基本能够确定是由于DSP和PHY在自协商的时候获取的对端速率能力不是正确的1000M,导致整个链路速率跑不上去;

关于DSP和PHY之间速率配置的问题该如何解决,如何使速率可以正确的配置到1000M???

或者我上面思路有问题???

Thomas Yang1:

1)SGMII在做自协商时,会先将速率降到10M,再根据两端最大支持速率和双工模式配置能力,请问你的SGMII PORT初始化代码是什么样的呢?

在传输前要保证自协商标志位都是正常的,如下是个例子,供参考:

if((ETHERNET_AUTO_NEGOTIAT_SLAVE==ge_cfg->ethernet_port_cfg[i]->mode) ||(ETHERNET_AUTO_NEGOTIAT_MASTER==ge_cfg->ethernet_port_cfg[i]->mode)) { /*1 Setup the SGMII as slave and enable autonegotiation: */ /*1a Set bit 0 of the MR_ADV_ABILITY register */ gpSGMII_regs[i]->MR_ADV_ABILITY_REG &= 0xFFFF0000; /* Clear the register contents */

if(ETHERNET_AUTO_NEGOTIAT_SLAVE==ge_cfg->ethernet_port_cfg[i]->mode) { gpSGMII_regs[i]->MR_ADV_ABILITY_REG |= 0x00000001;

/*1b Enable autonegotiation by setting the MR_AN_ENABLE bit in the*/ gpSGMII_regs[i]->CONTROL_REG |= CSL_CPSGMII_CONTROL_REG_MR_AN_ENABLE_MASK; } else { gpSGMII_regs[i]->MR_ADV_ABILITY_REG |= 0x00009801;

/*1b Enable autonegotiation by setting the MR_AN_ENABLE bit in the*/ gpSGMII_regs[i]->CONTROL_REG |= CSL_CPSGMII_CONTROL_REG_MR_AN_ENABLE_MASK |CSL_CPSGMII_CONTROL_REG_MASTER_MASK; } /*2 Poll the SGMII_STATUS register to determine when autonegotiation is complete without error. The AN_ERROR bit in the SGMII_STATUS register will be set if the mode was commanded to be half-duplex gigabit.*/ while(0==gpSGMII_regs[i]->STATUS_REG&CSL_CPSGMII_STATUS_REG_LOCK_MASK); while(0==gpSGMII_regs[i]->STATUS_REG&CSL_CPSGMII_STATUS_REG_LINK_MASK); while(0==gpSGMII_regs[i]->STATUS_REG&CSL_CPSGMII_STATUS_REG_MR_AN_COMPLETE_MASK);

if(gpSGMII_regs[i]->STATUS_REG&CSL_CPSGMII_STATUS_REG_AN_ERROR_MASK) puts("Half dulpex mode was negotiated!");

2)对端交换机芯片上配置的是什么能力,你可以从对端交换机直接获取。

3)请检查SGMII LINK PARTNER ADV ABILITY_REG 看PHY获取的是什么能力,若PHY获取的能力是正常的,只是SGMII获取有问题,我们可以通过设置EXT_EN 来对SGMII能力进行软件配置,而不通过PHY协商结果自动获取

du jianfeng:

回复 Thomas Yang1:

1、我的SGMII端口初始化的代码是使用的官方PDK6657中emac_drv.c中eamc_open()函数中的初始化代码,SGMII配置的是slaver;使能atuonegotiation;按照手册,SGMII如果配置为slaver,DSP端的速率等能力是根据MR_LP_ADV_ABILITY寄存器的值来配置的,该寄存器的值是在完成SGMII的自协商过程后获取的(这里我个人的理解是否有误),现在该寄存器获取的值是0xd001,即10M全双工;2、交换机芯片的是MDI接口接到PHY端,交换机芯片的工作速率是工作在1000M(根据两个交换端口之间互联的数据测试);3、你说的“请检查SGMII PARTNER ADV AABILITY 看PHY获取的是什么能力”,是不是指的DSP端的SGMII获取的PHY的能力?如果是,现在SGMII获取的PHY端的能力是不正确的,值是0xd001(根据MR_LP_ADV_ABILITY寄存器的值);后面的通过设置EXT_En对SGMII进行软件配置是通过DSP在初始化SGMII的时候进行,还使用MDIO接口对PHY进行配置?4、DSP端的SGMII只能配置为salver,MR_LP_ADV_ABILITY寄存器是只读;MR_ADV_ABILITY是可读写;如果软件配置SGMII的能力,该如何配置?谢谢!

du jianfeng:

回复 Thomas Yang1:

谢谢Thomas Yang1的回复,我还有一些问题需要你的帮助!

1、我的SGMII端口初始化的代码是使用的官方PDK6657中emac_drv.c中eamc_open()函数中的初始化代码,SGMII配置的是slaver;使能atuonegotiation;按照手册,SGMII如果配置为slaver,DSP端的速率等能力是根据MR_LP_ADV_ABILITY寄存器的值来配置的,该寄存器的值是在完成SGMII的自协商过程后获取的(这里我个人的理解是否有误),现在该寄存器获取的值是0xd001,即10M全双工;2、交换机芯片的是MDI接口接到PHY端,交换机芯片的工作速率是工作在1000M(根据两个交换端口之间互联的数据测试);3、你说的“请检查SGMII PARTNER ADV AABILITY 看PHY获取的是什么能力”,是不是指的DSP端的SGMII获取的PHY的能力?如果是,现在SGMII获取的PHY端的能力是不正确的,值是0xd001(根据MR_LP_ADV_ABILITY寄存器的值);后面的通过设置EXT_En对SGMII进行软件配置是通过DSP在初始化SGMII的时候进行,还使用MDIO接口对PHY进行配置?4、DSP端的SGMII只能配置为salver,MR_LP_ADV_ABILITY寄存器是只读;MR_ADV_ABILITY是可读写;如果软件配置SGMII的能力,该如何配置?谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 网络速度问题
分享到: 更多 (0)