DP83TD510E 计数器错误调试记录
1. 前言
测试EVM以验证DP83TD510
寄存器如下
RX TX
0 x012e 0 x012b
0 x012f 0 x012c
0 x0130 0 x012d
奇怪的是,发送错误计数器0x012D的寄存器总是具有与发送计数器(0x012B和0x012C)相同的值。
数据包是简单的ping,有一个应答,即没有数据包被丢弃。
2. 查询如下几个问题
(1)查询这些寄存器中读取的准确值
(2)读取0x012B, 0x012C, 0x012D来清除寄存器
每次试着在几秒钟后4-5秒,以确认可以成功清除寄存器
3. 框图 & 脚本
包括两个DP83TD510评估板连接一个特殊的SPE Cabel从Harting。
一边是树莓派4,我的Thinkpad以1Hz的频率发送信号。
这台Thinkpad定期使用python脚本读取寄存器。
寄存器被清除后,所有三个他们的顺序,然后计算结果。
在我的代码中读取RX和TX计数器,问题只显示与TX计数器。
import serial
import time
import math
ser = serial.Serial(
port='COM6',
baudrate=9600,
timeout = None,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
TX = 0
TX_err = 0
RX = 0
RX_err = 0
def read_TI_register(ID, address):
request = f"{ID:02}{address:04X}=/"
#print(f"request: {request}")
ser.write(bytes(request,'utf-8'))
response = ser.readline()
#print(f"response: {response}")
i_response = int(str(response,'utf-8'),16)
#print(f"read Register: 0x{address:04X} = 0x{(str(response,'utf-8'))}")
return i_response
def read_TI_register_exd(ID, address):
request = f"{ID:02}{address:04X}*/"
#print(f"request: {request}")
ser.write(bytes(request,'utf-8'))
response = ser.readline()
#print(f"response: {response}")
i_response = int(str(response,'utf-8'),16)
#print(f"read Register: 0x{address:04X} = 0x{(str(response,'utf-8'))}")
return i_response
def write_TI_register(ID, address, value):
request = f"{ID:02}{address:04X}{value:04X}*/"
ser.write(bytes(request,'utf-8'))
response = ser.readline()
i_response = int(str(response,'utf-8'),16)
#print(f"wrote Register: 0x{address:04X} = 0x{(str(response,'utf-8'))}")
return i_response
def read_MSE_dB(ID):
r = read_TI_register(ID, 0x872)
MSE = 10 * math.log10(r/2**17)
SNR = MSE - 1.76
#print(f"MSE: {MSE:f} dB, SNR: {SNR:f} dB")
return MSE
#read_MSE_dB(0)
def read_n_clear_tx_pkt_cnt():
global TX
global TX_err
TX = TX + read_TI_register_exd(0, 0x12B)
TX = TX + read_TI_register_exd(0, 0x12C) * 2**16
TX_err = TX_err+ read_TI_register_exd(0, 0x12D)
print(f"tx_cnt = {TX} tx_error = {TX_err}")
return TX
def read_n_clear_rx_pkt_cnt():
global RX
global RX_err
RX = RX + read_TI_register_exd(0, 0x12E)
RX = RX + read_TI_register_exd(0, 0x12F) * 2**16
RX_err = RX_err + read_TI_register_exd(0, 0x130)
print(f"rx_cnt = {RX} rx_error = {RX_err}")
return TX
try:
while True:
read_n_clear_rx_pkt_cnt()
read_n_clear_tx_pkt_cnt()
time.sleep(5)
except KeyboardInterrupt:
print('interrupted!')
4. 尝试如下实验
(1)把电缆拿掉,用think pad通过DP83TD510发送数据包
a.确保有DP83TD510设置为数字环回
b. 看看思考板是否能够接收所有的数据包而没有任何错误
(2) 对树莓派和第二个DP83TD510做同样的事情
5. 实验结果
因为没有把Thinkpad的网卡设置为Promiscuous Mode,所以它收到了错误的MAC地址。
要么就是数字环坏了。
将寄存器0x016设置为0b0000_0001_0000_0100以启用环回。
这个动作发生在我已经发送了一些ping建立数据在arp- cache。
之后显然没有更多的反应。
但是请求应该返回到thinkpad,但它没有。
我怀疑网卡“过滤”错误的mac地址,另一方面wireshark可以删除重复,
因为发送一个接收相当快。
6. 梳理疑问
DP83TD510 EVM与ThinkPad连接的接口是什么? EVM连接的引脚是什么?
使用DP83TD510 EVM,可以尝试使用独立EVM生成包吗?
不要连接另一台DP83TD510 EVM或ThinkPad。
将DP83TD510放入数字环回,DP83822放入数字环回。
使用DP83822生成数据包,然后检查DP83822中的寄存器0x0015中的错误。
通过这样做,将确认DP83822和DP83TD510之间的MAC侧数据路径没有问题。
7. 查阅DP83TD510文档
阅读DP83TD510的数字环回时,注意到在第29页,需要设置一个神秘位0x0883[0]为1。
在将数字环回和神秘位设置为1之后,在发送请求后得到了返回。
所以数据包通过数字环回时没有改变。
DP83TD510的数据表中没有描述0x0883寄存器,找FEA提供完整的registermap,以避免将来出现这样的混淆。
在这个场景中,数据包计数器看起来与预期的一样,因此错误计数器保持为零,而正常计数器随着每个数据包的增加而增加。
8. 回环测试
错误的计数器的问题只解决在数字环回,
而不是在正常操作
这表明Phy的不同部分存在问题。
我不确定错误计数器的行为,它只能增加一个CRC错误。
我要用不同的环回模式去调查,也许我能找到些什么。
Edit1:
我读回了整个线程,如果有什么我可能错过了,是的,我收到了接收和发送混合的错误是在RX计数器上,所以在0x12E 0x12F和0x130。很抱歉我在最初的请求中把这些弄混了。
另一方面,我不确定这是否对我们的调查结果有任何影响。
Edit2:
我已经启用了模拟环回,并发现了一个非常奇怪的行为,第一个和另一个数据包后,启用模拟环回回到我的Thinkpad,但其余的没有回来,RX错误计数器在那之后再次增加。
这是第一次真正丢弃一个“有缺陷的”数据包。
Edit3:
我想尝试一些不同的东西,并使用其他10BASe-T1L Phy。
如果发送端是另一个DP83TD510,那么发送端就有问题了。
一个同事提示我,也许CRC是coreting错误,因此是递增计数器,这将解释(从黑盒的角度)完美的通信。
Edit4:
测量另一个DP83TD510揭示了关于RX/TX计数器的混淆。
取决于你看它的以太一个RX或TX错误。
9. 再试如下几个实验
DP83TD510是否发送了良好的数据,这听起来像是一个问题。
通过下面这些实验,将能够看到这是否是事实。
(1)从DP83TD510生成PRBS数据
设置PHY为数字环回
这将通过MAC发送PRBS数据
计算DP83TD510中的RX_ER计数器
(2)从DP83TD510生成PRBS数据
使用另一个T1L兼容PHY接收数据
然后检查另一个PHY上的RX错误
我用数字回路启动了PRBS发生器。在此之后,RX和TX计数器增加,TX_ERR和RX_ERR也以相同的速度增加。
rx_cnt = 11938 rx_error = 11938
tx_cnt = 12064 tx_error = 12064
如果我关闭数字环回,按建议连接另一个10BASE-T1L板,另一个Phy的RX Error Counter会增加。
错误是如此之大,其他Phy丢弃了数据包,没有一个通过我的Thinkpad。
rx_cnt = 0 rx_error = 0
tx_cnt = 27383 tx_error = 27383
MSE -31.0 dB PWR off Rx 0, Err 27383
我正在测试另一个DP83TD510_EMV是否显示类似的行为。
显然,由于计数器的读出时间不同,rx2和tx1之间的包计数有微小的不同。
rx1_cnt = 0 rx1_error = 0
rx2_cnt = 7863 rx2_error = 7863
tx1_cnt = 7874 tx1_error = 7874
tx2_cnt = 0 tx2_error = 0
我开始怀疑我的两个DP83TD510_EMV板之间是否有不同,无论是硬件还是软件。
10. 测试场景下查询以下寄存器
0x0000
0x0002
0x0003
0x0010
0x0011
0x0467
0x0468
五种情况下读出了寄存器。
//With PRBS and digital loopback enabled on 1
rx2_cnt = 3161 rx2_error = 3161
tx2_cnt = 3194 tx2_error = 3194
tx1_cnt = 2 tx1_error = 0
rx1_cnt = 10 rx1_error = 10
registers of 1
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0000
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
registers of 2
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
//With PRBS and digital loopback enabled on 1
rx2_cnt = 3161 rx2_error = 3161
tx2_cnt = 3194 tx2_error = 3194
tx1_cnt = 2 tx1_error = 0
rx1_cnt = 10 rx1_error = 10
registers of 1
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0000
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
registers of 2
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
//With PRBS and digital loopback enabled on 2
rx2_cnt = 5780 rx2_error = 5780
tx2_cnt = 5864 tx2_error = 5864
tx1_cnt = 1 tx1_error = 0
rx1_cnt = 1 rx1_error = 0
registers of 1
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
registers of 2
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
//with PRBS enabled and disabled digital loopback on 1
rx2_cnt = 1580 rx2_error = 1578
tx2_cnt = 0 tx2_error = 0
tx1_cnt = 1596 tx1_error = 1594
rx1_cnt = 0 rx1_error = 0
registers of 1
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
registers of 2
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
//with PRBS enabled and disabled digital loopback on 2
rx2_cnt = 2 rx2_error = 0
tx2_cnt = 2406 tx2_error = 2406
tx1_cnt = 2 tx1_error = 0
rx1_cnt = 2415 rx1_error = 2415
registers of 1
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
registers of 2
read Register: 0x0000 = 0x1100
read Register: 0x0002 = 0x2000
read Register: 0x0003 = 0x0181
read Register: 0x0010 = 0x0001
read Register: 0x0011 = 0x002A
read Register: 0x0467 = 0x0086
read Register: 0x0468 = 0x0000
- 分享
- 举报
-
浏览量:1791次2019-12-11 11:53:15
-
浏览量:1366次2019-10-11 14:49:42
-
浏览量:4382次2021-07-14 17:02:38
-
浏览量:4057次2021-03-13 01:55:14
-
浏览量:7046次2022-07-25 17:32:34
-
浏览量:7179次2021-07-31 15:26:23
-
浏览量:4257次2021-07-17 16:19:56
-
浏览量:6453次2021-04-21 17:42:58
-
浏览量:6898次2021-03-15 23:18:36
-
浏览量:6411次2021-06-02 16:59:22
-
浏览量:1427次2023-06-12 14:33:52
-
浏览量:1090次2023-12-27 14:50:32
-
浏览量:5738次2021-03-31 15:36:17
-
浏览量:2326次2022-11-25 11:53:02
-
浏览量:4843次2021-03-26 16:03:04
-
浏览量:4245次2020-09-23 19:01:05
-
浏览量:15358次2018-09-27 20:15:39
-
浏览量:9082次2020-11-13 14:54:14
-
浏览量:4265次2021-07-03 14:35:11
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明