我想知道您是否可以帮助我解决在第45条 MDIO 模式下运行时遇到的访问 TLK10031中的某些寄存器的问题。
我们使用 TLK10031将 XAUI 转换为 XFI (10GBASE-R)。 我们有一个 Marvell 88E6390X 10G 以太网交换机、其中端口9需要为10GBase-R 遗憾的是、上述开关不支持 XFI (10GBASE-R)-仅支持 RXAUI 和 XAUI -因此我们使用 TLK10031从 XAUI 转换为 XFI。
更复杂的是、我们使用 Marvell Armada 38x 处理器进行管理、但 MDIO/MDC 端口仅支持第22条 MDIO 模式。
我从阅读数据表和表7-2中了解 到、要在10G-KR 模式下运行、在复位的上升沿、ST 和 MODE_SEL 引脚都需要为0 -这正是我们所做的:
当 ST 和 MODE_SEL 都设置为0时、访问寄存器的唯一方法是第45条模式。 但是、处理器仅支持第22条模式、因此为了避免这种不兼容性、我们已将 MDIO/MDC 引脚从处理器和 TLK10031路由到 FPGA。 我们在 FPGA 中编写了一个状态机,当我们从处理器向某些 FPGA 寄存器写入 op、PhyAddr、DevType 和 addr/数据时,它允许我们向 TLK10031 (这是一种两相协议)生成第45条帧-使用第22条模式:
https://www.totalphase.com/support/articles/200349206-MDIO-Background#clause45。
我们有这样的工作方式。 我们能够使用 DevType 1读取 PMA/PMD 寄存器(详细信息见数据表第91页)、使用 DevType 3读取 PCS 寄存器(见115页)、使用 DevType 7读取 Auto-Neg 寄存器(见123页)、如下所示:
cl45_dbg++命令的语法如下:
用法:./cl45_dbg++ r [port/phy][device][addr][num]
对于该板、TLK10031映射到 PHY 地址 C
但是、我看到一些我无法从数据表中理解的奇怪行为。 特别是,虽然我可以使用第45条访问 DevType 1、3和7 (PMA/PMD、PCS 和 ANEG)寄存器组,但我似乎无法访问 DevType 0x1E (厂商特定寄存器):
如果我在访问 DevType 0x1E 时查看示波器上的 MDIO/MDC 引脚,一切对我来说都很好,除了 TLK10031在过去的16个时钟周期内不驱动 MDIO:
在读取 DevType 0x07 (AutoNeg)寄存器0时对此进行比较-见下文。 第二个屏幕截图显示了 TLK10031在过去16个时钟周期内将0x3000驱动到 MDIO 上-如果您参考数据表中的图7-151、这是正确的。
还有其他一些观察结果。 它们如下:
TLK10031似乎需要33个前导码时钟周期。
读取 DevType 0和1会返回相同的寄存器集。
读取 DeType 2和3会返回相同的寄存器集。
读取 DevType 4和5将返回所有 FFs。
5.读取 DevType 6和7会返回相同的寄存器集
6.读取 DevType 8到 0x1f 将返回所有 FFs。
您能否确认上述观察结果是否正确、能否提供任何帮助来读取供应商寄存器(DevType 0x1E)