標題:
USB開發(fā)學習筆記
[打印本頁]
作者:
heise
時間:
2014-8-18 02:39
標題:
USB開發(fā)學習筆記
USB概述
USB為目前廣泛被使用的一種串行通訊協(xié)議,它包含USB1.0 USB1.1 USB2.0 USB3.0,其中USB1.0USB1.1支持低速模式(1.5Mb/S)與全速模式(12Mb/s),USB2.0還支持高速模式(480Mb/s),USB3.0在做到兼容前面的同時,自己的速度提升到
高達5Gbps全雙工...
USB是一種主從通信模式,通信過程由主機(host)發(fā)起,從機(device)只能被動的負責應答,通信只能在主機與從機之間進行...
為了突破主從通信模式對通信的限制,出現(xiàn)了USBOTG,USB設備可以靈活的工作在主機或者從機這兩種狀態(tài)下,這樣設備與設備之間通過模式切換就可以進行工作,大大提高了USB的使用范圍
USB的拓撲結(jié)構(gòu)
主機可以有 一個或者多個USB主控制器(host controller)和根集線器(roothub),主控制器負責數(shù)據(jù)的處理,而集線器一個接口與通路為主機與設備,一個主控制器可以
通過集線器為USB設備提供多個USB接口,但是這些接口總的帶寬是不變的,在集線器的作用下,集線器可以形成多層嵌套,但是有一定的限制,在USB1.1中,HUB的層數(shù)最多只能為4層,USB2.0規(guī)定做多為6層,一個USB控制器理論上通過集線器擴展接口后,最多可以掛接127個設備,因為USB協(xié)議規(guī)定每一個USB設備具有一個7bit的地址
USB的電氣特性
USB接口使用的是差分電平傳輸,在低速與全速模式下,使用的電壓傳輸,在高速模式下,使用的是電流傳輸;
標準的USB連接線使用的是4芯電纜,其中包括Vbus D- D+ GND(在USB OTG中連接線為5條,多了一天身份識別線ID)
USB在傳輸過程使用的是NRZI編碼方式,
USB協(xié)議規(guī)定,設備在未配置之前,從Vbus上獲取的電流最多是100mA,在配置之后,最多可以從Vbus上獲取的電流為500mA,,Vbus的電壓為5V,
USB的插入檢測機制
在USB集線器引出的各個子USB物理接口上,D+D-分別接了一個15K的下拉電阻到地,因此在沒有設備插入的情下,D+ D-呈現(xiàn)低電平,而在USB的設備端,D+或D-接了一個1.5K的上拉電阻到3.3V的電源(具體接在D+還是D-上,由具體的設備決定)--->速度快的,上拉電阻接正的,速度慢的,上拉電阻接負的;
當設備插入到集線器上的接口時,集線器下的相應端口的V+或V-,就會出現(xiàn)電平變化,由串聯(lián)公式可以知道這時V+或V-上的電壓大概為3V,一個高電平信號給了集線器,集線器在將這個狀態(tài)上報給控制器,這樣就檢測到了設備的插入,
如果是USB的高速設備在插入到集線器上時,先被識別成全速設備,通過集線器與設備的雙方確定后,再轉(zhuǎn)到高速模式,由于高速模式下,為電流傳輸,所以這時D+上的上拉電阻需要斷開。
USB的各描述符之間的關系
USB1.1中,USB協(xié)議包含的描述符有設備描述符、配置描述符、接口描述符、端點描述符、
USB2.0中,新增加了device qualifierDescriptor and Other Speed Configure Descriptor;
一個設備只能有一個設備描述符,該設備描述符決定有多少種配置,每一種配置都有一個配置描述符,在每個配置描述符里面又定義了有多少個接口,每一個接口有一個接口描述符,每一個接口描述符又定義了接口描述符中有多少個端點,每個端點又有一個端點描述符,端點描述符描述了該端點的大小以及類型等信息。
各描述符詳細的描述信息請大家參考具體USB開發(fā)指南。
USB設備有一個USB設備地址,USB主機通過該設備地址訪問USB設備,但是在USB設備內(nèi),他包含很多個端點,所以僅有設備地址還不夠,還必須要有端點地址,有了這兩個地址后,USB主機就可以準確地與USB設備的端點發(fā)送與接收數(shù)據(jù)了
USB設備的枚舉過程
USB設備在檢測到USB設備插入之后,就要對設備進行枚舉,枚舉就是獲取設備的各種描述符信息,這樣主機方便加載合適的驅(qū)動程序;
在設備的枚舉過程中,使用的是控制傳輸以確保數(shù)據(jù)的正確性
USB包結(jié)構(gòu)以及傳輸過程
USB為串行傳輸,LSB在前,最后是MSB,
USB總線上的傳輸數(shù)據(jù)是以包為基本單位,一個包被分成很多個域,LSB與MSB是以域為單位來劃分的;
不同的包有共同的特性,就是都以同步域開始,緊跟著一個包標識符(PID),最終以包結(jié)束符(EOP)來結(jié)束一個包,其中的同步域的作用是通知USB串行接口數(shù)據(jù)即將開始傳輸,做好準備,同步域還可以用來同步主機端與設備端的數(shù)據(jù)時鐘,因為同步域是一串0開始,而0在總線上傳輸時經(jīng)過編碼為電平跳轉(zhuǎn)。
對于全速與低速設備,同步域使用的是00000001(二進制數(shù)在總線上的發(fā)送順序),對于高速設備,同步域使用的是31個0,后面跟個1(這些要求針對的對象是主機);
包結(jié)束符(EOP),對于全速、低俗與高速設備也是不一樣的,全、低速設備的EOP是一個大約2個數(shù)據(jù)寬度的單端0(SE0->即D+D-同時為低電平)信號,【對設備的復位就是將SE0狀態(tài)如果保持10mS、】,而對于全速設備EOP是使用故意的位填充錯誤來表示,同時通過CRC校驗來判斷一個位填充錯誤是真的位填充錯誤還是EOP標志(CRC校驗正確就是EOP);
包標識符(PID)是用來標識一個包的類型,一共8個位,使用其中的4個位來表示,另外4個位取反進行校驗用,
包的類型有4類:令牌包(PID1~0:01)、數(shù)據(jù)包(PID1~0:11)、握手包(PID1~0:10)、特殊包(PID1~0:00),
每一個類型的包中有可以子分為幾種不同功能的包:
令牌包:OUT(0001)、IN(1001)、SOF(0101)、SETUP(1101)
數(shù)據(jù)包:DATA0、DATA1、DATA2、MDATA(后兩種USB1.1不支持)
握手包:ACK、NAK、STALL、NYET(最后一種USB1.1不支持)
特殊包:PRE、ERR、SPLIT、PING(后三種USB1.1不支持)
因為USB為主從結(jié)構(gòu),數(shù)據(jù)傳輸由主機發(fā)起,設備只能被動的接聽數(shù)據(jù)(除了遠程喚醒功能外【遠程喚醒并不傳輸數(shù)據(jù),只改變下總線狀態(tài)】),所以需要主機發(fā)送一個令牌來通知哪個設備進行響應,如何響應;
OUT:輸出令牌包用來通知設備將要輸出一個數(shù)據(jù)包
IN:輸入令牌包用來通知設備返回一個數(shù)據(jù)包
SETUP:建立令牌包只用在控制傳輸中,他跟輸出令牌包作用一樣,用來通知設備輸出一個數(shù)據(jù)包,兩者區(qū)別在SETUP包后只使用DATA0數(shù)據(jù)包,且只能發(fā)送設備的控制端點,并且設備必須要接受,而OUT包沒有這種限制。
SOF:幀起始包在每幀(或微幀)開始時發(fā)送,她以廣播的形式發(fā)送,所有USB高速與全速都可以接收到SOF包,USB全速設備每毫秒產(chǎn)生一個幀,而USB高速設備每125微秒產(chǎn)生一個微幀。在每次幀(微幀,每毫秒內(nèi)的8個微幀的幀號一致)開始時,通過SOF包發(fā)送幀號,USB主機則對當前的幀號進行計數(shù),SOF令牌包之后是不跟數(shù)據(jù)傳輸,其他的都帶有數(shù)據(jù)傳輸
每一個令牌包最后都有一個CRC5的校驗,他只校驗PID之后的數(shù)據(jù)不包括PID本身
。。。。。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1