以下文档第 13-5 页第 13-5 页描述的 MDIO Core 章节下的寄存器地图出现错误:
在表格中指出,MDIO_DEVAD、MDIO_PRTAD和MDIO_REGAD的地址偏移0x20,0x21应该用于MDIO_ACCESS。但是,它们在文档中四处交换,实际上它们应该分别读取0x21和0x20。
注意:指定的寄存器地址偏移量(0x20和0x21)实际上是文字地址,相应的字节地址将分别0x80和0x84。
写入访问权限
写入外部 PHY 的访问权限可以通过使用 MDIO 接口完成,如下所示:
- 在地址偏移0x21中,对 MDIO 内核寄存器执行Avalon®-MM 主写入,指定外部 PHY 设备地址 (MDIO_DEVAD)、端口地址 (MDIO_PRTAD) 和寄存器地址 (MDIO_REGAD)。
- 将 32 位数据的Avalon MM 主写入MDIO_ACCESS寄存器偏移0x20。
MDIO 内核会发生什么?
将数据放置到MDIO_ACCESS寄存器后,MDIO 内核便开始生成 MDIO WRITE 帧,其中包含在寄存器中提供的信息,并0x20和0x21。然后将帧传输到目标 PHY 寄存器中,其地址在 MDIO 内核寄存器的MDIO_REGAD(比特 [31:16] 在偏移0x21中指定)。
阅读访问权限
可使用 MDIO 接口从外部 PHY 读取访问权限,如下所示:
- 在地址偏移0x21中,对 MDIO 内核寄存器执行Avalon-MM 主写入,指定外部 PHY 设备地址 (MDIO_DEVAD)、端口地址 (MDIO_PRTAD) 和寄存器地址(MDIO_REGAD)。
- 以偏移0x20发行 32 位MDIO_ACCESS寄存器的 Avalon-MM 主读取。
MDIO 内核会发生什么?
当发出对MDIO_ACCESS寄存器的读取访问权限时,MDIO 内核开始生成 MDIO READ 帧,其中包含在寄存器中提供的信息以抵销0x21。作为对通过 MDIO 的本读取命令的响应,外部 PHY 提供指定寄存器返回 MDIO 内核的价值。此值加载到 MDIO 内核的MDIO_ACCESS寄存器中以偏移0x20。因此,似乎就像我们在偏移0x20读取本地 Avalon-MM 寄存器一样。
此问题将影响 MegaWi® 和 SOPC Builder 流程。