Professional Documents
Culture Documents
tw
或來電(02)2705-5066
本試閱檔為五南所有。如欲購買此書,請至五南網站 www.wunan.com.tw
或來電(02)2705-5066
序
序
本書為大專院校的教科書籍而作,可以用於USB的通識教學,更適用於USB裝
置的韌體設計之課程,尤其適用於進階微控器技術或是進階電腦介面技術的課程。
本書分為二部分,第一部分介紹USB 2.0規範書,第二部分則引導讀者設計製
作USB裝置中最普遍的HID裝置。USB 2.0規範書中有關裝置的規範幾乎全部被本
書涵蓋,另外觸及HID 1.1規範書和HID用途表文件HUT 1.12。這些資料的整理與
介紹都著眼於裝置韌體上的應用;當然提供許多練習是教科書的必要條件。許多
微控器高手遇到USB裝置的韌體設計都會心寒三分,尤其以程式龐大和除錯艱難
最讓人卻步。本書提出一套系統化的設計流程,讓整個USB裝置設計與製作成為
反掌之易,這點已經在近期的數次USB技術培訓班獲得驗證。所以強調系統化設
計是本書的創舉和特色,希望為國家培植大量的USB裝置設計人才。
本書可以當作一學期的USB的通識教學材料,以教導前三章為主,和展示第
十章的雙工通信裝置作結。當然,一學期的USB裝置設計課程或是進階微控器與
電腦介面課程是最適用的,第7至10章提供四種實用裝置的自行設計練習,大量範
例和誘導式的實作練習應該是實作的好教材。如果時數不足,可以忽略第2.4至2.7
節,第三章全章,和第5.4和5.5節。第三章的內容只會被第八章和第十章的實作練
習使用到,必要時教師作補充說明即可。本書內容曾用於30小時的密集培訓班課
程,教材採用第一章,第2.1∼2.3節,第四章,第5.1∼5.4節,第六章,第七章,
最後加上展示第十章的雙工通信裝置。如果課程希望增加專題製作,第十章是必
要教材,可以由第10.9節衍生出一些專題題目。雖然本書的第二部分必須使用單一
種USB微控器來介紹系統化的設計技術(即松翰公司的SN8P系列),但是這不限
制本書的內容不適用於其他廠牌的USB微控器之教學。只要不是老舊8051架構的
USB微控器都能直接應用本書的內容,附錄A介紹Cypress公司的USB微控器就是
一個明證。本書另外備有適用松翰SN8P微控器和Cypress M8C微控器的二種實驗
板,相關販售商資訊可以在作者網頁取得。
第五級:USB 2.0規範書與HID報告描述元(第一和二章)
第四級:USB裝置韌體編撰能力(第六至九章)
第三級:HID裝置獨立設計與製作(第三章和第十章)
第二級:巨量型或同時型傳輸任一種裝置韌體設計
第一級:巨量型和同時型傳輸二種裝置韌體設計
受限於書籍市場規模,在台灣出一本優良的專業書籍之經濟誘因非常低。
所幸,承蒙松翰科技股份有限公司給予本書撰寫的計畫案,經過一年餘終於問
世。感謝我的碩士生魏愷小姐的幫忙,製作第十章的視窗式應用程式。過去三年
來連續不斷的開了15次給業界的USB培訓班,其中不得不佩服和感謝林町達先生
的招生能力。最興奮的莫過得知,學員學成不久就幫公司開出產品,例如精博、
美亞、太瀚等。培訓班學員的鞭策與鼓勵,讓我不斷的改進教材,形成本書的雛
型。另一方面,由於對未學好的學員之愧疚,讓我思索到增加實作份量和設計適
切的實作題目,一次又一次的驗證成效,才加入本書成為教材。學員中王百川先
生和葉秋城先生如影隨形,一再參加我不同內容的USB培訓班,最讓我動容。尤
其王先生還幫忙比較其他教師的USB培訓班,提供我改進意見。另一學員陳德宗
好學不倦,四處學習使用各種USB微控器,將我的教材發揮得淋漓盡緻。另外,
也要謝謝聯發科學員黃怡菁小姐,她因工作關係,不斷以電子郵件詢問一些有關
雙工通信裝置的設計困惑,在不勝其擾和她的認真好學精神下,促成我撰寫第十
章的念頭,內容當然要解決實際雙工通信介面的所有實際應用,才能減少日後的
電子郵件。每位作者都希望他的書籍能夠成為名山大業,這還需要讀者惠賜寶貴
的回饋意見。
林錫寬
2007年8月
目 錄
第一部分 → 此部分的三章都有章後選擇式的問題
第一章 → USB2.0描述元 003
1.1 →基本知識 004
1.2 →描述元架構 007
1.3 →標準描述元 012
1.4 →HID類別特定描述元 036
1.5 →HID用途表格 074
1.6 →工具:USBComp 095
1.7 →大量儲存類別規範 099
第二章 →USB2.0通信協定 117
2.1 →概 述 118
2.2 →封 包 124
2.3 →交 易 130
2.4 →傳 輸 139
2.5 →咨求函數 169
2.6 →USB匯流排列舉 189
2.7 →大量儲存類別的特定咨求 199
第三章 →主機端應用程式 203
3.1 →前 言 204
3.2 →實作見習:範例HidDevice.cpp 206
本試閱檔為五南所有。如欲購買此書,請至五南網站 www.wunan.com.tw
或來電(02)2705-5066
3.3 →主程式 216
3.4 →讀寫動作 221
3.5 →介面尋找與取得 226
3.6 →取得介面的操作把 240
3.7 →實作練習 249
3.8 →進階學習 262
第二部分
第四章 →SN8P組合語言 271
4.1 →組合語言語法 272
4.2 →基本運算程式 289
4.3 →中 斷 310
4.4 →輸出入暫存器 320
4.5 →韌體發展系統 326
4.6 →指令集 333
第五章 →USB韌體模組 335
5.1 →韌體架構 336
5.2 →USB韌體模組構想 338
5.3 →實際體驗 345
5.4 →USB韌體模組實現 350
5.5 →咨求函數副程式 389
第六章 →HID裝置 417
6.1 →電腦鍵盤 418
6.2 →多媒體鍵盤 433
6.3 →初始化程式 445
6.4 →主程式迴路 451
6.5 →懸置副程式 468
6.6 →中斷型輸入之程式模組 474
6.7 →實作練習 491
第七章 →設計練習:電腦滑鼠 499
7.1 →USB滑鼠的硬體 500
7.2 →系統化的韌體設計 508
7.3 →描述元 509
7.4 →USB韌體模組參數設定 517
7.5 →主程式檔mouse_main.asm 517
7.6 →滑鼠週邊功能檔mouse_task.asm 523
7.7 →測 試 531
第八章 →設計練習:消費者用途按鍵 535
8.1 →硬 體 536
8.2 →系統化的韌體設計 536
8.3 →描述元 538
8.4 →USB韌體模組參數設定 541
8.5 →主程式檔consumer_main.asm 542
8.6 →週邊功能檔consumer_task.asm 546
8.7 →測 試 549
第九章 →設計練習:鍵盤與滑鼠複合的裝置 557
9.1 →鍵盤與滑鼠複合裝置的硬體 558
9.2 →系統化的韌體設計 564
附錄
Cypress EnCoRe II晶片之比較 627
A.1 →M8C組合語言語法 628
A.2 →多媒體鍵盤 650
A.3 →指令集 686
習題解答 688
本試閱檔為五南所有。如欲購買此書,請至五南網站 www.wunan.com.tw
或來電(02)2705-5066
本試閱檔為五南所有。如欲購買此書,請至五南網站 www.wunan.com.tw
或來電(02)2705-5066
第一章
USB2.0描述元
本試閱檔為五南所有。如欲購買此書,請至五南網站 www.wunan.com.tw
或來電(02)2705-5066
1.1 基本知識
USB通訊協定中,主機與裝置間一個完整有意義的數據之通訊過程稱作
傳輸 (transfer)。USB通訊架構屬於多工系統,主機與多個裝置作數據傳輸採
分段輪流的多工架構。傳輸必須分成數段,每一段要一次做完才將通訊權分給
另外一個裝置,這種段落稱作交易 (transaction)。因此傳輸是由一個或數個交
易組成,用以傳遞一筆有意義的數據。一個交易含有多個半雙工通訊(即雙向
通訊,但是每次僅能一方為發訊者,另一方為收訊者),這種通訊的最小單
元就稱作封包 (packet)。例如,主機要讀取裝置的描述元,就先發送要執行讀
取的交易(一種SETUP交易),交易中第一個封包為SETUP封包(標示這是
SETUP交易),第二個才是命令數據性封包,第三個是裝置回給主機的確認
收到之承領封包;接著主機會再要求作數個輸入交易,請裝置將描述元資料傳
給主機,當然輸入交易也有三個不同的封包;傳輸的最後一個交易為交握交
易,用以確認傳輸的成功。
USB2.0規範書中規定低速和全速的匯流排速度是以1 ms產生一個USB訊
框 (frame),而高速匯流排則125 µs產生一個USB微訊框 (micro-frame)。一個
USB訊框會塞入數個交易,二個連續的交易可能會隸屬於不同的傳輸,不同的
傳輸也可能針對不同的裝置。交易和封包將在第二章作詳細的介紹。
控制型傳輸:
和狀態的通信,有需求時才執行的一種傳輸。裝置插入主機
後所作的匯流排列舉都是使用控制型傳輸。
中斷型傳輸:
更新的數據 (recurring data) 作傳輸。精確一點而言,即是在
每個有限的週期內 (bounded period) 作一次的小量數據發送或
接收。這段間隔時間內,數據可能更換了數次,也可能沒更
換,但是都只發送一次。
巨量型傳輸:
用匯流排的空閒時段,傳輸無急迫性,可以等待。例如,檔
案的傳輸。
同時型傳輸:
動型數據。這種傳輸沒有交握機制,一筆傳輸失敗時不重傳,
下一筆改傳最新的當時刻數據,所以數據流失無所謂(或不
重要),但是要保證收到的數據是當時刻的新數據。例如:
視訊和音訊,傳輸失敗就停格;如果要求每筆傳輸都正確無
誤,反而會造成失真。
主機和裝置的架構都分成三層如圖1.1(a)所示。主機和裝置的最低層各有一
主機 USB裝置 主機應用程式
Client SW 記憶體緩衝區
韌體程式
(Application SW)
USB Driver
通信數據流
USB System SW 管線
端點 USB
Host Controller
緩衝區 暫存器
Driver
Host USB Bus 端點
SIE SIE
Controller USB纜線 Interface
USB裝置介面
(a) (b)
圖1.1 USB通信系統:(a)通信層;(b)數據流邏輯圖
讓後續的通信數據流如同在一個邏輯管線間進行,不會流到不對應的記憶
體緩衝區。管線依傳輸種類分類,控制型管線 (control pipe) 用來作控制型
傳輸,而中斷型管線 (interrupt pipe)、巨量型管線 (bulk pipe)、同時型管線
(isochronous pipe) 分別作中斷型傳輸、巨量型傳輸、和同時型傳輸。控制型
管線 可以作輸出和輸入 雙向 的傳輸,但是 其他型管線 只能作 單向 的傳輸。例
如,中斷型管線又分中斷型輸入管線 (interrupt IN pipe) 和中斷型輸出管線
(interrupt OUT pipe)。在USB規範中所謂輸出入都是以主機為觀點,所以USB
裝置的輸入端點是要將數據輸入給主機。低速USB裝置只能作控制型傳輸和中
斷型傳輸,一般都擁有三個端點,端點0連接於一條控制型管線,所以又稱作
控制型端點﹔而端點1和2可以設定為連接於一條中斷型輸入或輸出管線,所以
稱作中斷型輸入端點或中斷型輸出端點。注意,任何USB裝置都必須具備一個
稱為「內定控制型端點」,而且其編號必須為端點0,這個端點內定要作匯流排
列舉。
USB2.0規範書定義一條管線只有一個端點,但是沒有明說一個端點只能
用於一條管線,也沒禁止一個端點用於數條管線。市面上某些USB裝置,將
同一個端點同時用於輸入管線和輸出管線,只要數據傳輸採用半雙工模式(雙向
通信,但是每次僅能一方為發訊者,另一方為收訊者),都可以運作正常。不
過,還是建議盡量一個端點只用於一條管線。
1.2 描述元架構
標準描述元
組態描述元 其他速度組態描述元
介面描述元 介面描述元
類別描述元 類別描述元
圖1.2 描述元架構圖
這些描述元中,裝置描述元、組態描述元、介面描述元、端點描述元、字
串描述元、和USB2.0規範書增加的裝置資格者描述元與其他速度組態描述元
都屬於標準描述元部份。而其他如HID類別描述元、報告描述元、和實體描述
元則屬於HID的類別特定描述元部份。標準描述元的格式在Universal Serial Bus
Specification文件(本書光碟片中usb_20.pdf檔)的第九章中定義,而HID類別
特定描述元的格式定義則在Device Class Definition for Human Interface Device文件
(本書光碟片中HID1_11.pdf檔)。有關USB的文件都可以在USB組織的網站
中下載,網址為www.usb.org。HID的資料在www.usb.org/developers/hidpage。
每個描述元都分為數個欄位 (fields),一個欄位的長度可以是一個位元組
至數個位元組。欄位的數據型態 (data type) 由欄位名稱最前頭的前置字母來表
示,例如bLength的數據型態為位元組 (byte)。USB用到的數據型態前置字母如
表1.1所列。
b bcd bm d i id w
位元組 位元碼數字 位元圖 雙字組 索引 識別碼 字組
(byte) (binary-coded (bitmap) (double (index) (ID) (word)
decimal) word)
表1.2 描述元型別的代碼與長度
裝置 其他速度
裝置 組態 字串 介面 端點 HID類別 報告 實體
資格者 組態
代碼 01h 02h 03h 04h 05h 06h 07h 21h 22h 23h
長度 12h 09h 不定 09h 07h 0Ah 09h 不定 不定 不定
在裝置描述元中需要宣告裝置的類別於欄位bDeviceClass,表1.3列出USB
規範書中目前所制定的類別。如果類別碼(bDeviceClass)為00h,則該裝置的類
別由介面描述元宣告,也就是該裝置屬於介面裝置,可能一個裝置有不同類別
的數個介面。HID裝置屬於介面裝置,所以它的bDeviceClass = 00h。已經制定
的介面類別碼則列於表1.4,bInterfaceClass為介面描述元中的一個欄位。第1.7
節要介紹的大量儲存類別,就是介面類別為Mass Storage。
表1.3 裝置類別碼
裝置類別 bDeviceClass
介面描述元來宣告 00h bDeviceSubClas=0
bDeviceProtocol=0
通信裝置 02h bDeviceSubClas=0
bDeviceProtocol=0
集線器(HUB) 09h bDeviceSubClas=0
bDeviceProtocol=0
錯誤診斷裝置 DCh bDeviceSubClas=1表可程式者
bDeviceProtocol=1表USB1.0相容
無線傳輸控制裝置 E0h bDeviceSubClas=1 表RF 控制器
bDeviceProtocol=1表藍芽
廠商自訂 FFh
表1.4 介面類別碼
介面類別 bInterfaceClass
Audio 01h
CDC Control 02h
HID 03h
Physical 05h
Image 06h
Printer 07h
Mass Storage 08h
HUB 09h
CDC-Data 0Ah
Chip/Smart Card 0Bh
Content Security 0Dh
Diagnostic Device DCh
Wireless Controller E0h
Application Specific FEh
Vendor-Specific FFh
1.3.1 裝置描述元
表1.5是裝置描述元的格式。裝置描述元的長度固定為18個位元組,型別
代碼為1。第三欄位的USB版本,必須以BCD方式表示,即一個位元組中最高
四位元和最低四位元的值僅能是0~9,此欄佔用二個位元組,最低的位元組為
次版本號碼,例如0110h為1.1版。裝置類別、次類別、和協定碼這三欄的值完
全由USB規範書指定,如表1.3所示。如果裝置類別欄設為0,則其類別將在介
面描述元中指定,如此可以讓每個介面定義成不同的類別,否則介面的類別統
一由裝置描述元指定。HID類別有自己的類別特定的描述元,因而允許一個
USB裝置中的某個介面定義為HID介面,而其他介面可以是別的類別,所以
HID裝置一律由介面描述元來宣告類別。注意,如果欄位bcdUSB填0200h,則
要多考慮裝置資格者描述元與其他速度組態描述元;高速裝置只能填0200h,
而全速或低速裝置可以填0110h或0200h。全速或低速裝置就算使用USB2.0版
本,也要將裝置資格者描述元與其他速度組態描述元留空白,但是在主機來咨
求這二個描述元時,要回以咨求失效。
表1.5 裝置描述元
長 度 範例值
欄位名 位 差 名 稱
(Bytes) (說明)
bLength 0 1 描述元長度 12h (固定值)
bDescriptorType 1 1 描述元型別 01h (固定值)
bcdUSB 2 2 USB版本 0110h (1.1版)
bDeviceClass 4 1 裝置類別 00h (HID之值)
bDeviceSubClass 5 1 裝置次類別 00h (HID之值)
bDeviceProtocol 6 1 裝置協定碼 00h (HID之值)
bMaxPacketSize 7 1 最大封包尺寸 08h
長 度 範例值
欄位名 位 差 名 稱
(Bytes) (說明)
idVendor 8 2 製造商識別碼 FFFFh(自訂)
idProduct 10 2 產品識別碼 0001h
bcdDevice 12 2 裝置版本 0100h (1.00版)
iManufacturer 14 1 製造商名稱索 04h
引 (字串描述元之第5位元組)
iProduct 15 1 產品名稱索引 0Eh
(字串描述元之第15位元組)
iSerialNumber 16 1 產品序號索引 30h
(字串描述元之第49位元組)
bNumConfigurations 17 1 組態個數 01h (1個組態)
裝置描述元中的最大封包尺寸欄僅用於描述裝置的內定控制管線,在這管
線上的裝置端點通稱為端點0 (endpoint 0)。至於其他的管線上的端點要用端點
描述元來交代屬性。最大封包尺寸的值對於全速裝置可以為8,16,32,或 64;
但是高速裝置的必須是64,也就是要有64個位元組的端點緩衝區;而低速裝置
的必須是8。表1.5的範例中,端點0的最大封包尺寸為8個位元組,也就是裝置
的端點0擁有8個位元組的緩衝記憶體來儲存要發送或接收到的數據。
製造商的識別碼必須向USB協會申請,否則自訂的會和其他廠商重複,但
是不影響裝置的使用。產品識別碼和裝置版本則由製造商自行設定。如果未具
有USB協會授與的製造商的識別碼,則需要使用FFFFh。
製造商名稱、產品名稱、產品序號是以字串方式來通知主機,在裝置描述
元中僅將該名稱在字串描述元中的位差以索引值方式列出,稱作位差索引宣告
法。若是索引值為0表示不提供該項名稱。表1.5範例中,製造商名稱的字串從
字串描述元第5+2位元組開始(前二個位元組分別為該字串的描述元長度和描
述元型別,請看字串描述元之第1.3節),產品名稱從第15+2位元組開始,產
1.3.2 字串描述元
表 1.6 是字串描述元的格式。字串描述元由許多小描述元組成,每個小
描述元仍以該小描述元長度和描述元型別起始,當然描述元型別皆為 3 。索
引位差為 0 之子描述元為 啟始子描述元 ,用於紀錄所使用到的語言之識別碼
(LANGID, language ID),它以陣列方式表示:wLANGID[0], wLANGID[1],
..., wLANGID[n],其中n+1為使用到的語言個數。其他子描述元才是真正字
串描述元。關於語言識別碼可以參考文件Language Identifiers(本書光碟片中
USB_LANGIDs.pdf檔)。下面列出英文和中文的所有次語言,僅供參考:
英 文 中 文
英 文 中 文
在其他子描述元中,字串直接在描述元長度和描述元型別之後,字串
必須以 Unicode UTF-16LE的編碼方式來紀錄。 Unicode碼有三種: UTF-8 ,
UTF-16,和UTF-32分別用8位元、16位元、和32位元來表示符號。UTF32將
所有符號都用四個位元組表示;而UTF16將常用的符號用二個位元組表示,
對罕用的符號則用雙16位元表示。USB規範書要求使用UTF-16格式,而且
儲存方式為little endian,即低位元組儲存於記憶位址低的空間。英文字母的
UTF-16碼正好是ASCII碼再加上一個空白位元組,即0000h~007Fh對應到
ASCII的00h~7Fh。許多USB晶片的組譯器會將英文字母轉成UTF-16碼。關
於Unicode碼,可以到網站www.unicode.org中點選[code charts]取得資料,例
如,英文為Basic Latin,而中文為CJK Unified Ideographs,中文注音符號為
Bopomofo。如果裝置使用中文的產品名稱,建議多加wLangID[1] = 0404h
(微軟的作業系統會自動辨識所用到的語言,所以可以省略此宣告);此外中
文的UTF-16碼需要自己查unicode-cjk.pdf來輸入對應碼,例如「滑鼠」的碼為
6ED1h和9F20h。
注意,在表1.6的範例中,位差4為紀錄製造商名稱的子描述元起始位置,
其正是在裝置描述元中宣告的製造商名稱之索引值。同理,位差14和位差48分
別為所宣告的產品名稱和產品序號之索引值。
長度 範例值
欄位名 位 差 名 稱
(Bytes) (說明)
bLength 0 1 語言陣列長度 04h
bDescriptorType 1 1 描述元型別 03h (固定值)
wLANGID[0] 2 2 語言識別碼陣列 0409h (英文)
… 4 … (其他使用的語言)
bLength 4 1 製造商名稱長度 0Ah
bDescriptorType 5 1 描述元型別 03h (固定值)
bString 6 8 製造商名稱 “ACME”
bLength 14 1 產品名稱長度 22h
bDescriptorType 15 1 描述元型別 03h (固定值)
bString 16 32 產品名稱 “Locator Keyboard”
bLength 48 1 產品序號長度 0Eh
bDescriptorType 19 1 描述元型別 03h (固定值)
bString 50 12 產品序號 “000000ABC123”
別的文件(不是USB2.0規範書)有提到產品序號字串只能使用BCD格式
的符號,即數字0~9和字母A~F;而且至少12個符號,以便主機據此產生一個
含idVender,idProduct,和這個字串的全域獨一識別碼(GUID, globally unique
identifier)。同樣產品的每個裝置之產品序號字串要不一樣,以方便主機識別
(請參考第1.7節)。
1.3.3 組態描述元
一個USB裝置的功能被使用之前,裝置要先被組織好(be configured)﹔正
確的說,應該是設定好組態。所謂組態就是一個或以上介面合成一個硬體裝置
的組織;而介面就是特定數據通信的單體,由端點來組成。主機會先向USB裝
置取得組態資料,然後下咨求函數(「咨求」之意為來函要求處理,請參考第
二章之定義)來設定組態(set configuration),也就是選擇一個組態描述元來組
織運作的硬體裝置。
每個USB裝置至少要有一個組態。無論USB裝置只有一個或超過一個以上
的組態,都需要用設定組態的咨求函數來選擇組態編號,如此才完成組態設定
(configured)。因此,可以將數種不同用途的韌體寫於一個USB裝置內,主機
可以利用不同的驅動程式來選用不一樣的組態,如此就可以達到一種USB裝置
晶片可以作不同用途的USB裝置。這個目的是要藉大量來達到生產晶片的經濟
規模。儘管如此,目前市面上還都是一個裝置只有一個組態。組態的下屬成員
是介面和端點,必要時再外加上類別資料。
每個組態可以擁有一個或以上的介面,而每個介面可以擁有一個或以上的
端點。介面其實是一組具有單一特性與功能的端點的集合。請特別注意,同一
個介面允許有不同的設定,稱作替換設定(alternate setting),其目的是要在其他
介面仍正常運作下允許改變一個介面的部分功能。驅動程式可以利用設定介面
的咨求函數來選擇介面的替換設定。
主機是利用讀取描述元的咨求函數來取得描述元資料。依據USB規範書,
當咨求函數要讀取組態描述元時,裝置必須將完整的組態資料集合(組態描述
元、介面描述元、類別描述元、和端點描述元的資料)都回傳給主機。因此這
些描述元的排列有一定的順序。
範例說明:
假設有一個組態擁有二個HID介面,而每一個介面都有二個端點,其中第一個
介面(介面編號InterfaceNumber = 00h)有二個替換設定(AlternateSetting
= 00h和AlternateSetting = 01h)。描述元的排列順序必須如下所示,其中每
個介面所屬的二個端點之先後順序不重要:
表1.7是組態描述元的格式。第三欄位紀錄組態資料集合總長,其含括該組
態轄下的所有介面描述元、類別描述元、端點描述元的長度﹔以表1.7中的範
例,總長為59 = 9 + (9 + 9 + 7) + (9 + 9 + 7),後二個括號內數值分別為二個介
面和其類別與端點之描述元長。第一個介面為鍵盤,第二個為滑鼠,所以這個
組態有二個介面,第四欄位的介面個數就須填02h。第五欄位為組態編號,必
需為正整數,例如01h,02h等﹔主機設定組態時,即依據這個編號來選擇要使
用的組態。第六欄位為組態名稱索引,如同裝置描述元中的製造商名稱索引,
用來宣告該名稱在字串描述元中的位差。
表1.7 組態描述元
長 度 範例值
欄位名 位 差 名 稱
(Bytes) (說明)
bLength 0 1 描述元長度 09h (固定值)
bDescriptorType 1 1 描述元型別 02h (固定值)
bTotalLength 2 2 組態資料集合總長 003bh (59位元組)
bNumInterfaces 4 1 介面個數 02h (2個介面)
bConfigurationValue 5 1 組態編號 01h (no.=1)
iConfiguration 6 1 組態名稱索引 00h (無名稱)
bmAttributes 7 1 組態屬性 10100000b
bMaxPower 8 1 最大消耗電流 32h (=100mA)
(單位2mA)
第七欄位的組態屬性是以位元圖型態表示:
D7 D6 D5 D4 D3 D2 D1 D0
bmAttributes
1 自供電源 遠端喚醒 0 0 0 0 0
除了位元D5和D6外,其餘位元皆為固定值。D6 = 1表示裝置具備自供電源,
此時仍可同時使用匯流排提供的電源。D6 = 0則不具備自供電源,完全由匯流
排提供的電源。D5 = 1為支援遠端喚醒功能,D5 = 0則不支援此項功能。遠端
喚醒功能是裝置有權將休眠中的主機叫醒。具有遠端喚醒功能的裝置允許主機
來禁能和致能這項功能;但是自供電源不允許主機作切換,只能裝置自行作切
換。
第八欄位用於宣告匯流排提供的電源之最大功率,由於電壓為固定5 V,所
以功率就直接用電流量來表示,此處所用單位為2 mA,因此最大電流為255 ×
2 = 510 mA。一般裝置都建議使用100 mA或以下的匯流排電流,因為在匯流排
1.3.4 介面描述元
介面描述元主要提供該介面使用的端點個數 (bNumEndpoints) 和所屬的類
別 (bInterfaceClass)﹔另外為了不同設定的區別,要有介面編號和替換設定。介
面編號和替換設定的值都是從零起算:第一個介面為00h,第二個介面為01h﹔
每個介面中的第一個替換設定為00h,第二個為01h。第一個替換設定為裝置重
置後的內定設定。另外,可以賦予介面名稱,最後一個欄位以索引值來宣告該
名稱在字串描述元的位差。請參考表1.8。
端點個數為不含內定的控制型端點0的其他端點之數目,如果此介面僅使
用端點0,則此欄之值為0,後面也不需要端點描述元。端點0已經在裝置描述
元中描述了,它是公用的端點。
HID類別的碼為3。HID有一個次類別:0為無次類別,1為boot次類別。HID
有二種不同的協定:鍵盤(協定碼為1),滑鼠(協定碼為2)。介面協定是為了
支援boot介面,如果次類別不是boot,則介面協定碼需填為0。所謂boot介面的
裝置是這個介面在主機作業系統軟體未安裝前,可以由主機的韌體(例如BIOS)
來使用,當然boot介面的報告描述元要符合BIOS的要求,才能正常運作。第
1.4.9節會以電腦滑鼠與鍵盤為例來闡述boot介面協定與HID介面協定之區別。
USB2.0規範書的第5.7.3節規定,高速裝置中每個介面的內定設定(即替
換設定碼為0)所轄的中斷型端點單次交易傳輸量不可以大於64個位元組,所以
在該端點的端點描述元之最大封包尺寸值必須小於或等於64。其他的替換設定
5D97
USB2.0與HID裝置之系統化
設計-SN8P系列
作 者 ─ 林錫寬(144.2)
發 行 人 ─ 楊榮川
總 編 輯 ─ 龐君豪
主 編 ─ 穆文娟
責任編輯 ─ 蔡曉雯
文字編輯 ─ 陳書彥
封面設計 ─ 簡愷立
出 版 者 ─ 五南圖書出版股份有限公司
地 址:106台 北 市 大 安 區 和 平 東 路 二 段 3 3 9 號 4 樓
電 話:(02)2705-5066 傳 真:(02)2706-6100
網 址:http://www.wunan.com.tw
電子郵件:wunan@wunan.com.tw
劃撥帳號:0 1 0 6 8 9 5 3
戶 名:五南圖書出版股份有限公司
台中市駐區辦公室/台中市中區中山路6號
電 話:(04)2223-0891 傳 真:(04)2223-3549
高雄市駐區辦公室/高雄市新興區中山一路290號
電 話:(07)2358-702 傳 真:(07)2350-236
法律顧問 得力商務律師事務所 張澤平律師
出版日期 2 0 0 7 年 9 月 初 版 一 刷
定 價 新 臺 幣 7 8 0 元
※版權所有.欲利用本書內容,必須徵求本公司同意※
本試閱檔為五南所有。如欲購買此書,請至五南網站 www.wunan.com.tw
或來電(02)2705-5066