问题现象:交换机(Marvell 88Q5152)与RTL8221E使用RGMII连接,RTL8221E 转出来的数据是错误的,并且很有规律。如下图:
(图中红色框内的是RTL8221E转出来的报文,绿色框内的是switch其他端口转出来的数据,可以看出RTL8221E转出来的都是0x..5)
我们一开始以为是RGMII通信中选上了RX/TX Delay的原因,尝试把RTL8221E配置中的RX/TX Delay取消,也就是把下图中的两个引脚拉低,现象仍然没有变。
现在无法定位问题,我们初步还是怀疑RGMII通信问题,但是布线的时候线长差都是有保证的,不知道RTL8221E这边还有没有其它必要的配置没做,或者是需要一些额外的操作?
附:RGMII部分相关原理图
因为第一次布线的时候没注意,导致RTL8221E与RJ45的MDI信号的线长有点长(3cm左右),并且信号线下面过了几个3.3V的供电线,不知道这个有没有影响?
不像是配置错误,像是焊接错误或pcb接错线了。
如果多台机器都是这个毛病可以排除焊接问题。
ethnet type在数值小于1536(0x0600)的时候表示的是长度。其它的几个字段要么是05的重复,要么是05,15,25等等。我倒觉得是否是驱动的数据填充的不对。感觉有什么地方都填成了0x05。最终导致了目标地址非法,CRC也错误。
会不会是因为RTL 8221E跟RJ45之间的距离有点远,然后下面走了一些电源线?这种电磁干扰的影响大么?
电路图贴出来下看下,不同厂商的RGMII接口连接最好用电容耦合,1000M的建议10nF,100M或者100M/1000M兼容的建议22nF