USB2.0高速相对于全速其收发器原理不一样,前者使用电流驱动,后者使用电压驱动。对于电流驱动最终还是需要通过电阻来转化为电压进行信号识别。所以电阻的精度就很关键,否则会导致电压摆幅SWING的偏差。对于USB2.0高速,实际就是通过17.78mA的电流源,灌入到45欧的端接电阻来产生电压摆幅,由于HOST端和设备端结构一样,各有一个45欧端接电阻相当于并联,所以实际电压摆幅就是17.78mAx45欧/2=400mV。以上可以看出45欧电阻的精度就很重要了,因此就引出了我们本文的主题, 测试USB PHY端接电阻的阻值。本文即介绍之,并且一贯我们知其然知其所以然的介绍风格,重点介绍其前因后果,背后原理,然后再实践。
首先我们有必要先了解下USB2.0高速收发器的结构,了解所谓的45欧端接电阻的角色。
USB2.0高速,收发器结构,可以参考规格书,如下图:
图中对重点模块进行了标注,该图本身其实还可以单独分享一篇文章进行介绍,后面有机会会分享,本文只关注端接电阻。
我们前面已经介绍过电压摆幅是通过17.78mA电流源经过端接电阻来产生的,所以重点需要了解该路径。如下图红色箭头所示,17.78mA的电流经高速驱动的电流源出来,要么灌入到D+要么灌入到D-(图中驱动器的圆圈即表示反向)。驱动器高速的的切换灌入方向,通过Rs的端接电阻就可以在D+和D-产生对应的电压信号,比如J信号,K信号,一般PHY都会有BIST测试可以测试对应的信号。
所以这里的设计实际取了个巧,借用了FS/LS驱动的RS来作为HS的端接电阻,这样可以减少成本。
然后我们看除了红色箭头的路径,17.78mA还有分支,会不会走到下面的各种接收器中呢,接收器的输入阻抗是很大的,理想的可以认为是无限大,所以这些路径的电流可以忽略。还有最下的Rdp到地的路径,15k相对于45欧分的电流也可以忽略,所以可以认为17.78mA的电流都是经过Rs流入LS/FS驱动。
实际在主机和设备连接时,17.78mA会经过主机和设备的Rs,所以相当于两个45欧并联所以电压是17.78mV*45/2=400mV。那么我们继续发散下,接设备实际只有不接设备电压一半,接不接设备电压不一样,这个信息我们是不是能拿来干点什么呢?这不已经说出来了吗?就是接不接设备呀! 哦我们是不是可以通过此来判断设备的断开连接呢?恭喜你,还真是这样做的,具体参考规格书的介绍,如下:
以上明确了电流流过端接电阻Rs的路径。那么就可以简化出如下图模型:
然后回到我们本文要解决的的问题,测量端接电阻,怎么测量电阻呢? 初中我们就学习过,相信也一定做过对应的实验,使用电压源加电压V到电阻两端,并且测量经过电阻的电流I,即可计算出电阻R=V/I。
学习好的可能还会记得,为了提高精度我们会测量2组数据,然后使用
R=(V1-V2)/(I1-2)计算,这就使用了叠加原理,这样计算可以排除Vx处的偏置电压的影响,精度更高。
(V1-Vx)/Rs=I1
(V2-Vx)/Rs=I2
消除Vx即:
Rs=(V2-V1)/(I1-I2)
我们这里还要注意下,假设要测量D-的Rs,电压源加到D-, 看到上面还有路径HS的D-端(上图上面的x地方),我们要避免电流从这里灌入,要保证电流全部灌入到Rs。这可以通过USB PHY的BIST测试产生TESTJ信号,该信号驱动HS驱动从D+输出电流,此时D-不输出是高阻,就阻断了上述的x的路径。当然下面还有很多接收器和Rdp的路径前面已经介绍过,电流也可以忽略。
于是我们得出测量方法
测量D-的RS电阻,只需要BIST模式输出J信号,然后从DM灌入两组电压,测量两组电流,
Rs=(V2-V1)/(I1-I2)
测量D+的RS电阻,只需要BIST模式输出K信号,然后从D+灌入两组电压,测量两组电流,
Rs=(V2-V1)/(I1-I2)
至于BIST测试,后面我们还会单独分享一篇文章进行介绍,可以参考自己使用的PHY的规格书。
上面已经把原理和背景以及方法都理清楚了,现在开始就可以实操了。我们需要精密电压源和电流源。灌入电压在400mV附近,注意不要太大了以免损坏器件,注意用万用表确认后再接入器件,两次压差大点精度会高点,但是也不能偏离400mV太远,一般可以选择400mV和390mV。
还有需要注意,由于外部接线有线阻,所以电压源的电压和灌入DP和DM引脚处的电压是有压降的,我们以DP和DM处实测电压为准即可,如果以电压源处为准则测得的电阻包含了线阻。
我这里的实测值如下
Rs=(0.398V-0.349V)/(9.4936mA-8.3289mA)=42.07欧.
按照规格书要求是要求45±10%, 所以42欧是在范围内的。
如果我们不使用差分法,直接计算,会比差分测量的小一点。
0.398/9.4936=41.92
0.349/8.3289=41.90
以上介绍了USB2.0高速收发器的端接电阻相关内容,介绍如何测量其端接电阻。我们重点要关注其背后的原理,然后再进行相关的实操。对于驱动开发,验证等一定要知其然知其所以然。这也是一个普通的开发验证测试人员和一个有价值的开发验证测试人员的区别。有些人做了一辈子开发验证测试, 也可能只是按照指导手册进行操作,就是一个普通劳动力,经验只能说接近0。而真正去思考去理解的,可能一个项目,一件具体的事情就可以增长别人很多倍的的经验。所以在嵌入式领域,不要看有些人说什么十年经验,有可能那10年经验真的说起来就是几乎0经验,而有些人只有一年经验但是其一年经验,确是实实在在真正的经验,嵌入式开发者都应该有成为后者的意识才能有长远的发展。