我使用的是 Arty 板(Digilent)、我尝试通过 FPGA 与 DP83848JSQ 进行通信。
我已经确认 PHY 在另一个设计中工作正常、但我特别尝试通过 MDIO/MDC 读取和写入 PHY 寄存器、我在其他地方没有测试过这种情况。
但是、我看到出现了一些有趣的行为。
我正在尝试发送消息线[13:0]消息= 14'b00000100000110;该消息应指示地址00001处的 PHY 将寄存器0的内容发送回 FPGA。 我只有一个 PHY 连接到 FPGA、根据 Digilent 的说法、PHY 在加电时设置为地址0001。
我现在的过程是通过 RESET 引脚向 PHY 发送复位信号、并在不久之后跟踪32个时钟周期。 实际上、为了确保安全、我要发送更多像60这样的数据、因为我知道在复位和同步之间需要等待一段时间。
同步后、我将在每个 MDC 时钟周期的边缘通过 MDIO 一次发送1位消息。
在我发送消息的最后一位后、我将 MDIO 置于高阻态以进行接收。 问题是、我似乎没有收到任何东西。 MDIO 不会像它应该的那样被 PHY 下拉。
下面是这种情况的屏幕截图(在本示例中、MDC 为10MHz。 我没有注意到使用较慢/较快时钟时的变化):
放大:
但是、如果我发送消息 线[13:0] 消息= 14'b0000000110;该消息发送到 PHY 地址0x0、这不是 ARTY 所期望的那样、MDIO 会在一段时间内被 PHY 下拉、但我看不到任何数据。
下面是这种情况的屏幕截图 (在本示例中、MDC 为10MHz。 我没有注意到使用较慢/较快时钟时的变化):
它会变得更加混乱、就像我将消息更改为发送到 PHY 不应响应的无效地址、 接线[13:0] 消息= 14'b00000110000110;MDIO 永远不会被下拉、这表明在使用正确的地址时 PHY 正在执行某些操作。
下面是这种情况的屏幕截图(在本示例中、MDC 为10MHz。 我没有注意到使用较慢/较快时钟时的变化):
以及同一波形的更放大版本: