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

C6678通过SGMII接口与88e1512连接,link能够建立,EMAC也能完成初始化,但网络无法数据通信和ping

(协议栈修改的helloword UDP,在开发板上运行正常,图片显示有问题的话,可以查附件2843.C6678与88E1512调试问题.docx) 

1-TMS320C6678与88e1512(以下统一称为PHY)通过SGMII接口进行连接,硬件回路上使用0.1uf电容进行AC耦合;

2-MDIO和MDC接口连接PHY芯片,通过读取寄存器和写入寄存器,能够确定MDIO接口工作正常,PHY芯片可以进行配置,且通过软复位之后,再次读取寄存器值证明写入成功;

3-PHY的MDI引脚通过0.1uF电容与PC端的网口连接,直接上电后能够显示PHY与PC端完成link up,且使用88e1512自带的packet generator(通过MDIO设置PHY寄存器)可以验证PHY发送出来的数据PC端是能够接受到的;

4-DSP启动过程如下:系统时钟初始化(初始化成功,能够测试到sysclkout输出166MHz);使能电源域MyPowerUpDomains();初始化Serdes(我的输入时钟是125M,故设置值为0x000000A1),可以看到是初始化成功了;


然后初始化MDIO,通过寄存器读取和抓取DSP在MDIO引脚上的输出电平,能够看到初始化成功了;

初始化MDIO后,开始配置PHY寄存器,配置内容如下:
 
配置PHY为SGMII to copper模式,并通过软件复位使能该配置(我使用uiRegValue直接赋值的原因是我使用官方的Get_Reg函数读取出来的值全部为0,但抓取gpMDIO_regs是能够读到寄存器值的,这个原因不详,所以只能直接赋值进行配置了);

后边的配置主要包括屏蔽PHY的半双工模式(9_0)、配置速率为百兆(21_2),自协商还是使能着的,然后复位page进行使能;
 
紧接着使能SGMII(0),这个里面速率设置为100Mbps,全双工,能够看到自协商和linkup都通过了。
 
最后开始启动协议栈。
 
5-整个程序在官方开发板运行正常,除了PHY芯片的配置是额外添加的,Serdes时钟和SGMII接口有变化,其他均未改动;官方开发板运行的结果,ping能够通,数据收发也没有问题;但程序在自己的板子上能够看到MAC建立起来(官方开发板和自己的板子运行结果均如下),IP也添加,但就是无法数据收发和ping。程序启动起来后,DSP读取PHY的LINK_REG、ALIVE_REG、LINK_INT_RAW_REG、LINK_MASKED_REG均为1。

 
请各位大佬拨冗指导一下。
Shine:

请问用的是NDK里的helloworld例程吗?NDK里用的是网口1,您用网口0的话,需要做修改,具体请参考下面的wiki网站上的例子。
processors.wiki.ti.com/…/NDK,_PA_Resource_Wiki_for_Keystone_Devices

,

user6257143:

谢谢您的回复,网口已经做了修改,我再学习一下您的链接。

,

user6257143:

在SGMII初始化的过程中,macPortNum设置为0,进行了初始化。还有其他地方需要修改么?
if (macPortNum == 0) {/* Hold the port in soft reset and set up* the SGMII control register:*(1) Disable Master Mode*(2) Enable Auto-negotiation*/CSL_SGMII_startRxTxSoftReset (macPortNum);CSL_SGMII_disableLoopback (macPortNum);//LSL 2020.05.31 新添加CSL_SGMII_disableMasterMode (macPortNum);CSL_SGMII_enableAutoNegotiation (macPortNum);CSL_SGMII_endRxTxSoftReset (macPortNum);
/* Setup the Advertised Ability register for this port:*(1) Enable Full duplex mode*(2) Enable Auto Negotiation*(3) Enable the Link*/sgmiiCfg.linkSpeed=CSL_SGMII_100_MBPS;//100BASE-TXsgmiiCfg.duplexMode=CSL_SGMII_FULL_DUPLEX;sgmiiCfg.bLinkUp=1;CSL_SGMII_setAdvAbility (macPortNum, &sgmiiCfg);
do{CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);} while (sgmiiStatus.bIsLinkUp != 1);
do{CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);if (sgmiiStatus.bIsAutoNegError != 0)return; /* This is an error condition */} while (sgmiiStatus.bIsAutoNegComplete != 1);}

,

Shine:

有用wiki网站上给的例程吗?

,

user5006404:

您好,我也遇到运行Helloworld例程后,无法PC ping通DSP的问题,请问您最终是如何解决的呢?非常感谢!

,

user6257143:

官方程序对应的是EMAC0,你确认下你用的是0还是1?得重新编译一下底层,方法看官方有说明。

赞(0)
未经允许不得转载:TI中文支持网 » C6678通过SGMII接口与88e1512连接,link能够建立,EMAC也能完成初始化,但网络无法数据通信和ping
分享到: 更多 (0)