一致吗 驱动_聊一下信号完整性?2漫谈一致性测试(1)

一致性测试…在执行层面其实毫无技术含量可言,现在各大示波器厂商提供的一致性软件都很完善了,如果测试通过,那么测试者真的是几乎什么都不需要管…大部分的时间可能是在排队抢示波器以及被各种奇怪的芯片与驱动困扰,正在进测试模式中…

1 进入测试模式方法中的万金油——使用Linux系统,直接读写BAR寄存器

像Intel等负责的厂家会提供芯片对应的调试工具,但有些时候这些芯片会被用到不同的平台上,不仅仅是X86,甚至会跨越到ARM、MIPS上,厂商提供的工具往往是二进制的程序,在没有源码以供交叉编译的情况下,我们只能使用我们的终极手段——直接读写内存,修改PCI设备的BAR寄存器。下面将做一个简单实例:

1)首先在linux shell中输入lspci、setpci、devmem,看看必要的程序是否存在,如果没有,lspci和setpci,可以下载软件包pciutils,如过没有devmem,可以去下载软件包devmem。通常这些都会被集成到发行版或busybox中。

2)使用命令lspci,查看系统下所有pci设备,根据设备名称找到需要访问的设备的pci地址。如果碰巧你拿到的软件版本,裁剪的比较厉害,可能打印出来的会是

00:01.0 8086: 1234

打印结果中的00:10.0就是PCI地址,8086是厂商代码,1234是设备代码,有的软件版本也可能会贴心的直接将厂商代码和设备代码做了转换,可以直接打印出厂商名和设备名。

3)之后我们再使用命令lspci -s 00:01.0 -vvv,在打印的信息中找到类似如下的:

Region 0: Memory at ddc00000 (64-bit, prefetchable) [size=2M]

这个region 指的就是BAR0了 ddc00000是其首地址,之后再根据芯片手册上提供的信息,使用devmd修改寄存器就可以啦~

此外还有一些设备的一些功能,可能要直接修改pci寄存器实现,这时候可以使用命令setpci实现,查看寄存器还用lspci,只是参数-vvv换成-xxx就可以了。

关于这部分的原理,由于我是硬件工程师…驱动方面的了解也不是那么多就不敢乱讲了,这方面网上的资料很多,通过搜索引擎一定能搞定的。

而对于那些不是PCI标准设备情况,还可以考虑借助Linux内核已经搞定的控制器接口,像USB总线的EHCI、XHCI等,这就比较麻烦了,一定要和你们公司里的驱动工程师搞好关系哇[]~(~▽~)~*

2. 千兆电口(10base-T 100base-TX 1000base-T)

千兆电口可能是除USB以外各种设备中最常见的接口了。我们需要修改PHY标准寄存器(由IEEE802.3 CL22.2.4定义)。注意PHY都要遵循协议,因此大家所熟知的修改寄存器0修改速率,修改9就 这部分寄存器几乎是完全相同的,但也有部分芯片会比较讨厌,有一些协议定义之外的特性,因此小伙伴们还是要仔细看芯片的寄存器手册。例如I公司某非常常见的PHY,其AN开关、速率选择等寄存器,需要软复位后才能生效。

1. 10M模式——最麻烦的,除第一步以外,都不再是标准所定义的寄存器了,各个芯片会有差异,因此只能介绍思路了

a) 首先修改PHY寄存器0值为0x0100 主要涉及的寄存器位是bit6和bit13,我们需要强制速率到10M,此外AN也需要关掉。 修改后可以用示波器检查一下Pair A上是否还有并行检测的信号

b) 10M需要测试NLP码,通常在强制速率并关闭AN后,就可以看到间隔时间很长的单脉冲,那就是NLP了,此时可以运行NLP相关的一致性测试。

c) 之后的测试模板测试需要DUT发送信号,因此需要关闭并行检测(Parallel Detection)/NLP发送(NLP Transmit)/链路检测(Energy Detect/Link Detect)这几个本意是相同的,不同芯片描述可能会有区别,总之,不要让芯片再发送NLP就可以了。

d) 最后再仔细看芯片寄存器手册,找到Pattern generator相关配置…10base-T测试中,有需要测试idle码的测试项,还需要注意控制码型保证idle码存在。

2.100M模式——最简单的:

同100M的第一步,修改PHY寄存器0为0x2100。这一步主要是强制速率为100m并关闭AN,修改后应该可以直接看到100M信号发送出来啦。 注意个别芯片可能还需要关闭NLP、强制linkup,才能看到连续的信号发出来,不过即便信号是不连续的,通常也不会影响示波器的一致性测试程序测试。

此外还有一个方法是使用一个“link partner”,将对方配置成强制100M模式,然后按示波器一致性测试程序提示进行连接。原理是当一端强制百兆时,另一端(指DUT)开启的AN会协商失败,进入百兆双工模式。

2. 1000M模式

a) 和10/100M第一步相同,修改寄存器0,值为0x140。强制1000M并关闭AN。

b) 关闭MDI-X自动切换 由于1000base-T的PHY基本都支持MDI/MDI-X自动翻转,而且默认往往是打开的,需要关掉才能发送出测试码型

c) 除此之外,10M步骤中介绍的NLP发送之类的开关在个别芯片上也需要关掉

关于测试项的讨论:

1. 是否加扰?

按着协议规范,为了真实情况的串扰,需要在相邻通道上施加31.25MHz的干扰(为啥是这个频率?因为经过扰码后,Idle码的能量集中于这个频率)。实际上我们手头往往没有合适的信号源,或者是懒哈哈。实际上通道之间的串扰影响会很小,除非PHY和变压器设计有重大问题。

2. 模式2,3不测试?

同样的,除非PHY的时钟/电源设计有重大异常,否则当代的PHY通常不会有抖动问题,而且有些NIC芯片,PHY和MAC集成到一起了,测试需要的TXCLK信号根本没引出来…而且在测试Slave模式抖动的时候,需要协议定义的一段特殊电缆,以模拟恶劣的损耗和反射情况,这个电缆大家手上通常也不会有,因此…多数公司也没有测这一项。

值得一提的是,即便是NIC芯片,MAC与PHY集成了没有TX_CLK,也有替代的测试方式——拿Master mode下MDI上发送的时钟信号当TX_CLK来测试…这一方法keysight的MOI文档中有提及,但官方也不敢做主说这是标准的一部分…总之大家可以测着玩,fail了也不要太纠结。

3. 10M不测试?

只支持10M的设备基本看不到了,基本没人用也就没人关注了…通常也不会出现100M都不能正常运行而降速到10M的情况。

4. 回损不测试?

很多一定规模有实力的公司都会有矢量网络分析仪,但是那是给10G甚至112G PAM4用的,区区千兆电口,人家的网分扫不到1M这么低的频率(好多都是10M起步)而且据鄙人之前一点点测试经验来看,这个回损要求是很宽松的,只要不是PHY芯片和变压器设计的有严重问题(如果有发送信号测试应该先会不过)

5. 领导说了,这也不测,那也不测,还想不想干了?

——这就好像感冒去医院,一开始就要做全套检查,什么CT核磁共振全上,没这个必要不是么~就算信号测全了,也不能包没病,EMI/EMC呢?高低温呢?说个恐怖点的,有些PHY在EEE开启/关闭,不同速率下的抗扰能力是不一样的,静电与群脉冲都要重新打…

现实点的说,个人建议还是根据实际情况评估,如果是大厂家久经考验的PHY和变压器,线路也没什么异常的地方,可以少测,只做功能性的100M长线有无丢包的测试,如果没把握或者都是国产的、第一次用的,那就全测报平安咯

6. 领导说,怎么这么多废话,恩..今年的年终奖…

——我现在就去测………

参考文档:1. Agilent N5392A Ethernet Compliance Test Application MOI

https://www.keysight.com/upload/cmc_upload/All/N5392A_Ethernet_Compliance_App_MOI_b.pdf

IEEE802.3-2018

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值