走在電器的量販店或是大賣場,擁有USB 2.0介面的產品俯拾皆是。USB儼然已經成為當代無敵介面王。因此內建USB介面的ASIC,編組積體電路等,如雨後春筍,隨著產品創意的衍生而蓬勃發展。
對於這些USB IC設計廠商來說,有些會全部一手包辦自行設計。有些則是為了考量時效性,選擇買入前端的PHY部分的IP,也就是USB Transceiver Macrocell,然後搭配自行設計的後端部分,以求快速提供解決方案。
因此,不難想像在UTM與SIE之間勢必需要一個共通的基準介面,才能完成以上所說的整合方式。這個共通的基準介面就稱之為UTMI(USB 2.0 Transceiver Macrocell Interface),規格版本依然是由Intel公司所主導,從2000起歷經1.0/1.01/1.02/1.03/1.04/1.05版的逐步修正,目前遵循的版本應該是3/29/2001的1.05版。您可以透過底下這個網站來取得技術的相關文獻: www.Intel.com/technology/ usb/spec.htm(圖1)。
典型的周邊裝置所用的USB控制器,規格上為了易於解說,將之區分成三個功能方塊。從最前端來說起,順序為UTM(USB 2.0 Transceiver Macrocell)、SIE(Serial Interface Engine),然後是後端的邏輯控制部分(圖2)。
UTM就是底層的收發器,負責USB匯流排上協定與信號的處理。主要的工作任務當然離不開資料的串形化(Serialization)、資料的解串行 (Deserialization)、位元塞入(Bit Stuffing)、時脈恢復(Clock Recovery)以及達成同步(Synchronization)等USB介面所規制的法則。
UTMI的設計有個原則。依據資料傳輸速率,可以區分成支援HS/FS、僅有FS支援與僅有LS支援三個種類。然而,僅僅採用單一的SIE就足以來搭配任何傳輸速度的收發器。當然,SYNC/EOP的產生與檢查也是其職責之一。
對於HS/FS雙模式的支援,顧名思義就是可以操作在480Mps的HS模式和12Mbps的FS模式之下。還要考量終端阻抗的切換問題,這個考量是合乎邏輯的,畢竟,支援USB 2.0 HS的周邊有太多的機會插入傳統USB 1.1的主機Host端,甚至傳統的HUB裝置。如果是僅有FS支援與僅有LS支援的情況下,自然沒有速度選擇的問題,也就無需存在選擇功用的控制信號。請留意USB 2.0收發器是利用「SuspendM」信號來進入低功率省電模式(圖3)。
SIE功能方塊,可以進一步地再細分成控制邏輯與端點(End-point)邏輯部分。可想而知USB資料交易(Transaction)的封包認知與順序的State Machine,就是擔任控制邏輯的工作。這是實踐任何USB介面一定必要的。
端點(Endpoint)邏輯部分,就會隨著裝置的不同,端點的形式與數量之差異,就會跟著有所變化。
UTMI的信號就是該份規格的精華。規格上將之分類開來討論。第一部分就是系統介面信號:
‧「CLK」時脈輸出信號,60MHz=HS/FS具有8位元介面,30MHz=HS/FS具有16位元介面,48MHz=FS Only具有8位元介面,6MHz=LS Only具有8位元介面。正常時脈的準確度規定範圍是正負500ppm。
‧「Reset」重置信號,重置UTM的所有的State Machine。
‧「XcvrSelect」輸入信號等於Transceiver Select的意思。功能就是用來選擇HS或FS模式。規則是,邏輯0乃是致能HS收發器,邏輯1則是致能FS收發器。
‧「TermSelect」輸入信號等 於Termination Select的意思。在邏輯0是致能HS模式,FS驅動器在USB介面上驅動SE0狀態,並且提供50歐姆到地的終端阻抗,然後在介面上產生了HS Idle狀態。若是處於FS模式,該信號會啟動1.5K歐姆的拉高電阻在D+信號上,然後在介面上產生了FS Idle狀態。依據規格之指定,FS Idle狀態與HS Idle狀態兩者是不同的。
‧「SuspendM」暫停輸入信號。USB介面上只要3ms沒有任何活動,就是進入暫停(Suspend)模式。既然能夠暫停,當然也必須能夠回到再繼續(Resume),才能維持正常的運作生態。
‧脈信號相互同步。一來減少 SIE不必要的轉換,同時可以確保時序與資料輸出是一致的(表1)。請略為小心SE1狀態在USB 2.0規格中是不合法的介面狀態,也就是不該出現的。但是在UTM中是被用為偵錯(Debug)的用途。
‧「OpMode[0]與OpMode[1]」輸入信號,呈現出操作模式「Operational Mode」(表2)。
第二部分就是USB介面信號,即是DP與DM信號,自然是分別對應於D+與D-信號。
第三部分是「Vendor Control Signals」。這些信號乃是針對錯誤、狀態與控制提供資訊。必須維持與「CLK」信號同步,並與資料信號線維持一樣的時序關係。對於收發器來說,這些信號是選項,但是對於SIE而言卻是必要的。系統軟體才有辦法存取這些暫存器,進行細節上的診斷(Diagnostic)與錯誤分析(圖4)。
基本上是兩個暫存器,一個是8位元的「Vendor Status」暫存器,是Macrocell的輸出信號。可以用來告知SIE收發器內部的資訊。典型的範例諸如「CLK Usable」、「Squelch」與錯誤碼等等。一個是4位元的「Vendor Control」暫存器,是Macrocell的輸入信號。
第四個部分就是資料的介面信號。可以有8位元介面(圖5)與16位元介面(圖6)之分。16位元介面適合運用於使用電池或擷取Bus-powered的裝置,以及FPGA的應用發展。對於要求積體電路接腳數目要少的場合與ASIC應用發展,就可以使用8位元介面。至於介面採用雙向與否,則是提供了另一種設計上的彈性(圖7、8)。
因此,資料介面要區分傳送與接收。比如說,「TXReady」輸出信號意味著「Transmit Data Ready」,UTM就有責任將SIE送來的DataIn匯流排上的資料載入「TX Holding Register」。
「RXActive」輸出信號意味著「Receive Active」,表示接收的狀態機器已經偵測到SYNC位元。同時,SIE就是利用「RXActive」來度量封包與封包之間的間隙。因此,正確地反應USB介面上的狀態,是極為重要的考量要素。
所以,就可以用幾張圖約略將前面所言的一切做個摘要。首先,UTMI的信號可以歸納成四類:
‧Reset,Clock信號
‧資料信號:RxValid,RxData,TxValid,TxData,TxReady
‧控制信號:TermSel,Suspend,XcvrSel,OpMode
‧狀態信號:LineState,RxActive,RxError
其次,有一些細節上的問題還是要多加留心。很明顯地,「LineState」可以作為Timer用(圖9)。「RxActive」(圖10)僅有在接收的情況下才來啟動可以避免產生問題。同時,在傳送之際,務必禁止「RxValid」(圖11)的啟動。
當操作模式處於沒有位元塞入(Bit Stuff)的情況下,「TxReady」(圖12)最好維持在邏輯高的狀態。
其次,就針對UTM方塊圖(圖13)中的各個部位,做個扼要的敘述。
該模組的主要職責就是產生UTM的內部時脈(Clock)以及「CLK」輸出信號。所有的資料傳送信號都必須與「CLK」輸出信號同步。
第一種情況係針對HS/FS動作的場合來說。對於HS模式來說,一個「CLK」的週期就等於一個位元組的時間。當UTMI切換HS模式到FS模式時,「CLK」信號本身並沒有改變。也就是說在FS模式之下,每一個位元時間是5個「CLK」週期,FS模式位元組就需要40個「CLK」週期。但是,如果有一個位元塞入(Bit Stuff)的情況發生時,就會延展到45個「CLK」週期(圖14、15)。「XcvrSelect」信號即是用來決定資料與控制信號的時序該是HS模式還是FS模式。
第二種情況是僅支援FS模式的場合。「CLK」信號可以是48MHz。因此,於該模式下,UTM會提供在每一個位元組32個「CLK」週期。
第三種情況僅支援LS模式。「CLK」信號可以是6MHz,因此於該模式下UTM也是會提供在每一個位元組32個「CLK」週期。
DLL的主要工作就是在USB 2.0介面上所接收到的資訊中,來萃取出時脈與資料,然後送往解串形器(Receive De-serializer)。而從DLL的輸出資料自然必須與局部使用的時脈信號同步才可以,而這是串列介面的基礎知識,不可不知。
任何的高速串列匯流排,傳送端與接收端要達成兩端百分之百的相同時脈是有點不可能的任務。因此,必須存在某一種手段或機制來補償兩者之間的容許誤差。彈性緩衝器的用途即在於此。
USB介面規格允許+/-500ppm的時脈誤差。也就是說時脈容許誤差的計算可以累積到+/-12位元。所以說,一個具有24位元深度的彈性緩衝器之設計就合乎情理了。如果彈性緩衝器發生了溢位(Overflow)或下溢(Underflow)的狀況,就可以利用「RXError」信號來告知。
意指HS/FS模式多工之選擇,由「XcvrSelect」輸入信號來決定。
畢竟NRZI是USB介面上的編碼大法,接收端自然有解碼的職責。該模組可以操作在HS或FS模式之下。
該邏輯區塊是一個狀態機器(State Machine)。目的當然就是要將塞入位元給移除掉。如果發現了塞入位元錯誤,在FS模式之下就會產生「RXError」信號。而HS模式卻是特意違反位元塞入(Bit Stuff)法則來產生EOP封包,因此不會產生「RXError」信號。
由於USB介面的位元速率是固定的,又有塞入位元的課題。UTMI與SIE之間的速率是可以降下來的。通常在每接收8個位元之後會呈現一個位元組在「DataOut」介面上,然而,當從資料串中移除了8個塞入位元之後,「DataOut」介面上就相當於跳躍過一個位元組的時間,為了能夠順利讓該跳躍位元組在「DataOut」介面上不會發產生問題,就必須仰賴「RXValid」來達成(圖16)。
該模組包含有8個位元之移位暫存器與保存暫存器。前者自然是串列變成並列之轉換,後者提供一個位元組的緩衝之用(圖17)。
Receive State Machine區塊
圖18是接收狀態的詳細遷移圖,請逐步對照規格,在此就不在多加贅述,只是提出幾個重要的概念:
‧「RXActive」與「RXValid」信號是在CLK信號的上沿來取樣的。
‧當Macrocell偵測到SYNC位元之後,會啟動「RXActive」信號。
‧當Macrocell偵測到EOP封包之後,會關掉「RXActive」信號。
‧當啟動「RXActive」信號之後,保存暫存器滿了之際就會啟動「RXValid」信號。
‧「RXActive」與「RXValid」兩信號皆有效的情況下,就代表資料有效的狀態,SIE就必須準備消化該位元組。
總之,對於接收狀態圖的掌握,就是要理清(DP/DM)、RXValid、RXActive、RXError與DataOut等眾多信號的時序親密關係,這也就是重點所在。
圖19、20、21所示DP/DM上的SYNC格式皆是採用一個位元組的長度,主要是為了解釋上的方便。實際之情況,當然要依照USB 2.0規格的定義。一旦有接收錯誤發生時,好比說FS模式的位元塞入、彈性緩衝器出了問題、DLL遺失了SYNC位元、EOP出了狀況等問題,狀態機器隨即就會進入錯誤狀態,並啟動「RXError」信號(圖22)。
USB介面的基準編碼規則,可以HS/FS的資料速率來動作。
位元塞入(Bit Stuff)邏輯也是USB 1.1規格中的遊戲規則。六個連續邏輯1就要塞入一個邏輯0。也就是基於此緣故,在USB介面上之資料流有塞入8個位元的情況時,也需要依靠「TXReady」一個位元組的時間來維持住資料(圖23)。
如圖24所示。
SIE啟動「TXValid」信號開始進行傳輸,關閉「TXValid」信號結束傳輸。
「TXValid」與「TXReady」信號是在CLK信號的上沿來取樣的(圖25)。
相同的思考邏輯,對於傳送狀態圖的掌握,就是搞懂TXValid、DataIn、TXReady與(DP/DM)的信號時序關係(圖26)。
USB 2.0核心規格定義有測試模式。其達成與「OPMode」信號有一定的相依關係。回顧前面所提到的UTM操作模式有三種:
‧Normal Operation(0):正常操作模式,收發器會進行正常USB資料的編碼與解碼。
‧Non-Driving(1):讓收發器的邏輯有如斷接的狀態,基本做法就是將FS/HS的傳送器呈現三態(tri-states)的情況,並且移除終端阻抗。
‧Disable Bit Stuffing and NRZI encoding(2):比如說,測試J就需要從「DataIn」匯流排上載入邏輯一,測試K就需要從「DataIn」匯流排上載入邏輯零。
可想而知,USB 2.0測試模式與Macrocell一定會存在映射關係。根據表3的對應,可以清楚地知曉UTM是巧妙地運用一些技巧來因應USB 2.0的測試模式。為了強制將介面進入SE0狀態,UTM會處於正常模式,但是不傳送資料。其結果就是進入了HS Idle閒置狀態,也就是SE0狀態。讓介面進入測試J,UTM是處於測試模式2(Disable Bit Stuffing and NRZI encoding),然後將所有的邏輯一載入了傳輸保存暫存器。
測試K是一樣的道理,UTM是處於測試模式2(Disable Bit Stuffing and NRZI encoding),然後將所有的邏輯零載入了傳輸保存暫存器。
而為了產生測試封包(Test Packet),UTM會處於正常模式,USB 2.0規格中所定義的測試封包格式資料會載入了資料傳輸暫存器。暫停(Suspend)模式是USB規範中極為吃重的特徵。一個HS裝置只要在介面上的 SE0狀態超過3ms以上,UTM就進入了FS模式(XcvrSelect與TermSelect = 1)。此舉會將拉高DP信號,產生了連續的J狀態(圖26)。再繼續(Resume)的回復就是FS模式的K狀態,UTM為測試模式2(Disable Bit Stuffing and NRZI encoding),在T1~T2時間啟動「TXValid」信號,資料零呈現於「DataIn」匯流排上(圖27)。
平心而論,UTMI確實不容易光靠一篇文章,仰賴一堆文字就可以解釋的一清二楚。依法不依人終究還是資訊產業的遊戲法則。本文僅是提供一個學習上的梗概輔助,內在底細敬請參閱規格。有一個稱之為T&MT(Transceiver and Macrocell Test)的東西,係Intel的規範,提供了所有UTMI收發器的共通測試與連接器介面。
總之,UTMI的出現乃是定位於僅支援週邊的實踐應用。若是考量到USB OTG,勢必要額外編入其他的信號。