首页 > 技术知识 > 正文

1. 前言

DP83867IR被用作千兆以太网实现的PHY 当检测到预定义的64字节序列时 PHY被配置为在GPIO_0上提供一个脉冲 FSD后从位置62开始进行64字节匹配的PHY编程如下图所示:

Step Register Value (hex) Description 1 0x13C (RXFPAT1) 0x5f47 Pattern Bytes 0 and 1 2 0x13D (RXFPAT2) 0C0E Pattern Bytes 2 and 3 3 0x13E (RXFPAT3) FB4B Pattern Bytes 4 and 5 4 0x13F (RXFPAT4) 1D64 Pattern Bytes 6 and 7 5 0x140  to 0x15A(RXFPAT5) to (RXFPAT31) Bytes 8 to 61 Pattern Bytes 8 to 61 6 0x15B (RXFPAT32) 49E6 Pattern Bytes 60 and 61 7 0x15B (RXFPAT32) 54FB Pattern Bytes 60 and 61 8 0x15C (RXFPBM1) 0000 Byte Mask 0 to 15 9 0x15D (RXFPBM2) 0000 Byte Mask 16 to 31 10 0x15E (RXFPBM3) 0000 Byte Mask 32 to 47 11 0x15F (RXFPBM4) 0000 Byte Mask 48 to 63 12 0x0161 (RXFSTS) 003E Pattern start point (62 decimal) 13 0x0172 (GPIO_MUX_CTRL) 0003 Configures GPIO_0 pin for WoL Indication 14 0x0134 (RXFCFG) 0182 WoL on pattern enabled, level Indication

当发送图案时,设置工作正常,它提供了GPIO_0引脚上的脉冲 还证实,如果发送一个轻微损坏的模式,PHY不会错误地识别它。

面临的问题是,PHY运行大约一个小时后,产生错误的WoL检测, 没有接收到正确的模式 在错误的WoL检测后,我们检查了PHY寄存器,但发现它们的设置没有被破坏

同样的行为被测试了几次,并且使用了几块硬件板 将WoL模式的起始位置改为42似乎可以解决问题: 48小时后没有收到错误的WoL

2. 复现条件

卡有一个缺省配置的1000以太网端口,除了WoL之外 给出了它的设置 连接如下:

Pin Name 48QFN Pin # Mode PU/PD Resistors Notes RX_D0 33 1 None Address = 0 RX_D2 35 1 None Address = 0 RX_CTRL 28 3 PU=5k76, PD=2k49 Auto neg. enabled LED_2 45 1 None TX clock skew = 2ns LED_1 46 1 None TX clock skew = 2nsANEG_SEL=0 (ability of 10/100/1000) LED_0 47 1 None Mirror disabled GPIO_0 39 1 PD=2k49, No PU RX clock skew = 2ns GPIO_1 40 1 None RX clock skew = 2ns

DP83867IR  WoL不稳定运行

DP83867IR  WoL不稳定运行1

DP83867IR  WoL不稳定运行2

为了加速不稳定的WoL,应该有与卡频繁的通信 没有与卡的联系,我们花了大约一周的时间才得到一个不稳定的WoL,其模式为62

3. 寄存器问题分析

有2个寄存器写入到0x015B 认为这是一个错误配置

DP83867IR  WoL不稳定运行3

确认一下字节8到59 用于设置PHY寄存器的脚本是正确的,并将模式的所有64字节设置为Ok。屏蔽位全为零

另外一个澄清: WoL模式并非全为零,它是一个特定的模式。 验证了,当发送正确的模式,在与帧开始相关的正确位置,它确实产生WoL信号 还检查了发送模式中哪怕是一个位的更改都不会激活WoL

4. 验证WoL功能

已经用从字节62开始的模式验证了WoL功能 已经包含了写到DP83867时使用的脚本 为了进一步验证,在配置寄存器0x0172之后,我在GPIO_0引脚上捕获了WoL脉冲 还配置了寄存器0x0134到0x0082,为脉冲配置了WOL_OUT_MODE

DP83867IR  WoL不稳定运行4

//delay 100 //0000 2100 // force 100Mbps, full-duplex 013C 475f //Pattern Bytes 0 and 1 013d 0e0c //Pattern Bytes 2 and 3 013e 4bfb //Pattern Bytes 4 and 5 013f 641d //Pattern Bytes 6 and 7 0140 0000 // 0141 0000 // 0142 0000 // 0143 0000 // 0144 0000 // 0145 0000 // 0146 0000 // 0147 0000 // 0148 0000 // 0149 0000 // 014a 0000 // 014b 0000 // 014c 0000 // 014d 0000 // 014e 0000 // 014f 0000 // 0150 0000 // 0151 0000 // 0152 0000 // 0153 0000 // 0154 0000 // 0155 0000 // 0156 0000 // 0157 0000 // 0158 0000 // 0159 0000 // 015a e649 //Pattern Bytes 60 and 61 015b fb54 //Pattern Bytes 60 and 61 015c 0000 //Byte Mask 0 to 15 015d 0000 //Byte Mask 16 to 31 015e 0000 //Byte Mask 32 to 47 015f 0000 //Byte Mask 48 to 63 0161 0000 //Pattern start point (62 decimal) 0172 0003 //Configures GPIO_0 pin for WoL Indication 0134 0082 //WoL on pattern enabled, level Indication, pulse mode
<

然后配置SmartBits与以下模式的生成

DP83867IR  WoL不稳定运行5

5. 问题分析

所遇到的问题与发送正确图案时PHY的“正常”响应无关 而是在没有接收预设图案的情况下产生不稳定的脉冲WoL

一些建议: 当观察这些WoL脉冲时,任何数据包吗? 还是线路是无声的? 如果发送数据包,你是否发送随机数据包(不是指定的魔法数据包)? 或者是在发送类似于魔法包的数据包吗? 发送的任何数据包都与魔法数据包匹配吗?

观察WoL时,只是通过PHY与卡进行通信 没有发送任何类似的数据包到魔术包或设置WoL包 实际上,我们使用Wireshark监控线路,非常确定没有WoL模式到达PHY之前得到不稳定的WoL检测 请注意,可能需要一段时间才会发生 不稳定的WoL(有时可能需要一个星期,这取决于通信流量)

设置了WoL设置和smartbits传输一个预定义的数据包,不匹配WoL魔法模式 会让示波器在”单”捕获模式下运行一整夜然后以1.7V的电压触发 看看是否能得到WoL脉冲

6. 实验结果

执行了如上所述的测试,没有WoL脉冲 向PHY发送的模式类似于魔术模式 除了数据模式字节被替换为“FF”

DP83867IR  WoL不稳定运行6

(范围设置在单次捕获和1.7V触发)

DP83867IR  WoL不稳定运行7

建议: 确保数据中没有随机化, 因为在smartbits上使用随机序列函数时确实看到了WoL脉冲 魔法包中的字节掩码越少(字节为“00”),序列匹配随机数据并发送WoL脉冲的概率就越低

猜你喜欢