欢迎来到天天文库
浏览记录
ID:6660979
大小:33.50 KB
页数:14页
时间:2018-01-21
《usb 标准描述元之技巧(2)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、USB标准描述元之技巧(2)USB標準描述元之技巧(2)作者:林錫寬e-mail:sklin@cc.nctu.edu.tw(原文刊於e科技雜誌vol.25,2003年1月號)組態描述元一個USB裝置的功能被使用之前,裝置要先被組織好(beconfigured)﹔正確的說,應該是設定好組態。主機會先向USB裝置取得組態資料,然後下指令設定組態(setconfiguration),所謂設定組態不過是從組態資料中將可供選擇的設定項選定而已。每個USB裝置至少要有一個組態。無論USB裝置只有一個或有超過
2、一個的組態,都需要用設定組態指令來選擇組態編號,如此才完成組態設定(configured)。因此,同一個USB裝置可以利用不同的驅動程式來設定不一樣的組態,則該裝置的用途就可以完全不同。儘管如此,還是建議讓一個裝置只有一個組態就好。從這裡可以理解,組態是用來規範裝置的用途與功能,其最主要的下屬就是介面和端點,必要時再外加上類別資料。每個組態可以擁有一個以上的介面,而每個介面可以擁有一個以上的端點。介面其實是一組具有單一特性與功能的端點的集合。請特別注意,同一個介面允許有不同的設定,稱作交替設定(
3、alternatesetting),其目的是要在其他介面仍正常運作下仍能改變單一介面的部分功能。驅動程式可以利用設定介面的指令來選擇介面的交替設定。主機是利用取得描述元指令來取得描述元資料。依據USB規範,當指令要取得組態描述元時,則裝置必須將裝置描述元、介面描述元、HID類別描述元、和端點描述元的資料都回傳給主機。因此這些描述元的排列需要依據規定的順序。例1:假設有一個組態擁有二個介面,而每一個介面都有二個端點,其中第一個介面(介面編號InterfaceNumber=0x00)有二個交替設定(
4、AlternateSetting=0x00和AlternateSetting=0x01)。描述元的排列順序必須如下所示,其中每個介面所屬的二個端點之先後順序不重要:組態描述元→介面描述元(InterfaceNumber=0x00,AlternateSetting=0x00)1→端點描述元→端點描述元→介面描述元(InterfaceNumber=0x00,AlternateSetting=0x01)→端點描述元→端點描述元→介面描述元(InterfaceNumber=0x01,AlternateS
5、etting=0x00)→端點描述元→端點描述元───────────────────────────────────────────表5是組態描述元的格式。第三欄位紀錄組態描述總長,其含括該組態轄下的所有介面描述元、類別描述元、端點描述元的長度﹔以表5中的範例,總長為59=9+(9+9+7)+(9+9+7),後二個括號中數值分別為二個介面與其類別和端點之描述元長。第一個介面為鍵盤,第二個為滑鼠,所以這個組態有二個介面,第四欄位的介面個數就須填0x02。第五欄位為組態編號,必需為正整數,例如0x
6、01,0x02等﹔主機作設定組態時,即依據這個編號來選擇要使用的組態,尤其當裝置有二個以上組態時。第六欄位為組態名稱索引,如同裝置描述元中的製造商名稱索引,用來宣告該名稱在字串描述元中的位置。第七欄位的組態屬性是以位元圖型態表示:bmAttributesD7D6D5D4D3D2D1D01自供電源遠端喚醒00000除了位元D5和D6外,其餘位元皆為固定值。D6=1表示裝置具備自供電源,此時仍可同時使用匯流排提供的電源,D6=0則不具備。D5=1則為支援遠端喚醒功能,D5=0則不支援。第八欄位用於宣
7、告匯流排提供的電源之最大功率,由於電壓為固定5V,所以功率就直接用電流量來表示,此處所用單位為2mA,因此最大電流為255×2=510mA。表5.組態描述元欄位名位置大小(Bytes)名稱範例值(說明)bLength01描述元長度0x09(固定值)bDescriptorType11描述元型別0x02(固定值)bTotalLength22組態描述總長0x003B(59位元組)bNumInterfaces41介面個數0x02(2個介面)bConfigurationValue51組態編號0x01(no
8、.=1)iConfiguration61組態名稱索引0x00(無名稱)bmAttributes71組態屬性10100000B2bMaxPower81最大消耗電流(單位2mA)0x32(=100mA)介面描述元介面描述元主要提供該介面使用的端點數(bNumEndpoints)和所屬的類別(bInterfaceClass)﹔另外為了不同設定,要有介面編號和交替設定。介面編號和交替設定的值都是從零起算:第一個介面為0x00,第二個介面為0x01﹔每個介面中的第一個交替設定為0x00,第二個為0x01。
此文档下载收益归作者所有