USB驅(qū)動分為兩塊,一塊是USB的bus驅(qū)動,這個東西,Linux內(nèi)核已經(jīng)做好了,我們可以不管,我們只需要了解它的功能。形象的說,USB的bus驅(qū)動相當(dāng)于鋪出一條路來,讓所有的信息都可以通過這條USB通道到達(dá)該到的地方,這部分工作由usb_core(drivers/usb/usb.c)來完成。當(dāng)USB設(shè)備接到USB控制器接口時,usb_core就檢測該設(shè)備的一些信息,如生產(chǎn)廠商的ID(VID)和產(chǎn)品的ID(PID),或者是設(shè)備所屬的class、subclass跟protocol,以便確定應(yīng)該調(diào)用哪一個驅(qū)動處理該設(shè)備。里面復(fù)雜細(xì)節(jié)我們不用管,我們要做的是另一塊工作——usb的設(shè)備驅(qū)動。也就是說,我們就等著usb_core告訴我們要工作了,我們才工作。
OHCI(Open?Host?Controller?Interface)是支持USB1.1的標(biāo)準(zhǔn),但它不僅僅是針對USB,還支持其他的一些接口,比如它還支持Apple的火線(Firewire,IEEE?1394)接口。與UHCI相比,OHCI的硬件復(fù)雜,硬件做的事情更多,所以實現(xiàn)對應(yīng)的軟件驅(qū)動的任務(wù),就相對較簡單。主要用于非x86的USB,如擴(kuò)展卡、嵌入式開發(fā)板的USB主控。本文也是基于OHCI來介紹usb設(shè)備驅(qū)動的。
USB從設(shè)備的分類可以從USB設(shè)備接口描述符(Standard?Interface???Descriptor)對應(yīng)的的bInterfaceClass這一個byte得到。bInterfaceClass的典型代碼為1,2,3,6,7,8,9,10,11,255。分別代表的意思為
1-audio:表示一個音頻設(shè)備。
2-communication??device:通訊設(shè)備,如電話,moden等等。
3-HID:人機(jī)交互設(shè)備,如鍵盤,鼠標(biāo)等。
6-image圖象設(shè)備,如掃描儀,攝像頭等,有時數(shù)碼相機(jī)也可歸到這一類。
7-打印機(jī)類。如單向,雙向打印機(jī)等。
8-mass?storage海量存儲類。所有帶有一定存儲功能的都可以歸到這一類。
9-h(huán)ub類。
11-chip?card/smart?card。
255-vendor?specific.廠家的自定義類,主要用于一些特殊的設(shè)備。如接口轉(zhuǎn)接卡等。
USB?4種傳輸方式
針對設(shè)備對系統(tǒng)資源需求的不同,在USB規(guī)范中規(guī)定了4種數(shù)據(jù)傳輸方式:
(1)等時傳輸。該方式用來連接需要連續(xù)傳輸,且對數(shù)據(jù)的正確性要求不高而對時間極為敏感的外部設(shè)備,如麥克風(fēng)、音響及電話等。等時傳輸方式以固定的傳輸速率,連續(xù)不斷地在主機(jī)與USB設(shè)備之間傳輸數(shù)據(jù),在傳輸數(shù)據(jù)發(fā)生錯誤是,USB并不處理這些錯誤,而是繼續(xù)傳送信的數(shù)據(jù)。
(2)中斷傳輸。改方式傳輸?shù)臄?shù)據(jù)量很小,但這些數(shù)據(jù)需要及時處理,以達(dá)到實時效果,以此方式主要用在鍵盤、鼠標(biāo)以及游戲手柄等外部設(shè)備上。
(3)控制傳輸。改方式用來處理主機(jī)的USB設(shè)備的數(shù)據(jù)傳輸。包括設(shè)備控制指令、設(shè)備狀態(tài)查詢及確認(rèn)命令。當(dāng)USB設(shè)備收到這些數(shù)據(jù)和命令后,將依據(jù)先進(jìn)先出的原則按隊列方式處理到達(dá)的數(shù)據(jù)。
(4)批量傳輸、該方式用來傳輸要求正確無誤的數(shù)據(jù)。通常打印機(jī)、掃描儀和數(shù)碼相機(jī)以這種方式與主機(jī)連接。
在這4種數(shù)據(jù)傳輸方式中,除等時傳輸方式外,其他3種方式在數(shù)據(jù)傳輸發(fā)生錯誤是,都會試圖重行發(fā)送數(shù)據(jù)以保證其正確性。
3.USB枚舉
枚舉就是從設(shè)備讀取一些信息,知道設(shè)備是什么樣的設(shè)備,如何進(jìn)行通信,這樣主機(jī)就可以根據(jù)這些信息來加載合適的驅(qū)動程序。調(diào)試USB設(shè)備,很重要的一點(diǎn)就是USB的枚舉過程,只要枚舉成功了,那么就已經(jīng)成功大半了。
3.1?USB枚舉過程概述
USB主機(jī)檢測到USB設(shè)備插入后,就會先對設(shè)備復(fù)位。設(shè)備復(fù)位后,USB主機(jī)就會對地址為0的設(shè)備發(fā)送獲取設(shè)備描述符的標(biāo)準(zhǔn)請求。所有的USB設(shè)備在總線復(fù)位后其他地址都為0,這樣主機(jī)可以跟那些剛剛插入的設(shè)備通過地址0通信。主機(jī)在建立階段發(fā)出獲取設(shè)備描述符的輸入請求,設(shè)備受到請求后,將設(shè)備描述符返回給主機(jī)。主機(jī)在成功獲取到一個數(shù)據(jù)包的設(shè)備描述符后并且確認(rèn)沒有錯誤后(有些usb設(shè)備的斷點(diǎn)0大小不足18字節(jié),但至少有8字節(jié),而標(biāo)準(zhǔn)的設(shè)備描述符有18個字節(jié),在這種情況下,USB設(shè)備只能暫時按最大包將部分設(shè)備描述符返回,而主機(jī)在成功獲取到前面一部分描述符后,就不會在請求剩下的設(shè)備描述符部分,而是進(jìn)入設(shè)置地址階段),就會返回一個0長度的狀態(tài)數(shù)據(jù)包給設(shè)備。
然后主機(jī)再對設(shè)備復(fù)位一下,接下來就會靜茹到設(shè)置地址階段。這時USB主機(jī)發(fā)出一個設(shè)置地址的請求(建立過程,設(shè)置地址無數(shù)據(jù)過程),地址包含在建立包過程,具體的地址USB主機(jī)會負(fù)責(zé)管理,它會分配一個唯一的地址給新的設(shè)備。USB設(shè)備在收到地址后,返回0長度的狀態(tài)包,主機(jī)收到0長度的狀態(tài)包后,會返回一個ACK給設(shè)備。設(shè)備在收到這個ACK后,就可以啟用這個新地址了。這樣設(shè)備就分配到了一個唯一的設(shè)備地址,以后主機(jī)就通過它來訪問該設(shè)備。
然后主機(jī)再次獲取設(shè)備描述符,這次跟第一次可能有點(diǎn)不一樣,這次需要獲取全部的18個字節(jié)的設(shè)備描述符。當(dāng)然,若果你的端點(diǎn)0緩沖大小大于18個自己的話,那就跟第一次的情形一樣了。
接下來,主機(jī)會獲取配置描述符。配置描述符總共為9個字節(jié)。主機(jī)在獲得到配置描述符后,根據(jù)里面的配置集合總長度,再獲得配置集合。配置集合包括配置描述符,接口描述符,端點(diǎn)描述符等。
如果有字符串描述符的話,還要獲取字符串描述符。另外HID設(shè)備還有HID描述符等。
USB設(shè)備枚舉過程主要可分為8個部分:
1、獲取設(shè)備描述符
2、復(fù)位
3、設(shè)置地址
4、再次獲取設(shè)備描述符
5、獲取配置描述符
6、獲取接口、端點(diǎn)描述符
7、獲取字符串描述符
8、選擇設(shè)備配置
(附3是HP1108打印機(jī)插到pc上時通過Bus Hound抓到的枚舉過程,可以以作為一個很好的學(xué)習(xí)例子。)
3.2?USB枚舉過程詳解
USB協(xié)議定義了設(shè)備的6種狀態(tài),僅在枚舉過程中,設(shè)備就經(jīng)歷了4個狀態(tài)的遷移:上電狀態(tài)(Powered),默認(rèn)狀態(tài)(Default),地址狀態(tài)(Address)和配置狀態(tài)(Configured)(其他兩種是連接狀態(tài)和掛起狀態(tài)(Suspend))。
(1)用戶把USB設(shè)備插入USB端口或系統(tǒng)啟動時給設(shè)備上電
這里的USB端口指的是主機(jī)下的根hub或主機(jī)下行端口上的hub端口。Hub給端口供電(hub.c:usb_hub_power_on()),連接著的設(shè)備處于上電狀態(tài)。此時,USB設(shè)備處于加電狀態(tài),它所連接的端口是無效的。
(2)?Hub監(jiān)測它各個端口數(shù)據(jù)線上(D+/D-)的電壓
在hub端,數(shù)據(jù)線D+和D-都有一個阻值在14.25k到24.8k的下拉電阻Rpd,而在設(shè)備端,D+(全速,高速)和D-(低速)上有一個1.5k的上拉電阻Rpu。當(dāng)設(shè)備插入到hub端口時,有上拉電阻的一根數(shù)據(jù)線被拉高到幅值的90%的電壓(大致是3V)。hub檢測到它的一根數(shù)據(jù)線是高電平,就認(rèn)為是有設(shè)備插入,并能根據(jù)是D+還是D-被拉高來判斷到底是什么設(shè)備(全速/低速)插入端口。檢測到設(shè)備后,hub繼續(xù)給設(shè)備供電,但并不急于與設(shè)備進(jìn)行USB傳輸。
USB接口定義如下圖所示:
(3)Host了解連接的設(shè)備
每個hub利用它自己的中斷端點(diǎn)向主機(jī)報告它的各個端口的狀態(tài)(hub.c:usb_hub_events()),報告的內(nèi)容只是hub端口的設(shè)備連接/斷開的事件。如果有連接/斷開事件發(fā)生(hub.c:usb_hub_port_connect_change()),那么host會發(fā)送一個?usb_hub_port_status請求給hub以了解此次狀態(tài)改變的確切含義。usb_hub_port_status等請求屬于所有hub都要求支持的hub類標(biāo)準(zhǔn)請求(standard?hub-class?requests)。
(4)?Hub檢測所插入的設(shè)備是高速還是低速設(shè)備
hub通過檢測USB總線空閑(Idle)時差分線的高低電壓來判斷所連接設(shè)備的速度類型,當(dāng)host發(fā)來usb_hub_port_status請求時,hub就可以將此設(shè)備的速度類型信息回復(fù)給host。
(5)?hub復(fù)位設(shè)備
主機(jī)一旦得知新設(shè)備已連上以后,它至少等待100ms以使得插入操作的完成以及設(shè)備電源穩(wěn)定工作。然后主機(jī)控制器就向hub發(fā)出一個?usb_set_port_feature請求讓hub復(fù)位其管理的端口(剛才設(shè)備插上的端口)。hub通過驅(qū)動數(shù)據(jù)線到復(fù)位狀態(tài)(D+和D-全為低電平?),并持續(xù)至少10ms。當(dāng)然,hub不會把這樣的復(fù)位信號發(fā)送給其他已有設(shè)備連接的端口,所以其他連在該hub上的設(shè)備自然看不到復(fù)位信號,不受影響。
(6)?Host檢測所連接的全速設(shè)備是否是支持高速模式
對于USB1.1協(xié)議,host不進(jìn)行高速檢測,設(shè)備將一直以全速工作。如果是USB?2.0協(xié)議,高速(High?Speed)設(shè)備在初始時是默認(rèn)全速(Full?Speed?)狀態(tài)運(yùn)行,所以對于一個支持USB?2.0的高速hub,當(dāng)它發(fā)現(xiàn)它的端口連接的是一個全速設(shè)備時,會進(jìn)行高速檢測,看看目前這個設(shè)備是否還支持高速傳輸,如果是,那就切到高速信號模式,否則就一直在全速狀態(tài)下工作。
????同樣的,從設(shè)備的角度來看,如果是一個高速設(shè)備,在剛連接bub或上電時只能用全速信號模式運(yùn)行(根據(jù)USB?2.0協(xié)議,高速設(shè)備必須向下兼容USB?1.1的全速模式)。隨后hub會進(jìn)行高速檢測,之后這個設(shè)備才會切換到高速模式下工作。
(7)?Hub建立設(shè)備和主機(jī)之間的信息通道
主機(jī)通過usb_hub_port_wait_reset不停地向hub發(fā)送usb_hub_port_status請求,以查詢設(shè)備是否復(fù)位成功。Hub返回的報告信息中有專門的一位用來標(biāo)志設(shè)備的復(fù)位狀態(tài)。
????當(dāng)hub撤銷了復(fù)位信號,設(shè)備就處于默認(rèn)/空閑狀態(tài)(Default?state),準(zhǔn)備接收主機(jī)發(fā)來的請求。設(shè)備和主機(jī)之間的通信通過控制傳輸,默認(rèn)地址0,端點(diǎn)號0進(jìn)行。此時,設(shè)備能從總線上得到的最大電流是100mA。(所有的USB設(shè)備在總線復(fù)位后其地址都為0,這樣主機(jī)就可以跟那些剛剛插入的設(shè)備通過地址0通信。)
(8)?主機(jī)發(fā)送usb_get_device_descriptor請求獲取默認(rèn)管道的最大包長度
默認(rèn)管道(Default?Pipe)在設(shè)備一端來看就是端點(diǎn)0。主機(jī)此時發(fā)送的請求是默認(rèn)地址0,端點(diǎn)0,雖然所有未分配地址的設(shè)備都是通過地址0來獲取主機(jī)發(fā)來的請求,但由于枚舉過程不是多個設(shè)備并行處理,而是一次枚舉一個設(shè)備的方式進(jìn)行,所以不會發(fā)生多個設(shè)備同時響應(yīng)主機(jī)發(fā)來的請求。
? 設(shè)備描述符(附1)的第8字節(jié)(bMaxPacketSize)代表設(shè)備端點(diǎn)0的最大包大小。雖然說設(shè)備所返回的設(shè)備描述符(Device?Descriptor)長度只有18字節(jié),但系統(tǒng)也不在乎,此時,描述符的長度信息對它來說是最重要的。當(dāng)完成第一次的控制傳輸后,也就是完成控制傳輸?shù)臓顟B(tài)階段,系統(tǒng)會要求hub對設(shè)備進(jìn)行再一次的復(fù)位操作(USB規(guī)范里面可沒這要求)。再次復(fù)位的目的是使設(shè)備進(jìn)入一個確定的狀態(tài)。
(9)?主機(jī)給設(shè)備分配一個地址
主機(jī)控制器通過usb_set_address請求向設(shè)備分配一個唯一的地址。在完成這次傳輸之后,設(shè)備進(jìn)入地址狀態(tài)(Address?state),之后就啟用新地址繼續(xù)與主機(jī)通信。這個地址對于設(shè)備來說是終生制的,設(shè)備在,地址在;設(shè)備消失(被拔出,復(fù)位,系統(tǒng)重啟),地址被收回。同一個設(shè)備當(dāng)再次被枚舉后得到的地址不一定是上次那個了。
(10)?主機(jī)獲取設(shè)備的信息
主機(jī)發(fā)送?usb_get_device_descriptor請求到新地址讀取設(shè)備描述符,這次主機(jī)發(fā)送usb_get_device_descriptor會認(rèn)真解析設(shè)備描述符的內(nèi)容。設(shè)備描述符內(nèi)信息包括端點(diǎn)0的最大包長度,設(shè)備所支持的配置(Configuration)個數(shù),設(shè)備類型,VID(Vendor?ID,由USB-IF分配),?PID((Product?ID,由廠商自己定制)等信息。Get_Descriptor請求(Device?type)和設(shè)備描述符(已抹去VID,PID等信息)
之后主機(jī)發(fā)送usb_get_configuration請求,讀取配置描述符(附2),字符串等,逐一了解設(shè)備更詳細(xì)的信息。事實上,對于配置描述符的標(biāo)準(zhǔn)請求中,有時bLength(附2)一項會大于實際配置描述符的長度(9字節(jié)),比如255。這樣的效果便是:主機(jī)發(fā)送了一個usb_get_configuration?的請求,設(shè)備會把接口描述符,端點(diǎn)描述符等后續(xù)描述符一并回給主機(jī),主機(jī)則根據(jù)描述符頭部的標(biāo)志判斷送上來的具體是何種描述符。
????接下來,主機(jī)就會獲取配置描述符。配置描述符總共為9字節(jié)。主機(jī)在獲取到配置描述符后,根據(jù)里面的配置集合總長度,再獲取配置集合。配置集合包括配置描述符,接口描述符,端點(diǎn)描符等等。
????如果有字符串描述符的話,還要獲取字符串描述符。另外HID設(shè)備還有HID描述符等。
(11)??主機(jī)給設(shè)備掛載驅(qū)動
主機(jī)通過解析描述符后對設(shè)備有了足夠的了解,會通過usb_find_drivers選擇一個最合適的驅(qū)動給設(shè)備。然后tell?the?world(announce_device)說明設(shè)備已經(jīng)找到了,最后調(diào)用設(shè)備模型提供的接口usbdevfs_add_device將設(shè)備添加到?usb?總線的設(shè)備列表里,然后?usb總線會遍歷驅(qū)動列表usb_driver_list里的每個驅(qū)動,調(diào)用自己的?usb_match_id?函數(shù)看它們和當(dāng)前連接的設(shè)備或接口是否匹配,匹配的話就將控制權(quán)交到相應(yīng)的設(shè)備驅(qū)動了。???
對于復(fù)合設(shè)備,通常應(yīng)該是不同的接口(Interface)配置給不同的驅(qū)動,因此,需要等到當(dāng)設(shè)備被配置并把接口使能后才可以把驅(qū)動掛載上去。
(12)?設(shè)備驅(qū)動選擇一個配置
驅(qū)動(注意,這里是驅(qū)動,之后的事情都是由驅(qū)動來接管負(fù)責(zé)與設(shè)備的通信)根據(jù)前面設(shè)備回復(fù)的信息,發(fā)送usb_set_configuration請求來正式確定選擇設(shè)備的哪個配置(Configuration)作為工作配置(對于大多數(shù)設(shè)備來說,一般只有一個配置被定義)。至此,設(shè)備處于配置狀態(tài)(Configured),當(dāng)然,設(shè)備也應(yīng)該使能它的各個接口(Interface)。
????對于復(fù)合設(shè)備,主機(jī)會在這個時候根據(jù)設(shè)備接口信息,給它們掛載驅(qū)動。至此,USB枚舉過程結(jié)束,設(shè)備可以正常使用了。
附1??設(shè)備描述符結(jié)構(gòu)體
//設(shè)備描述符
struct?usb_device_descriptor?{
????__u8??bLength;//端點(diǎn)描述符長度,單位為Byte
????__u8??bDescriptorType;//描述符的類型
????__le16?bcdUSB;//以bcd碼,標(biāo)出的usb的版本號
????__u8??bDeviceClass;//該設(shè)備所屬的類
????__u8??bDeviceSubClass;//該設(shè)備所屬的子類
????__u8??bDeviceProtocol;//該設(shè)備所用的協(xié)議
????__u8??bMaxPacketSize0;//端點(diǎn)0的最大包大小
????__le16?idVendor;//廠商id
????__le16?idProduct;//產(chǎn)品id
????__le16?bcdDevice;//設(shè)備版本號
????__u8??iManufacturer;//制造商描述符串索引
????__u8??iProduct;//產(chǎn)品描述符串索引
????__u8??iSerialNumber;//usb串號串索引
????__u8??bNumConfigurations;//該設(shè)備所擁有的配置個數(shù)
}?__attribute__?((packed));
附2??配置描述符結(jié)構(gòu)體
struct?usb_config_descriptor?{
????__u8??bLength;//端點(diǎn)描述符長度,單位為Byte
????__u8??bDescriptorType;//描述符的類型
????__le16?wTotalLength;//配置描述符的總長度
????__u8??bNumInterfaces;//該配置下的接口個數(shù)
????__u8??bConfigurationValue;//該配置的索引
????__u8??iConfiguration;//配置描述符串索引
????__u8??bmAttributes;
????__u8??bMaxPower;//該配置所能供應(yīng)的最大電流,以2mA為單位
}?__attribute__?((packed));
附3? BUS HOUND 抓usb打印機(jī)HP1108的枚舉過程
Bus Hound 5.04capture on Windows XP Service Pack 3. Complements of?www.perisoft.net
Device -Device ID (followed by the endpoint for USB devices)
??????????? (19)Prolific USB-to-Serial Comm Port (COM2)
??????????? (21) USBComposite Device
??????????? (22) HPSmart Install [ROM=1.0 ]
??????????? (23) USBPrinting Support
??????????? (24) P1100USB EWS Device Driver
??????????? (25) HPLaserJet Professional P1108
? Phase? - Phase Type
???????????CMD?? SCSI/ATAPIcommand???????? RESET bus reset
???????????CTL?? USB control transfer?????? SENSESCSI sense data
???????????IN??? Data intransfer?????????? USTS?USB status
???????????OUT?? Data outtransfer?????????ok??? command complete
? Data?? - Hex dump of the data transferred
? Descr? - Description of the phase
? Cmd... - Position in the captured data
Device? Phase? Data???????????????????????????????????????????????????????????????????????????????????????????????????Description?????? Cmd.Phase.Ofs(rep)
------? -----?------------------------------------------------------------------------------------------------------?----------------? ------------------
? 21.0? CTL??? 80 06 00 03? 00 00 ff00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR??????????1.1.0(2)?????
? 21.0? IN???? 04 03 0904????????????????????????????????????????????????????????????????????????????????????????????....????????????????????1.2.0????????
? 21.0? CTL??? 80 06 02 03? 09 04 ff00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR??????????2.1.0(2)?????
? 21.0? IN???? 3e 03 48 00? 50 00 2000? 4c 00 61 00? 73 00 65 00? 72 00 4a 00? 65 00 7400? 20 00 50 00? 72 00 6f 00? >.H.P..L.a.s.e.???????? 2.2.0????????
??????????????66 00 65 00? 73 00 73 00? 69 00 6f 00? 6e 00 61 00? 6c 0020 00? 50 00 31 00? 31 00 30 00? 3800???????f.e.s.s.i.o.n.a.????????2.2.32???????
? 21.0? CTL??? 80 06 00 01? 00 00 1200???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR??????????5.1.0????????
? 21.0? IN???? 12 01 00 02? 00 00 0040? f0 03 2a 00? 00 01 01 02? 0301??????????????????????????????????????????????.......@..*.....????????5.2.0????????
? 21.0? CTL??? 80 06 00 02? 00 00 0900???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????? 6.1.0????????
? 21.0? IN???? 09 02 20 00? 01 01 00c0?31???????????????????????????????????????????????????????????????????????????.......1???????????????6.2.0????????
? 21.0? CTL??? 80 06 00 02? 00 00 2000???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR??????????7.1.0????????
? 21.0? IN???? 09 02 20 00? 01 01 00c0? 31 09 04 00? 00 02 08 06? 50 05 07 05? 04 02 0002? 00 07 05 84? 02 00 02 00? .......1.......???????? 7.2.0????????
? 21.0? CTL??? 80 06 00 03? 00 00 0200???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR??????????8.1.0????????
? 21.0? IN???? 0403??????????????????????????????????????????????????????????????????????????????????????????????????..??????????????????????8.2.0????????
? 21.0? CTL??? 80 06 00 03? 00 00 0400???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR??????????9.1.0????????
? 21.0? IN???? 04 03 0904????????????????????????????????????????????????????????????????????????????????????????????....????????????????????9.2.0????????
? 21.0? CTL??? 80 06 03 03? 09 04 0200???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????10.1.0????????
? 21.0? IN???? 2a03??????????????????????????????????????????????????????????????????????????????????????????????????*.?????????????????????10.2.0????????
? 21.0? CTL??? 80 06 03 03? 09 04 2a00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????11.1.0????????
? 21.0? IN???? 2a 03 30 00? 30 00 3000? 30 00 30 00? 30 00 30 00? 30 00 30 00? 51 00 3800? 37 00 57 00? 42 00 50 00?*.0.0.0.0.0.0.0.??????? 11.2.0????????
??????????????52 00 53 00? 49 00 31 00? 6300????????????????????????????????????????????????????????????????????????R.S.I.1.c.?????????????11.2.32???????
? 21.0? CTL??? 00 09 01 00? 00 00 0000???????????????????????????????????????????????????????????????????????????????SETCONFIG?????????????12.1.0????????
? 21.0? CTL??? 01 0b 00 00? 00 00 0000???????????????????????????????????????????????????????????????????????????????SET INTERFACE??????????13.1.0????????
? 21.0? CTL??? a1 fe 00 00? 00 00 01 00???????????????????????????????????????????????????????????????????????????????GET MAX LUN????????????14.1.0????????
? 21.0? IN????00?????????????????????????????????????????????????????????????????????????????????????????????????????.??????????????????????14.2.0????????
? 21.4? OUT??? 55 53 42 43? 08 90 9e 89? 2400 00 00? 80 00 06 12? 00 00 00 24? 00 00 00 00? 00 00 0000? 00 00 00????USBC....$.......???????15.1.0????????
? 21.4? IN???? 05 80 02 02? 1f 00 0000? 48 50 20 20? 20 20 20 20? 53 6d 61 72? 74 20 496e? 73 74 61 6c? 6c 20 20 20?........HP?????????????16.1.0????????
??????????????31 2e 3020????????????????????????????????????????????????????????????????????????????????????????????1.0????????????????????16.1.32???????
? 21.4? IN???? 55 53 42 53? 08 90 9e89? 00 00 00 00?00??????????????????????????????????????????????????????????????USBS.........?????????? 17.1.0????????
? 22??? CMD??? 12 00 00 00? 2400?????????????????????????????????????????????????????????????????????????????????????INQUIRY????????????????18.1.0????????
? 22??? IN???? 05 80 02 02? 1f 0000 00? 48 50 20 20? 20 20 20 20? 53 6d 61 72? 74 20 496e? 73 74 61 6c? 6c 20 20 20?........HP?????????????18.2.0????????
??????????????31 2e 3020????????????????????????????????????????????????????????????????????????????????????????????1.0????????????????????18.2.32???????
? 22??? CMD??? 12 00 00 00? 2400?????????????????????????????????????????????????????????????????????????????????????INQUIRY????????????????19.1.0(2)?????
? 21.4? OUT??? 55 53 42 43? 00 8e ae 8a? 2400 00 00? 80 00 06 12? 00 00 00 24? 00 00 00 00? 00 00 0000? 00 00 00????USBC....$.......???????20.1.0(2)?????
? 21.4? IN???? 05 80 02 02? 1f 00 0000? 48 50 20 20? 20 20 20 20? 53 6d 61 72? 74 20 496e? 73 74 61 6c? 6c 20 20 20?........HP?????????????21.1.0(2)?????
??????????????31 2e 3020????????????????????????????????????????????????????????????????????????????????????????????1.0????????????????????21.1.32???????
? 21.4? IN???? 55 53 42 53? 00 8e ae8a? 00 00 00 00?00??????????????????????????????????????????????????????????????USBS.........??????????22.1.0(2)?????
? 22??? IN???? 05 80 02 02? 1f 0000 00? 48 50 20 20? 20 20 20 20? 53 6d 61 72? 74 20 496e? 73 74 61 6c? 6c 20 20 20? ........HP?????????????19.2.0????????
??????????????31 2e 3020????????????????????????????????????????????????????????????????????????????????????????????1.0????????????????????19.2.32???????
? 22??? CMD??? 25 00 00 00? 00 00 0000? 0000????????????????????????????????????????????????????????????????????????READ CAPACITY??????????27.1.0(2)?????
? 21.4? OUT??? 55 53 42 43? 08 90 9e 89? 0800 00 00? 80 00 0a 25? 00 00 00 00? 00 00 00 00? 00 00 0000? 00 00 00????USBC...........%???????28.1.0(2)?????
? 21.4? USTS?? 04 00 00c0????????????????????????????????????????????????????????????????????????????????????????????stallpid??????????????29.1.0(2)?????
? 21.4?RESET?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????30.1.0(2)?????
? 21.4? IN???? 55 53 42 53? 08 90 9e89? 08 00 00 00?01??????????????????????????????????????????????????????????????USBS.........??????????31.1.0(2)?????
? 21.4? OUT??? 55 53 42 43? 08 90 9e 89? 1200 00 00? 80 00 0c 03? 00 00 00 12? 00 00 00 00? 00 00 0000? 00 00 00????USBC............???????32.1.0(2)?????
? 21.4? IN???? 70 00 06 00? 00 00 000a? 00 00 00 00? 28 00 00 00? 0000??????????????????????????????????????????????p...........(...??????? 33.1.0(2)?????
? 21.4? IN???? 55 53 42 53? 08 90 9e89? 00 00 00 00?00??????????????????????????????????????????????????????????????USBS.........??????????34.1.0(2)?????
? 22??? SENSE? 70 00 06 00? 00 00 00 0a? 0000 00 00? 28 00 00 00? 0000??????????????????????????????????????????????medium changed?????????27.2.0????????
? 22??? CMD??? 4a 01 00 00? 00 00 0000? 0800????????????????????????????????????????????????????????????????????????GET EVENT STATUS???????43.1.0(2)?????
? 21.4? OUT??? 55 53 42 43? 98 16 ae 8a? 0800 00 00? 80 00 0a 4a? 01 00 00 00? 00 00 00 08? 00 00 0000? 00 00 00????USBC...........J???????44.1.0(2)?????
? 21.4? IN???? 00 00 00 00? 00 00 0000???????????????????????????????????????????????????????????????????????????????........???????????????45.1.0(2)?????
? 21.4? IN???? 55 53 42 53? 98 16 ae8a? 00 00 00 00?00??????????????????????????????????????????????????????????????USBS.........??????????46.1.0(2)?????
? 22??? IN???? 00 00 00 00? 00 000000???????????????????????????????????????????????????????????????????????????????........???????????????43.2.0????????
? 22??? CMD??? 00 00 00 00? 0000?????????????????????????????????????????????????????????????????????????????????????TEST UNIT READY????????51.1.0(4)?????
? 21.4? OUT??? 55 53 42 43? 08 50 c7 89? 0000 00 00? 00 00 06 00? 00 00 00 00? 00 00 00 00? 00 00 0000? 00 00 00????USBC.P..........??????? 52.1.0(4)?????
? 21.4? IN???? 55 53 42 53? 08 50 c789? 00 00 00 00?01??????????????????????????????????????????????????????????????USBS.P.......??????????53.1.0(4)?????
? 21.4? OUT??? 55 53 42 43? 08 50 c7 89? 1200 00 00? 80 00 0c 03? 00 00 00 12? 00 00 00 00? 00 00 0000? 00 00 00????USBC.P..........???????54.1.0(4)?????
? 21.4? IN???? 70 00 06 00? 00 00 000a? 00 00 00 00? 28 00 00 00? 0000??????????????????????????????????????????????p...........(...???????55.1.0(4)?????
? 21.4? IN???? 55 53 42 53? 08 50 c789? 00 00 00 00?00??????????????????????????????????????????????????????????????USBS.P.......??????????56.1.0(4)?????
? 22??? SENSE? 70 00 06 00? 00 00 00 0a? 0000 00 00? 28 00 00 00? 0000??????????????????????????????????????????????medium changed?????????51.2.0????????
? 22??? CMD??? d0 00 00 00? 0000?????????????????????????????????????????????????????????????????????????????????????????????????????????????75.1.0????????
? 21.4? OUT??? 55 53 42 43? 08 50 c7 89? 0000 00 00? 00 00 06 d0? 00 00 00 00? 00 00 00 00? 00 00 0000? 00 00 00????USBC.P..........???????76.1.0????????
? 21.4? IN???? 55 53 42 53? 08 50 c789? 00 00 00 00?00??????????????????????????????????????????????????????????????USBS.P.......?????????? 77.1.0????????
? 22???ok????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????75.2.0????????
? 21.0? CTL??? 80 06 00 03? 00 00 ff00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????78.1.0(2)?????
? 21.0? IN???? 04 03 0904????????????????????????????????????????????????????????????????????????????????????????????....???????????????????78.2.0????????
? 21.0? CTL??? 80 06 02 03? 09 04 ff00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????79.1.0(2)?????
? 21.0? IN???? 3e 03 48 00? 50 00 2000? 4c 00 61 00? 73 00 65 00? 72 00 4a 00? 65 00 7400? 20 00 50 00? 72 00 6f 00? >.H.P..L.a.s.e.??????? 79.2.0????????
??????????????66 00 65 00? 73 00 73 00? 69 00 6f 00? 6e 00 61 00? 6c 0020 00? 50 00 31 00? 31 00 30 00? 3800???????f.e.s.s.i.o.n.a.???????79.2.32???????
? 21.0? CTL??? 80 06 00 01? 00 00 1200???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????82.1.0????????
? 21.0? IN???? 12 01 00 02? 00 00 0040? f0 03 2a 00? 00 01 01 02? 0301??????????????????????????????????????????????.......@..*.....???????82.2.0????????
? 21.0? CTL??? 80 06 00 02? 00 00 0900???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????83.1.0????????
? 21.0? IN???? 09 02 3e 00? 02 01 00c0?31???????????????????????????????????????????????????????????????????????????..>.....1??????????????83.2.0????????
? 21.0? CTL??? 80 06 00 02? 00 00 3e00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????84.1.0????????
? 21.0? IN???? 09 02 3e 00? 02 01 00c0? 31 09 04 00? 00 02 07 01? 02 04 07 05? 01 02 0002? 00 07 05 81? 02 00 02 00?..>.....1.......???????84.2.0????????
??????????????09 04 01 00? 03 ff 02 10? 06 07 05 02? 02 00 02 00? 07 0582 02? 00 02 00 07? 05 83 03 08? 000c???????................???????84.2.32???????
? 21.0? CTL??? 00 09 01 00? 00 00 0000???????????????????????????????????????????????????????????????????????????????SETCONFIG?????????????85.1.0????????
? 21.0? CTL??? 80 06 04 03? 09 04 ff00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????86.1.0????????
? 21.0? IN???? 10 03 50 00? 72 00 6900? 6e 00 74 00? 65 00 7200?????????????????????????????????????????????????????..P.r.i.n.t.e.r.??????? 86.2.0????????
? 21.0? CTL??? 80 06 06 03? 09 04 ff00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????87.1.0????????
? 21.0? IN???? 0e 03 48 00? 50 00 2000? 45 00 57 00? 5300???????????????????????????????????????????????????????????..H.P. .E.W.S.?????????87.2.0????????
? 23.0? CTL??? 80 06 00 02? 00 00 0901???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????88.1.0????????
? 23.0? IN???? 09 02 20 00? 01 01 00c0? 31 09 04 00? 00 02 07 01? 02 04 07 05? 01 02 0002? 00 07 05 81? 02 00 02 00? .. .....1.......???????88.2.0????????
? 23.0? CTL??? 00 09 01 00? 00 00 0000???????????????????????????????????????????????????????????????????????????????SETCONFIG?????????????89.1.0????????
? 23.0? CTL??? 80 06 00 01? 00 00 1200???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????90.1.0????????
? 23.0? IN???? 12 01 00 02? 00 00 0040? f0 03 2a 00? 00 01 01 04? 0301??????????????????????????????????????????????.......@..*.....???????90.2.0????????
? 23.0? CTL??? a1 00 00 00? 00 00 f103???????????????????????????????????????????????????????????????????????????????GET DEVICE ID??????????91.1.0????????
? 23.0? IN???? 00 8c 4d 46? 47 3a 4865? 77 6c 65 74? 74 2d 50 61? 63 6b 61 72? 64 3b 4d44? 4c 3a 48 50? 20 4c 61 73?..MFG:Hewlett-Pa???????91.2.0????????
??????????????65 72 4a 65? 74 20 50 72? 6f 66 65 73? 73 69 6f 6e? 61 6c20 50? 31 31 30 38? 3b 43 4d 44? 3a 5a 4a 53? erJetProfession???????91.2.32???????
??????????????2c 50 4a 4c? 2c 41 43 4c? 2c 48 54 54? 50 3b 43 4c? 53 3a50 52? 49 4e 54 45? 52 3b 44 45? 53 3a 48 50?,PJL,ACL,HTTP;CL???????91.2.64???????
??????????????20 4c 61 73? 65 72 4a 65? 74 20 50 72? 6f 66 65 73? 73 696f 6e? 61 6c 20 50? 31 31 30 38? 3b 46 57 56??LaserJet Profes??????? 91.2.96???????
??????????????45 52 3a 32? 30 31 32 30? 38 31 343b??????????????????????????????????????????????????????????????????ER:20120814;???????????91.2.128??????
? 24.0? CTL??? 80 06 00 01? 00 00 1200???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????92.1.0????????
? 24.0? IN???? 12 01 00 02? 00 00 0040? f0 03 2a 00? 00 01 01 06? 0301??????????????????????????????????????????????.......@..*.....???????92.2.0????????
? 24.0? CTL??? 80 06 00 02? 00 00 0900???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????93.1.0????????
? 24.0? IN???? 09 02 27 00? 01 01 00c0?31???????????????????????????????????????????????????????????????????????????..'.....1??????????????93.2.0????????
? 24.0? CTL??? 80 06 00 02? 00 00 2700???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????94.1.0????????
? 24.0? IN???? 09 02 27 00? 01 01 00c0? 31 09 04 01? 00 03 ff 02? 10 06 07 05? 02 02 0002? 00 07 05 82? 02 00 02 00?..'.....1.......???????94.2.0????????
??????????????07 05 83 03? 08 000c??????????????????????????????????????????????????????????????????????????????????.......????????????????94.2.32???????
? 24.0? CTL??? 80 00 00 00? 00 00 0200???????????????????????????????????????????????????????????????????????????????GETSTATUS?????????????95.1.0????????
? 24.0? IN???? 0100??????????????????????????????????????????????????????????????????????????????????????????????????..?????????????????????95.2.0????????
? 24.0? CTL??? 00 09 01 00? 00 00 0000???????????????????????????????????????????????????????????????????????????????SETCONFIG?????????????96.1.0????????
? 21.0? CTL??? 01 0b 00 00? 01 00 0000???????????????????????????????????????????????????????????????????????????????SET INTERFACE??????????97.1.0????????
? 21.0? CTL??? 80 06 00 02? 00 00 3e00???????????????????????????????????????????????????????????????????????????????GET DESCRIPTOR?????????98.1.0????????
? 21.0? IN???? 09 02 20 00? 01 01 00c0? 31 09 04 00? 00 02 08 06? 50 05 07 05? 04 02 0002? 00 07 05 84? 02 00 02 00? .......1.......??????? 98.2.0? ??
?
評論