1. 程式人生 > >USB 驅動架構淺析

USB 驅動架構淺析

usb 驅動框架

1.USB簡介

USB,即Universal Serial Bus(通用串行總線)的縮寫,是一個外部總線標準,用於規範電腦與外部設備的連接和通訊。USB接口支持設備的即插即用和熱插拔功能。USB是在1994年底由英特爾、康柏、IBM等多家公司聯合提出的。USB版本經歷了多年的發展,現已經發展為3.1版本,成為當今PC中的標準擴展接口。當前主要采用USB2.0和USB3.0接口,USB各版本間能很好的兼容。

USB采用四線電纜,其中兩根是用來傳送數據的串行通道,另兩根為設備提供電源,對於任何已經成功連接且相互識別的外設,將以雙方設備均能夠支持的最高速率傳輸數據。USB總線會根據外設情況在所兼容的傳輸模式中自動地由高速向低速動態轉換且匹配鎖定在合適的速率。USB是基於令牌的總線。類似於令牌環網絡或FDDI基於令牌的總線。USB主控制器廣播令牌,總線上設備檢測令牌中的地址是否與自身相符,通過接收或發送數據給主機來響應。USB通過支持掛起/恢復操作來管理USB總線電源。USB系統采用級聯星型拓撲,該拓撲由三個基本部分組成:主機(Host),集線器(Hub)和功能設備。

2.驅動架構

2.1 驅動架構

USB是一種主從結構的系統。主機叫做Host,從機叫做Device;一般情況下,PC作為USB host端,手機等數碼設備作為USB device,OTG(On the Go)則使設備即可以是USB device也可以是USB host;通常,作為USB device的設備被稱為Gadget。

所有支持USB通訊的設備端都有USB device程序,通常稱它們為USB固件。在一些功能簡單的設備裏,用一些專用的可編程USB控制器就可以完成USB device功能。而在一些運行了操作系統的復雜的嵌入式系統中,要完成USB device程序,就會要求你不僅熟悉USB device控制器的操作,還要熟悉操作系統的驅動架構。

USB驅動架構如圖 2-1所示。

技術分享

圖 2-1 USB主機端和設備端驅動架構

2.1.1 主機端

在主機端,有USB HCD和USBD兩個接口層。

USB HCD的全稱為主機控制器驅動(Host Controller Driver),它是對主機控制器硬件的一個抽象,提供與USB系統軟件之間的軟件接口。

從客戶軟件的角度看,USBD控制所有的USB設備,因此客戶軟件對設備的控制和所要發送的數據只要交給USBD就可以了。USBD為客戶軟件提供命令機制和管道機制。客戶軟件通過命令機制可以訪問所有設備的0號端點且與默認管道通信,從而實現對設備的配置和其他一些基本的控制工作。管道機制允許客戶和設備實現特定的通信功能。該默認管道描述了一條USBD和USB設備間通信的邏輯通道。

主機端各層有以下功能:

1)檢測連接和移去的USB設備。

2)管理主機和USB設備間的數據流。

3)連接USB狀態和活動統計。

4)控制主控制器和USB設備間的電氣接口,包括能量供應。

2.1.2 設備端

在設備端,Gadget API定義了一個通用的Gadget Driver的接口,Gadget Driver通過Gadget API與底層USB Device Controller Driver通信。其中Gadget API層屏蔽了底層硬件的不同,使Gadget Driver註重功能的實現,盡量與硬件無關。

2.2 USB主機端驅動架構

USB主機端驅動架構如圖 2-2所示。

技術分享

圖 2-2 USB主機端驅動架構

USB核心(USBD)是整個USB驅動的核心部分,從圖 22可知,一方面USBD對從USB主機控制器接收到的數據進行處理,並傳遞給上層的設備端驅動軟件;同時也接收來自上層的非USB格式數據流,進行相應的數據處理後傳遞給USB主機控制器驅動。

2.3 設備控制器驅動架構

設備端控制器基本架構如圖 2-3所示。

技術分享

圖 2-3 設備端控制器基本架構

USB設備控制器驅動主要實現Gadget API定義的函數和中斷服務函數,可按功能劃分為:API函數實現模塊和中斷處理模塊。

API函數主要實現Gadget API定義的函數功能,如結構體usb_ep_ops和usb_gadget_ops中的函數、usb_gadget_register_driver函數。這些函數提供給Gadget Driver調用。

中斷處理模塊主要處理設備控制器產生的各種中斷,包括端點中斷、復位、掛起等中斷。

3.參考資料


本文出自 “12547908” 博客,請務必保留此出處http://12557908.blog.51cto.com/12547908/1926029

USB 驅動架構淺析