通用串行總線Universal Serial Bus,縮寫為USB,是一個標準的外部總線標準。在計算機領域,它是已經獲得廣泛使用的技術,常用的電子設備上幾乎都有USB接口。USB最初用于規范個人電腦PC與外部設備之間的連接與通訊,一般由PC來充當host端,各種外部設備作為device端,所有的通信都必須在host與device之間進行,各device之間無法進行直接通信。隨著USB技術的不斷廣泛應用,各種帶USB接口的電子設備不斷涌現,形成了現成遍地開花的局面。這樣一來沒有PC就無法使用USB進行通信,顯得十分不方便。于是USB OTG技術開始出現。USB OTG是USB On-The-Go的縮寫,是近年發展起來的技術,主要應用于各種不同的設備或移動設備間的聯接,進行數據交換,特別是PAD、移動電話、消費類設備。
在以前傳統的通信方式中,例如以前個人計算機的串口和并口。以前的RS232串行通信,因為每次僅能傳送一個bit的數據,波特率也無法獲得更進一步的提高,數據傳輸速率很低。相比串行通信,并行通信能同時傳送多個比特位,可以顯著加快數據通信速率。然而并行通信,需要多根數據線來同時傳送數據的各bit位,如果傳輸距離稍長,通信線路的成本明顯增加,不太適合距離稍遠的數據傳輸。然而不管是串行還是并行通信,由于它們直接使用電平的高低來表示二進制的01信號,使得電信號在傳輸過程中抗干擾能力差,隨著通信距離的增加,信號衰減快。要想提高通信距離,同時提高通訊速率,就需要采用差分線來傳輸數據。USB就是基于這一原理,通信過程中僅需要D+,D-這一對差分數據線,使得通信線路簡單,通信速率有了巨大的提高,同時抗干擾能力強。USB接口還能供電,支持熱插拔。自從該技術在PC中應用以來,就受到了廣泛歡迎。
USB接口可以進行供電,這樣小型的設備就不需要單獨供電,簡化了設備的供電設計。于是各種小型的電子設備都特別喜歡使用USB接口。嵌入式設備中,經常都需要該設備充當device的角色。下面以device的設計為例,討論一下USB接口的軟硬件設計。比如一個簡單的基于單片機的USB數據采集器,可以如下設計:
這是一個基于AVR單片機的通用USB數據采集器,使用了一款經典的USB接口芯片PDIUSBD12,單片機與PDIUSBD12之間直接利用傳統的數據、地址和控制三總線方式連接,有利于最大化數據傳輸。PDIUSBD12芯片引出差分數據線D+,D-與USB插頭相連。
軟件開發上,需要實現USB協議棧,按傳統的軟件分層設計方法來進行設計即可,比如該數據采集器的軟件層次結構如下:
當USB檢測到device插入后,就會自動和設備進行前期的多次對話,完成必要的初始化和加載任務,我們設計device時,就需要不斷地向host返回相應的信息,例如:
利用傳統的單片機前后臺程序設計方法就可以完成。該數據采集器是個通用的USB device設計模塊,其它USB設備只需在其基礎上做相應的軟硬件修改即可實現。