資源描述:
《USB通信相關(guān)知識(shí)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、端點(diǎn)狀態(tài)USB設(shè)備與主機(jī)的通信可以通過對USB端點(diǎn)狀態(tài)的控制來完成。USB設(shè)備端點(diǎn)可以定義3個(gè)不同狀態(tài):空閑(Idle)狀態(tài)、停止(Halt)狀態(tài)和讀/寫(W/R)狀態(tài)。USB硬件抽象層提供USB_ConfigureEndpoint、USB_Write、USB_Read、USB_EndOfTransfer、USB_Stall、USB_HaIt和USB_ClearHalt七個(gè)功能函數(shù)對設(shè)備的狀態(tài)進(jìn)行管理,端點(diǎn)的狀態(tài)轉(zhuǎn)換過程如圖4所示。1、USB_ConfiguIreEndpoint負(fù)責(zé)配置端點(diǎn)的最大包長度和傳輸方向,并將端點(diǎn)狀態(tài)設(shè)置為空閑狀態(tài)。2、端點(diǎn)進(jìn)入空閑狀態(tài),如果上層調(diào)用USB_W
2、rite進(jìn)行數(shù)據(jù)發(fā)送,將發(fā)送緩沖區(qū)指向要發(fā)送的數(shù)據(jù),設(shè)置端點(diǎn)狀態(tài)為寫狀態(tài),等待USB主機(jī)接收數(shù)據(jù)(真正的數(shù)據(jù)傳輸在中斷服務(wù)程序中進(jìn)行)。寫完成后,端點(diǎn)回到空閑狀態(tài)。3、數(shù)據(jù)接收與發(fā)送類似。4、如果設(shè)備出現(xiàn)某種錯(cuò)誤,主機(jī)會(huì)向設(shè)備發(fā)送Set_Feature命令,設(shè)備接收到Set_Feature命令,執(zhí)行USB_Halt進(jìn)入停止?fàn)顟B(tài)。5、端點(diǎn)處于停止?fàn)顟B(tài)時(shí),如果接收到Clear_Feature,則執(zhí)行USB—ClearHalt清除Halt標(biāo)志,進(jìn)入Idle狀態(tài)。6、如果USB設(shè)備由于某種原因無法對當(dāng)前命令進(jìn)行處理(如不能識(shí)別命令,或者沒有準(zhǔn)備好進(jìn)行數(shù)據(jù)傳輸),則執(zhí)行USB_Stall通知主機(jī)
3、發(fā)生錯(cuò)誤,但端點(diǎn)的狀態(tài)不變。USB設(shè)備狀態(tài)1、連接狀態(tài)(Attached)USB設(shè)備已經(jīng)連接注主機(jī)或集線器的下行端口上,但USB總線的還沒有提供,這時(shí)其處于連接狀態(tài)。2、上電狀態(tài)(Powered)當(dāng)USB設(shè)備已連接至某集線器的下行端口,且已得到USB總線電源,但它還沒有被復(fù)位時(shí),其將處于上電狀態(tài),這時(shí)還不能對任何USB事物處理做出響應(yīng)。盡管自供電設(shè)備至連接至某集線器的下行端口前就可能已經(jīng)上電了,但這時(shí)對USB來說,其仍處于連接狀態(tài),且只有至該集線器的電源建立時(shí)間過后(不管USB設(shè)備是否使用這個(gè),其建立時(shí)間總是有的),USB才會(huì)認(rèn)為其處于上電狀態(tài)。3、缺省狀態(tài)(Default)USB設(shè)備
4、會(huì)響應(yīng)集線器下行端口發(fā)出的復(fù)位信號(hào),并進(jìn)行復(fù)位操作。在復(fù)位結(jié)束后,USB設(shè)備將進(jìn)入缺省狀態(tài),這時(shí)其可從USB總線上獲取小于100mA的電流,并可使用缺省設(shè)備地址來對某些USB事物處理做出響應(yīng)。在USB設(shè)備復(fù)位操作完畢后,它將采用正確的傳輸速率(低速/全速)和主機(jī)進(jìn)行通信。低速/全速傳輸速率的檢測是通過USB設(shè)備連接在D--/D+線上的上拉電阻實(shí)現(xiàn)的。4、地址狀態(tài)(Address)在USB設(shè)備復(fù)位結(jié)束后,主機(jī)會(huì)為其分配一個(gè)唯一的設(shè)備地址,當(dāng)它還沒有被配置時(shí),其將處于地址狀態(tài)。在這之后,USB設(shè)備將不再使用缺省設(shè)備地址,而是使用這個(gè)新的地址來響應(yīng)主機(jī)發(fā)出的事務(wù)處理。即使當(dāng)USB設(shè)備處于掛起
5、狀態(tài),它仍會(huì)保持該唯一的設(shè)備地址不變。5、配置狀態(tài)(Configured)USB設(shè)備在使用前必須被配置,即正確處理主機(jī)發(fā)出的SetConfiguration(x)請求(x代表非0的配置)。在配置操作完成后,USB設(shè)備將處于配置狀態(tài),這時(shí)客戶軟件可以和其功能單元進(jìn)行數(shù)據(jù)傳輸,并為主機(jī)提供額外的功能。配置操作將使USB設(shè)備中與該配置有關(guān)的所有寄存器都返回至缺省狀態(tài),如塊端點(diǎn)的數(shù)據(jù)觸發(fā)位被置為0值。6、掛起狀態(tài)(Suspended)為節(jié)省USB系統(tǒng)的功率消耗,當(dāng)USB設(shè)備值3ms內(nèi)沒有檢測到總線活動(dòng)時(shí),它將自動(dòng)進(jìn)入掛起狀態(tài),這時(shí)其仍會(huì)保持原有的設(shè)備地址和配置值。USB設(shè)備在連接后的任何時(shí)刻、
6、任何狀態(tài)都可能被掛起。為使USB脫離掛起狀態(tài),必須對其進(jìn)行恢復(fù)。USB總線上的任何非空閑信號(hào)都將使掛起的USB設(shè)備得到恢復(fù)。另外,具有遠(yuǎn)程喚醒功能的USB設(shè)備,自己也可以啟動(dòng)系統(tǒng)的恢復(fù)操作,但當(dāng)USB設(shè)備復(fù)位時(shí),其遠(yuǎn)程喚醒功能必須被禁止。標(biāo)準(zhǔn)USB描述符的類型1、設(shè)備描述符(DeviceDescriptor)typedefcodestruct{BYTEbLength;BYTEbDescriptorType;WORDbcdUSB;BYTEbDeviceClass;BYTEbDeviceSubClass;BYTEbDeviceProtocol;BYTEbMaxPacketSize0;WOR
7、DidVendor;WORDidProduct;WORDbcdDevice;BYTEiManufacturer;BYTEiProduct;BYTEiSerialNumber;BYTEbNumConfigurations;}device_descriptor;2、設(shè)備限定描述符(Device_QualifierDescriptor)3、配置描述符(ConfigurationDescriptor)typedefcodestruct{BYTEbLen