工具与软件:
您好!
在定制电路板上、我们使用 DP83867IR 器件、SMI 在25 MHz 和3.3V 下运行。 根据 IEEE 802..3第22条标准、使用1.5K 电阻将 MDIO 线路上拉至3.3V。
我们使用一个 FPGA 作为"站点"和3个 DP83867 PHY。 我们在不含任何前导码的情况下运行事务、因为 PHY 应该支持此功能。
此接口有问题:在某些情况下(所有三个 PHY 的行为都相同)、PHY 无法有效地考虑连续的事务。
MDC 和 MDIO 信号是干净的(无信号完整性问题)、并且以几纳秒的裕量满足时序限制(设置/保持时间)。
当事务(以任何顺序或读取和写入的组合)被大约1.3 µs 隔开时(在25MHz 上看起来像是32个时钟周期)、一切看起来都很正常。
当连续事务发生且第一个事务的结束与第二个事务的开始之间的1.3 µs 小于时、事务有时会失败:
-对于读取、PHY 不驱动 MDIO 管脚、读取结果为0xFFFF
-对于写入操作,没有任何作用(之后读取值显示目标寄存器值没有改变)
我们已经注意到、仅当第一个事务帧的最后一位为"0"时才会出现该问题。
当帧的最后一位为"0"时、一旦事务结束、MDIO 线路需要几十 ns 才能达到逻辑"1"电平(VIH_min = 1.7V)。 我们在应用中测量了大约100ns、这是一致的、可以达到的预期值(时间常数 RC = 1.5K * 66 pF)。 然后、PHY 可以在事务结束后的下一个上升沿以低电平对 MDIO 线路进行采样。
然而、当帧的最后一位为"1"时、当事务有效结束时、MDIO 线路已经为高电平。 然后、PHY 始终在事务结束后的下一个上升沿采样高电平。
这是观察到的行为可能唯一的区别:我们想知道 PHY 是否可能检测到"错误"的事务开始(即"01"模式)、然后将其视为无效、因为以下操作码既不是10、也不是01。 在这种情况下、如 BMSR 位6说明中所述、PHY 需要在能够响应新事务之前发出前导码(MDIO 在32个时钟周期内处于高电平)。
您确认我们的解析吗? 我们在操作 SMI 时是否没有意识到一些限制?
感谢您的帮助。
此致、
Nicolas