读取超出 0x1F 的 PHY MII 寄存器

读取超出 0x1F 的 PHY MII 寄存器

我在使用 DP83826 PHY 时遇到一些问题,因此我想读取一些配置寄存器。我使用了 mdio-tool 和 mii-diag,但我刚刚意识到我只能读取前 32 个寄存器。

mii-diag -v(详细)显示前 32 个寄存器(这可能不是巧合),如果我使用地址超出 0x1F 的 mdio-tool,则地址会移位以保持在 0..1F 范围内。我查看了 mdio-tool 的代码,它根本不限制寄存器地址,我还破解了 mii-diag -va 位以获得超过 32 个寄存器,并且它还一次又一次返回前 32 个寄存器。所以看来限制是在其他地方,但我仍然没有找到在哪里。我现在正在尝试查明是否是 API 或设备驱动程序导致了此问题。

我也尝试过 ethtool -d eth0 但它只转储 GMAC 和 DMA 寄存器。

如何在 Linux 中读/写 0x1F 以外的 PHY MII 寄存器?

答案1

我弄清楚它是如何工作的:

基本标准 MDIO 地址由 5 位组成,因此只能直接访问 [0..32] 范围。对于提供超出基本标准的附加寄存器的设备,可以使用 MDIO 可管理设备 (MMD) 间接方法(在 IEEE 802.3ah 草案第 22 条中定义)来访问扩展寄存器集。

最后,这只不过是通过基址范围内的几个寄存器进行间接访问。在我的特殊情况下(正如所指出的@默里·詹森)、REGCR (0x0D) 和 ADDAR (0x0E) 用于此目的。寄存器内的地址和位字段可能(并且可能会)因芯片而异,但机制应该相当相似。

相关内容