《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > USB接口技術在嵌入式系統中的應用研究

USB接口技術在嵌入式系統中的應用研究

2009-04-13
作者:余修武1,2, 劉 嵐2

  摘? 要: 簡單介紹了USB接口技術的原理及其優點。基于嵌入式系統與USB設備等不能直接傳輸數據及嵌入式系統大容量存儲難等問題的現狀,提出了在嵌入式系統中集成USB Host功能以解決這一問題。
  關鍵詞: USB接口; 嵌入式系統; USB—Host;SL811HS

?

  隨著測控技術及嵌入式系統應用的迅速發展,數據量越來越大,對數據傳輸速度要求越來越高,并且要求高可靠性、穩定性和極好的移動性,能夠方便快捷地將數據傳送至處理中心進行處理控制等。而通用串行總線(USB)具有即插即用、熱插拔、易擴展和高傳輸速率等優點,人們希望USB能應用在移動數據交換等沒有PC機的領域中。而在非PC機應用領域,這正是USB的一個致命弱點。USB的拓撲結構中居于核心地位的是主機(Host),任何一次USB的數據傳輸都必須由主機來發起和控制,所有的USB設備都只能和主機建立連接,任何兩個外設之間或是兩個主機之間都無法直接通信[1]。目前,大量扮演主機角色的是個人電腦(PC),所買到和使用的USB移動設備都是USB的設備,如USB的移動硬盤、USB接口的數碼相機等等。所有這些設備都只能在PC機上使用,只能通過PC機來進行相互的文件和數據交換。沒有PC機,這些設備就“失靈”了(就數據交換的功能而言)。因此,USB接口技術在嵌入式領域中的應用就成了USB領域新的研究焦點。解決這一問題的根本辦法就是在嵌入式系統中集成USB Host功能,使之具有與USB Slave設備進行數據傳輸的能力。具有主機功能的嵌入式設備可讀寫U盤,對于數據采集、存儲更加方便,更適合野外設備或長期運行設備的數據采集。
1 USB接口硬件設計
1.1 系統硬件的總體結構

  USB技術規范將使用USB進行數據傳輸的雙方劃分為兩種角色[2]:Host機和Slave機,并且規定,數據傳輸只能發生在Host機和Slave機之間。要將實現USB Slave 的USB 接口的數字設備應用于嵌入式系統中,就要在嵌入式系統中集成USB Host 功能模塊,使之具有與USB Slave 設備進行數據傳輸的能力,圖1所示為系統總體結構。

?

?

1.2 USB Host模塊硬件連接
  USB Host 功能模塊硬件連接如圖2所示。CPU選用與MCS-51系列單片機完全兼容的Dalla 8公司的80C320 單片機,而且運行速度在同樣晶振頻率下比80C32平均高2.5倍,最高工作頻率可達33MHz。USB主機接口芯片選用SL811HS。

?


1.3 SL811HS
  SL811HS[3]是Cypress公司推出的遵從USB1.1協議的專用于嵌入式系統USB主控制器(Host /Slave)芯片,由主/從控制器模塊、RAM緩存及控制寄存器模塊、串行接口引擎SIE等模塊組成。其中,SIE模塊負責完成USB總線與主機之間數據的串、并轉換等功能;RAM緩存用于數據緩存,它和控制寄存器(占前16B)的空間為00H~FFH,共256B。SL811HS的功能框如圖3所示。

?


  該芯片既能與USB低速設備進行通信,也能與USB高速設備進行通信[4]。由于提供了8bit 寬數據總線及中斷支持,使得該芯片能方便地與一般的單片機、DSP等控制器進行通信,并受到CPU的控制。其特點主要有:能通過硬件設置或軟件設置的方法使該芯片工作在Host或Slave模式;自動探測所連接的設備是低速設備還是高速設備;8bit雙向數據總線;片上SIE、USB收發器;自動產生SOF令牌包,以及自動生成令牌包、數據包中所需要的CRC5/CRC16數據;內部256B RAM,支持乒乓操作;支持SUSPEND/RESUME、WAKE UP、LOW-POWER模式。
2 USB接口軟件設計
2.1 接口固件設計

  USB Host模塊設計中最困難的就是固件(Firmware)設計,固件編程要遵循復雜的USB規范,所以比硬件設計工作量大得多。該模塊固件程序主要由如下部分組成:對SL811HS進行設置的初始化程序,這部分程序在系統復位后就立刻執行;發現USB設備接入的子程序,并判斷該設備是高速還是低速設備;對該USB設備進行Enumerate,即枚舉,并指定其USB地址的子程序;其他數據通信子程序利用該部分程序完成指定的應用要求[5]。USB傳輸函數usbXfer程序流程如圖4所示。

?


  以包為基礎,USB定義的4種數據傳輸類型所能達到的傳輸速度、占用USB總線的帶寬、傳輸數據的總量和應用場合等都是不同的。每種傳輸方式都由很多個事務來完成。USB事務處理一般由三個階段組成:令牌階段、數據階段和握手階段。令牌階段定義了事務處理的類型,包括SETUP、IN 和OUT;數據階段負責運送和傳輸相關的數據,Data0 和Data1兩種數據包交替使用,以支持雙方的傳輸同步;握手階段由接收方向發送方提供反饋,告知數據是否正確接收。
  在USB Host 模塊中,固件的核心部分是USB傳輸函數usbXfer。usbXfer管理著USB的事務處理,其入口參數有:設備地址UsbAddr 、端點地址Endpoint、令牌包類型PID、端點最大負荷Payload、傳輸數據總長度Length 、數據緩存區指針Buffer。
  USB主機檢測到設備連接好后要對其進行配置,稱為設備的枚舉,該部分固件的核心是設備請求函數VendorCmd。VendorCmd構建在usbXfer函數之上,通過調用usbXfer進行若干次的控制傳輸來實現??刂苽鬏數膶崿F是固件程序中一個比較復雜的部分。控制傳輸由三個階段組成:建立階段、數據階段和狀態階段。建立階段,主機進行SETUP事務處理,向目標設備發送標準設備請求;數據階段,由若干個IN事務處理或OUT事務處理組成;狀態階段,主機則完成與數據階段相反的事務處理,結束本次控制傳輸。
  設備的枚舉過程主要包括以下幾個步驟:(1)主機請求設備控制端點0,以確定缺省管道支持的最大數據量;(2)主機給USB設備分配1個唯一的地址;(3)主機從描述符中讀取配置信息并加以執行;(4)主機驗證設備所需要的資源是否可以獲得;(5)主機USB設備發送1個配置值,指出如何使用該設備。枚舉成功后,主機和設備就可根據設備接口類型,采用相應的接口協議進行數據控制和傳輸。USB設備類型主要劃分為:音頻設備、顯示設備、人機接口、海量存儲器等。特定的設備類型又劃分為若干個子類,它們又有可能采用不同的接口協議傳輸指令和數據。以U盤為例,類代碼08h(海量存儲器類),子類代碼06h(SCSI指令集子類),傳輸協議50h(Bulk—Only傳輸協議)。按照這些標準,U盤的操作過程可分為:指令、數據和狀態三個階段,也就是主機首先向設備Bulk—Out端點寫包含SCSI的指令塊(CBW);然后從Bulk—In讀數據或向Bulk—Out端點寫數據;最后從Bulk—In端點讀取傳輸狀態(CSW)。通過Mass Storage類的子類命令的實現,在建立了FAT文件系統后,該文件系統就可以直接調用子類命令對U盤進行各種操作,以實現對文件的管理。
2.2? 驅動程序設計
  主機控制器驅動程序設計主要包括四個部分:主機控制器的初始化和管理、傳輸執行和資源的調配、中斷處理以及根集線器操作和控制。主機控制器為USB總線驅動屏蔽了硬件操作,完成USB底層數據傳輸,它為上層驅動提供了簡單的軟件接口,定義了usb_ operation函數結構體供USB總線調度調用。
  Struct usb_ operations {
  int ( * allocate) (struct usb_device * );? ?
???? ??????????????? // 分配USB設備資源
  int ( * deallocae) (struct usb_device * );
?????? ????????????? // 收回USB設備資源
  int ( * get_frame_number)(struct usb_device * usb_dev);?
????????????????????? // 獲得當前幀號
  int ( * submit_urb) (struct urb * purb);
????????????????????? // 提交URB請求塊
  int ( * unlink_urb) (struct urb * purb);
????????????????????? // 撤銷URB請求塊
?  };
  函數調用涉及兩個不同數據結構的變量,其中,usb_device包含了對設備地址、描述表、配置、端點等基本設備信息;urb說明了USB總線請求的基本信息,包括USB通道信息、數據緩沖區、帶寬和完成處理函數等。USB總線上所有的交易都是由函數submit_urb( )發起的。主機控制器驅動程序基本流程如圖5所示。

?


  由于USB總線的通用操作如USB設備枚舉、具體數據傳輸等已經由主機控制器驅動程序完成了,所以主機端設備驅動程序這部分的驅動程序只需要完成與具體設備相關的操作即可。USB設備驅動程序首先要做的是向Linux內核注冊它自己,并告訴系統它所支持的設備類型以及它所支持的操作。這些信息通過usb_driver結構來傳遞。
  struct usb_driver usb_storage_driver = {
  name:? “usb-storage”,?? ?????? ? // 驅動程序的名字
  probe: storage_probe,?? ???    // 函數指針
  disconnect:? storage_disconnect,?? // 函數指針
  id_table:? storage_usb_ids,???? ?? // 保存設備廠商ID和產品ID
  };
  usb_device是程序中一個重要的數據結構,驅動程序在設備探測階段可通過它獲得設備的相關配置信息。當一個設備插入USB總線時,主機對設備進行總線枚舉,完成對設備的配置并讀入設備屬性。相關屬性如設備描述符、配置描述符等信息被主機控制器保存在usb_device結構中。然后,內核根據設備標志找到對應的驅動程序,并調用該驅動程序的storage_probe( )函數。usb_device結構被作為參數傳入該函數。驅動函數的注冊和注銷都比較簡單,注冊時只需要將usb_storage_driver結構作為參數傳遞給usb_register( )函數即可,usb_register(&usb_storage_driver)注銷類usb_deregister(&usb_storage_driver)、Storage_disconnect( )在設備被卸載時被調用。
2.3 用戶程序設計
  用戶程序是系統與用戶的接口,通過通用驅動程序來完成對外設的控制和通信。在編寫用戶程序時,首先建立與外設的連接,然后再實施數據的傳輸。本設計使用VisualC++6.0編譯環境,將API函數包裝成一個USB.DLL連接庫程序文件,其編程方法與串口編程類似:首先查找設備,打開設備的句柄,然后進行讀寫和控制操作,最后關閉設備句柄。在VC動態鏈接庫中需將以下函數進行封裝:
  __declspec(dllexport)int__stdcall? EzBulk_ DataOut(uns?I gned? char*DataOut,int? DataOutLen);
  __declspec(dllexport)int__stdcall? EzBulk_DataIn(unsig ned? char*DataIn,int *lpDataInLen);
  __declspec(dllexport)int__stdcall? EzOpenDevice();
  __declspec(dllexport)int__stdcall? EzClose Device();
  然后在VB中調用此USB.DLL做以下聲明。這樣就可以直接在VB中調用這些函數作相應的開發了。
  Private Declare Function EzInit Lib “USB.DLL” (ByVal PipeIn As Byte, ByVal PipeOut As Byte, ByRef lpVoid As Any)As Long
  Private Declare Function EzBulk_ DataOut Lib “USB.DLL”(ByRef DataOut As Byte, ByVal DataOutLen As Long)As Long
  Private Declare Function EzBulk_ DataIn Lib “USB.DLL” (ByRef DataIn As Byte, ByRef DataInLen As Long)As Long
  有了嵌入式主機后,脫離PC機的數據傳輸不再是夢想了。在MP3播放器、數碼相機里嵌入USB主機模塊,使其由傳統的USB外設成為USB主機。這樣,這些嵌入式的主機就可以直接與移動硬盤、打印機等USB設備相連接,實現特定的功能。例如:江蘇某企業生產的提花毛皮機控制系統中就實現了USB Host模塊功能,用戶系統可以直接讀寫作為Slave的U盤,將花型準備系統設計的花型以文件的方式存儲到U盤中,在用戶需要時,可讀取U盤中的花型文件進行分析、處理,效果良好。
  目前USB主機的研究與應用已得到國內外的廣泛重視和迅速發展,正在推廣使用的USB3.0標準能提供4.8Gb/s的高速數據傳輸性能(USB1.1和USB2.0分別是12Mb/s和480Mb/s),甚至支持光纖連接。這樣其峰值速度就可達到20Gb/s,如此就可實現USB高速組網或廣播電視節目信號在USB設備上的傳輸。USB3.0標準還可解決因USB2.0供電不足而無法支持大功耗USB移動設備的問題。隨著移動數碼產品的發展趨勢,提出了USB2.0協議的補充協議USB OTG和無線USB傳輸規范,同時具備主從機功能的高速USB OTG設備和無線USB的應用將是未來開發者們研究的方向。充分利用USB簡便的特性以及高速數據傳輸性能,擴大其支持設備的種類,這將給USB的應用帶來廣闊的市場,也將給人們的生產生活帶來巨大的便利。

參考文獻
[1]? 王田苗. 嵌入式系統設計與實例開發[M]. 第二版. 北京: 清華大學出版社, 2003:141-145.
[2]? 馬偉.計算機USB系統原理及其主/從機設計[M].北京: 北京航空航天大學出版社, 2004: 93-98.
[3] Cypress Semiconductor Corporation. SL811HS? Datasheet?[EB/OL]. http://www.uclinux.org/, 2005-02-05.
[4] ?陳啟美,丁傳鎖.計算機USB接口技術[M]. 南京:南京大學出版社,2003:73-89.
[5] ?鄭智.嵌入式Linux下USB驅動程序開發研究[J].武漢理工大學學報. 信息與管理工程版,2006,28(7):
?117-120.

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧美影院| 亚洲成人在线免费| 久久久精品国产免大香伊| 亚洲一级电影| 一本久久青青| 一本大道av伊人久久综合| 亚洲免费观看在线观看| 亚洲精品一区二区在线观看| 亚洲成人资源| 久久精品夜夜夜夜久久| 久久精品久久99精品久久| 欧美一级欧美一级在线播放| 午夜精品国产更新| 亚洲在线观看视频| 亚洲综合激情| 性色av香蕉一区二区| 欧美一级片一区| 久久精品五月婷婷| 亚洲国产精品国自产拍av秋霞| 亚洲国产精品女人久久久| 亚洲激情在线观看视频免费| 亚洲国产欧美一区二区三区同亚洲| 欧美一区二区三区四区视频| 久久精品国产免费看久久精品| 久久大逼视频| 亚洲国产一区二区三区在线播| 亚洲日本成人| 亚洲视频电影图片偷拍一区| 亚洲在线一区二区| 亚洲欧美影音先锋| 欧美在线播放一区二区| 玖玖综合伊人| 欧美极品在线视频| 国产精品99一区| 国产欧美va欧美va香蕉在| 国产日本欧美视频| 激情久久久久久久| 亚洲国产欧美一区二区三区久久| 亚洲精品视频免费观看| 亚洲视频二区| 欧美制服丝袜| 日韩天天综合| 性欧美1819sex性高清| 久久天天躁狠狠躁夜夜av| 欧美大片在线观看| 国产精品啊啊啊| 国产一区二区久久久| 亚洲高清网站| 99精品热视频只有精品10| 亚洲欧美一区二区三区久久 | 99热免费精品| 午夜天堂精品久久久久| 亚洲国产高清在线| 一本色道久久综合狠狠躁篇怎么玩 | 久久国产精品黑丝| 欧美成人精品高清在线播放| 欧美三区在线视频| 国产一区二区精品丝袜| 亚洲精品日韩一| 午夜精品视频在线观看一区二区| 亚洲国产一区二区a毛片| 亚洲一级二级| 免播放器亚洲| 国产精品推荐精品| 亚洲第一页中文字幕| 亚洲图片在线观看| 亚洲欧洲在线播放| 亚洲自拍偷拍视频| 免费在线观看日韩欧美| 国产精品久久久久久久app| 一区二区三区在线视频播放| 一区二区三区视频观看| 亚洲国产免费看| 午夜精品久久久| 欧美激情精品久久久久久大尺度| 国产精品亚洲产品| 国产精品美女| 国产精品女人网站| 亚洲第一页中文字幕| 亚洲欧美bt| 99国产精品视频免费观看一公开| 欧美综合国产| 国产精品a久久久久| 在线观看一区欧美| 亚洲欧美日韩久久精品| 一本色道精品久久一区二区三区| 久久男女视频| 国产精品青草久久| 99re视频这里只有精品| 91久久久久| 久久久久国产精品厨房| 国产精品久久久一本精品| 亚洲片区在线| 亚洲黄色尤物视频| 久久岛国电影| 国产精品美女久久| 亚洲乱亚洲高清| 亚洲精品黄色| 麻豆精品精华液| 国语自产偷拍精品视频偷 | 亚洲一区二区3| 欧美成人一区二免费视频软件| 国产一区香蕉久久| 亚洲自拍高清| 亚洲一区二区在线观看视频| 欧美精品粉嫩高潮一区二区| 亚洲成人在线| 亚洲国产成人精品久久| 久久久国际精品| 国产午夜亚洲精品理论片色戒| 一区二区日韩欧美| 一区二区欧美日韩视频| 欧美经典一区二区三区| 亚洲国产精品成人久久综合一区 | 亚洲视频一区在线| 欧美激情视频网站| 亚洲国产精品一区二区www| 久久精品一二三区| 久久综合九色99| 狠狠操狠狠色综合网| 久久国产黑丝| 久久久亚洲一区| 国外成人免费视频| 久久精品99国产精品| 老牛嫩草一区二区三区日本| 狠狠色2019综合网| 亚洲福利视频在线| 免费日韩av| 最近中文字幕mv在线一区二区三区四区| 亚洲成人在线视频网站| 另类亚洲自拍| 尤物精品在线| 亚洲精品国产精品国自产在线| 欧美黄色精品| 亚洲美女中文字幕| 亚洲午夜久久久久久久久电影网| 欧美性猛交99久久久久99按摩| 一区二区三区你懂的| 香蕉国产精品偷在线观看不卡| 国产精品永久在线| 欧美夜福利tv在线| 麻豆精品视频在线观看| 最新中文字幕亚洲| 亚洲天堂免费观看| 国产精品影音先锋| 久久精品日产第一区二区| 欧美77777| 99re66热这里只有精品3直播| 亚洲在线视频观看| 国产亚洲二区| 亚洲激情成人在线| 欧美日本精品| 亚洲一区二区精品| 久久久久久9| 伊人久久男人天堂| 一区二区三区成人精品| 国产精品美腿一区在线看 | 欧美黄色成人网| 亚洲先锋成人| 久久久久国产成人精品亚洲午夜| 1769国产精品| 亚洲伊人网站| 国产一区二区三区四区在线观看| 亚洲欧洲另类国产综合| 欧美日韩情趣电影| 午夜欧美大片免费观看| 久久综合九色| 一区二区三区视频在线播放| 久久国产精品久久久久久| 亚洲国产精品一区二区www| 亚洲一区在线观看视频| 国产一区清纯| 亚洲美女91| 国产欧美在线| 亚洲靠逼com| 国产农村妇女精品一二区| 亚洲日本电影| 国产精品网红福利| 亚洲人成人99网站| 国产精品亚洲精品| 91久久久国产精品| 国产欧美精品日韩区二区麻豆天美| 亚洲韩国一区二区三区| 国产精品日本欧美一区二区三区| 亚洲国产三级网| 国产精品视频导航| 亚洲精品综合久久中文字幕| 国产欧美精品久久| 一本色道久久精品| 狠狠色丁香婷婷综合| 亚洲欧美日韩人成在线播放| 亚洲第一天堂无码专区| 欧美一区二区三区久久精品茉莉花| 在线不卡亚洲| 久久国产66| 在线视频日韩精品| 欧美高清在线一区二区| 欧美一区二区三区的| 国产精品久久久久久久午夜片| 亚洲人精品午夜|