基于USB的家電自動(dòng)化設(shè)計(jì)
B型USB連接器專用于數(shù)據(jù)上行傳輸,即數(shù)據(jù)從USB主機(jī)傳輸?shù)皆O(shè)備或從集線器傳輸?shù)皆O(shè)備,B型連接器位于主機(jī)和集線器上,如圖2所示。有時(shí)為了使占用空間更小,可以使用微型USB連接器。
USB設(shè)備通過拉高D+或D-端線電平來指示其速度,最高為3.3伏。全速設(shè)備在D+端接一個(gè)上拉電阻表明它是全速設(shè)備,如圖3所示。本文引用地址:http://m.butianyuan.cn/article/202508.htm
如果沒有上拉電阻,USB就假定總線上沒有連接任何東西。有些設(shè)備中,上拉電阻是內(nèi)置的,能通過固件開啟和關(guān)閉。另一些設(shè)備則需要外部上拉電阻。在這種情況下,通過固件進(jìn)行速度控制會(huì)受到限制,并且要求另外對外部中繼服務(wù)進(jìn)行實(shí)現(xiàn)與編碼。
低速設(shè)備在D-端連接上拉電阻,表明其為低速設(shè)備,如圖4所示。最開始,高速設(shè)備被當(dāng)作全速設(shè)備進(jìn)行連接(D+→1.5k至3.3V)。初始連接之后,設(shè)備在復(fù)位時(shí)將發(fā)出高速的啁啾聲,然后與主機(jī)建立高速連接。一旦設(shè)備經(jīng)初始化進(jìn)入高速模式,上拉電阻就被禁用。
USB數(shù)據(jù)流模式
在設(shè)備可以與應(yīng)用進(jìn)行通信前,USB主機(jī)需要了解設(shè)備狀態(tài)并給它分配設(shè)備驅(qū)動(dòng)程序,實(shí)現(xiàn)這一初始信息交換的過程就叫作枚舉。在枚舉過程中,根據(jù)USB V2.0規(guī)范的定義,設(shè)備將經(jīng)歷以下設(shè)備狀態(tài):
◆ 上電狀態(tài)(Powered)
◆ 缺省狀態(tài)(Default)
◆ 地址狀態(tài)(Address)
◆ 配置狀態(tài)(Configured)
另外還有兩個(gè)USB設(shè)備狀態(tài),“連接狀態(tài)”(Attached)和“掛起狀態(tài)”(Suspended)。枚舉過程的具體細(xì)節(jié)超出了本文的范圍;不過,在設(shè)備配置中使用的命令與結(jié)構(gòu)是相關(guān)的。描述符是讓USB主機(jī)能獲取設(shè)備信息的數(shù)據(jù)結(jié)構(gòu)。在枚舉過程中,主機(jī)請求描述符,從最上層設(shè)備描述符開始,一直到最低層端點(diǎn)描述符,順序如圖5所示。
枚舉過程
下面概述一下USB設(shè)備的枚舉過程所包含的步驟,并講解設(shè)備在枚舉過程如何經(jīng)歷從上電到缺省、地址以及配置這幾個(gè)狀態(tài)。
◆ 用戶將一個(gè)USB設(shè)備插入U(xiǎn)SB端口,主機(jī)為端口供電,設(shè)備此時(shí)處于上電狀態(tài)。
◆ 主機(jī)檢測設(shè)備。
◆ 集線器使用中斷通道將事件報(bào)告給主機(jī)。
◆ 主機(jī)發(fā)送Get_Port_Status(讀端口狀態(tài))請求,以獲取更多的設(shè)備信息。
◆ 集線器檢測設(shè)備是低速運(yùn)行還是高速運(yùn)行,并將此信息送給主機(jī),這是對Get_Port_Status請求的響應(yīng)。
◆ 主機(jī)發(fā)送Set_Port_Feature(寫端口狀態(tài))請求給集線器,要求它復(fù)位端口。
◆ 集線器對設(shè)備復(fù)位。
◆ 主機(jī)使用Chirp K信號來了解全速設(shè)備是否支持高速運(yùn)行。
◆ 主機(jī)發(fā)送另一個(gè)Get_Port_Status請求,確定設(shè)備是否已經(jīng)從復(fù)位狀態(tài)退出。
◆ 設(shè)備此時(shí)處于缺省狀態(tài),且已準(zhǔn)備好在零端點(diǎn)通過缺省通道響應(yīng)主機(jī)控制傳輸。缺省地址為00h,設(shè)備能從總線獲取高達(dá)100mA的電流。
◆ 主機(jī)發(fā)送Get_Descriptor(讀設(shè)備描述符)報(bào)文,以便確定最大數(shù)據(jù)包大小。設(shè)備描述符的八個(gè)字節(jié)是bMaxPacketSize。
◆ 通過發(fā)送Set_Address(寫地址)請求,主機(jī)分配地址,設(shè)備此時(shí)處于地址狀態(tài)。
◆ 主機(jī)發(fā)送Get_Descriptor報(bào)文,以獲取更多的設(shè)備信息。主機(jī)通過發(fā)送描述符響應(yīng)設(shè)備請求,隨后發(fā)送全部的次級描述符。
◆ 主機(jī)分配并加載設(shè)備驅(qū)動(dòng)程序。
◆ 通過發(fā)送Set_Configuration(寫配置)請求,主機(jī)的設(shè)備驅(qū)動(dòng)程序選擇一個(gè)有效配置,設(shè)備此時(shí)處于配置狀態(tài)。
評論