当客户的以太网PCS无法连接时,本文将提供基于T1024的逐步调试指南。
许多以太网接口由 SerDes 配置,因此需要确认链路错误究竟是由 SerDes 还是由 PCS 本身引起的。本文将提供一些线索。
Serdes Lane&pins
首先检查您正在使用的是哪一条 SerDes 通道,并在《QorIQ T1024 参考手册》中确认对应的 SerDes 通道。如下面的配置,用户在 RCW[128:136] 中设置 SRDS_PRCTL_S1=0x05B,应用程序将利用 SGMII.m1 和 SGMII.m2。
本文将以SGMII.m1为用户案例,现在SGMII将在帧管理器MAC1中。
请检查 SerDes 通道分配以确认使用的是哪一条 SerDes 通道。以 SGMII.m1 为例,其对应的通道引脚名称为 SD1_TX3P/N 和 SD1_RX3P/N,可认为这是通道 3。
MAC 编号与 SerDes 通道编号无关,请查阅相应的表格以确定具体引脚。
任何使用此以太网的硬件测试都应与引脚相关,请参阅以下的元器件引脚编号。
您可以测试该通道的 RX 引脚眼图,以确认频率是否正确。如果您将该通道设置为 SGMII 1.25G,可以通过眼图确认信号速率是否配置正确。
上面的眼图仅显示SerDes的速度。
在环回测试看似正常时,这一点尤为重要,因为它可能仍然无法与其他设备正常连接。
如何确认 SerDes 链路已建立
请在《QorIQ T1024 参考手册》中查找对应的通道寄存器。
在本使用场景中采用的是通道 3,因此需要读取通道 3 的寄存器,以确认 SerDes 通道 3 是否正常运行。例如如下:
# 3号通道
md.l 0xFFE0EA8C0 1 - aa611080 # LN3GCR0
md.l 0xFFE0EA8C4 1 - 101c4019 # LN3GCR1
md.l 0xFFE0EA8CC 1 - 00002800 # LN3SSCR0
md.l 0xFFE0EA8D0 1 - 0f0fc01f # LN3RECR0
md.l 0xFFE0EA8D4 1 - 0f0f0fa8 # LN3RECR1
md.l 0xFFE0EA8D8 1 - 00003006 # LN3TECR0
md.l 0xFFE0EA8E0 1 - 39000400 # LN3TTLCR0
md.l 0xFFE0EA8E4 1 - 00000000 # LN3TTLCR1
md.l 0xFFE0EA8F4 1 - 00000000 # LN3TCSR1
md.l 0xFFE0EA8FC 1 - 04000000 # LN3TCSR3
SerDes_LNnTCSR3 是一个重要的调试测试寄存器,CDR_LCK 用于检查 CDR 是否锁定。
CDR_LCK=0表示未检测到有效的比特流。作为测试,您可以将通道置于环回模式 LN2TCSR3[LPBK_EN]=01。CDR 应锁定在数字环回模式(内部环回)。否则,设备本身可能会出现问题。
所以,如果您能把 LPBK-EN 设置为“01”环回模式,它会在环回模式下将 SerDes 自身的 TX 和 RX 信号设置为排除外部信号,然后再检查 CDR_LCK,如果是 1,SerDes 本身就运行良好。总之,CDR_LCK 应该始终被置位。
在 “md.l 0xFFE0EA8FC 1 - 04000000 # LN3TCSR3” 的输出中,CDR_LCK=0,怀疑问题发生在 SerDes 端。
正常状态应为:
=> md fe0ea8fc 1
fe0ea8fc:08000000
如何确认 PCS 链路已建立
有关 MAC 和 PHY 寄存器的详细信息,请参阅《T1024DPAArm,QorIQ T1024 数据路径加速架构 (DPAA) 参考手册》
在DPAARM中找到偏移地址。
对于 SGMII,MAC 地址应为 offset+0x1000。
请按照《T1024DPAARM》中第 6.5.4 节“MDIO 以太网管理接口使用说明”的指示来读取 MDIO 寄存器。
在本应用场景中,接口为 SGMII1、MAC1,此时 MAC1 的地址为 FM1_mEMAC1:4E_0000,对应的 FM1_mEMAC1 MDIO 寄存器起始地址为 4E_1000h。
本例协议采用 SGMII,读取时应按照《T1024DPAARM》6.5.4.3 节“Clause 22 读取流程”的步骤执行。
6.5.4.3 第 22 条阅读流程
1) 等待 MDIO_CFG[BSY] = 0。
2) 用正确的 PHY_ADDR 和 REGISTER_ADDR 写入 MDIO_CTL,并设置第 16 位。
3) 等待 MDIO_CFG[BSY] = 0。
4) 如果寻址的 PHY 没有响应,则设置 MDIO_CFG[MDIO_RD_ER]。
否则读取 MDIO_DATA 值。
在本使用场景下,应读取 MDIO_SGMII_SR,您可以在《QorIQ T1024 参考手册》30.5.5 节 “1000Base-KX PCS MDIO 内存映射/寄存器定义”中查阅该寄存器的具体定义
关键位如下:
以下是本使用场景的结果:
读取 MDIO_SGMII_SR 时,请使用能够满足延迟时间要求的手动输入。
如果您无法手动输入,请按照流程进行操作,“等待 MDIO_CFG[BSY] = 0”再读取 MDIO_DATA 值。
读取SGMII1 MDIO寄存器
=== Serdes 测试 1 ===
0xFFE0EA8FC 值:0x08000000
转储 PCS0 寄存器 0xFFE4E1030-0xFFE4E103C:
0x40001408
0x00000000
0x00001340
0x00001340
选择 0x8002,devmem 0xFFE4E1034 32 0x8002
Read: 0x00000083
选择0x8003,devmem 0xFFE4E1034 32 0x8003
读取:0x0000E400
选择 0x8001,devmem 0xFFE4E1034 32 0x8001
Serdes0 状态:0x00000029
选择 0x8001 devmem 0xFFE4E1034 32 0x8001
Serdes0 状态:0x0000002D
选择 0x8001,devmem 0xFFE4E1034 32 0x8001
Serdes0 状态:0x0000002D
第一次没有链路,LINK_STAT 为 0(0x00000029),然后变为 1(0x0000002D)。
现在 PCS 链路已建立,硬件环回检查流程也已完成。