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經驗,而有些人只有一年經驗但是其一年經驗,確是實實在在真正的經驗,嵌入式開發者都應該有成為后者的意識才能有長遠的發展。