圖書簡介
USB是外圍設備與計算機進行連線的快速且靈棕再判活的新式接口。本書介紹最新的USB 2.0標準,從USB的基礎開始介紹,包括實際的硬體與軟體設計,並且使用彙編語言、Visual C++、Visual Basic等來示範程式代碼的編寫。另外還有各種USB晶片介紹,幫助讀者快速設計自己的USB設備。
本書共15章和1個附錄,朵少旋內容包括:USB簡介、USB傳輸、檢測設備、控制傳輸、USB控制器晶片、Cypress enCoRe控制器晶片、驅動程式、設備類別、設備測試、電源管理與信號編碼、電路接口、集線器、HID設備、HID程式設計、HID設備開發實例以及USB參考資料等。
本書適合從事USB硬體、軟體設計的程式設計師和其他相關少芝協旬技術人員使用或參考。
目錄
第1章USB簡介 1
1.1USB的發展史 2
1.1.1規範的版本 3
1.1.2USB2.0 4
1.1.3IEEE-1394 4
1.2USB的優點 4
1.2.1容易使用 4
1.2.2傳輸速度快 5
1.2.3低價位 6
1.2.4低功耗 6
1.2.5可靠性 6
1.2.6作業系統的支持 7
1.2.7外圍設備的支持 7
1.2.8靈活性 7
1.2.9USB實施者論壇 8
1.3USB的缺點 8
1.3.1缺乏對舊硬體的支持 8
1.3.2缺乏點對點的通信能力 9
1.3.3速度的限制 9
1.3.4距離的限制宙滲院 9
1.3.5硬體的錯誤或故障 9
1.3.6協定的複雜性 9
1.3.7費用 9
1.4與其他接口的比較 10
1.5PC的軟硬體要求 11
1.5.1主機控制器 11
1.5.2作業系統 11
1.5.3組件 12
1.5.4匯流排拓撲 13
1.5.5連線連線埠 15
1.6主機的責任 15
1.7外圍設備的責任 16
1.8傳輸速度 19
1.9開發流程 20
1.9.1所需的鏈路元件 20
1.9.2開發工具 20
1.9.3開發步驟 21
第2章USB傳輸 23
2.1傳輸的基礎 23
2.1.1配置通信 23
2.1.2應用程式通信 23
2.1.3管理匯流排的數據 24
2.1.4主機速度和匯流排速度 25
2.2傳輸要素 26
2.2.1設備的端點 26
2.2.2管道 27
2.2.3傳輸類型 27
2.2.4訊息管道與流管道 29
2.2.5傳輸的初始化 29
2.3事務 30
2.3.1事務的步驟 31
2.3.2信息包的順序 33
2.3.3定時約束和保障 34
2.3.4分割事務 34
2.4聯絡信號 36
2.4.1ACK 37
2.4.2NAK 37
2.4.3STALL 37
2.4.4NYET 38
2.4.5ERR 38
2.4.6無回響 38
2.4.7控制傳輸的狀態 39
2.5錯誤的檢驗 39
2.5.1錯誤校驗位 39
2.5.2數據交替位 40
2.6控制傳輸 41
2.6.1結構 41
2.6.2信息包的大小 44
2.6.3傳輸速度 44
2.6.4檢測錯擊院誤 45
2.7批量傳輸 46
2.7.1結構 46
2.7.2信息包大小 47
2.7.3傳輸速度 47
2.7.4檢測錯誤 47
2.8中斷傳輸 47
2.8.1結構 48
2.8.2信息包大小 48
2.8.3傳輸速度 48
2.8.4檢測錯誤 49
2.9等時傳輸 49
2.9.1結構 49
2.9.2信息包大小 51
2.9.3傳輸速度 51
2.9.4檢測錯誤 51
2.10時間關鍵的傳輸 51
2.10.1匯流排的頻寬 51
2.10.2設備的能判束只訂力 52
2.10.3主機軟體的能力 52
2.10.4Windows的延遲 52
第3章檢測設備 54
3.1檢測設備的過程 54
3.1.1檢測的步驟 55
3.1.2檢測集線器 58
3.1.3移除設備 58
3.2描述符 59
3.2.1類型 59
3.2.2設備描述符 60
3.2.3Device_Qualifier描述符 62
3.2.4配置描述符 64
3.2.5Other_Speed_Configuration
描述符 65
3.2.6接口描述符 66
3.2.7端點描述符 68
3.2.8字元串描述符 70
3.3USB2.0兼容設備的描述符 73
第4章控制傳輸 75
4.1設定階段 75
4.1.1令牌信息包 76
4.1.2數據信息包 77
4.1.3聯絡信息包 79
4.2數據階段 80
4.2.1令牌信息包 81
4.2.2數據信息包 81
4.2.3聯絡信息包 81
4.3狀態階段 81
4.3.1令牌熱拳採信息包 82
4.3.2數據信息包 82
4.3.3聯絡信息包 82
4.4檢測錯誤 83
4.5請求 83
4.5.1Clear_Feature 84
4.5.2Get_Configuration 85
4.5.3Get_Descriptor 85
4.5.4Get_Interface 86
4.5.5Get_Status 87
4.5.6Set_Address 88
4.5.7Set_Configuration 88
4.5.8Set_Descriptor 89
4.5.9Set_Feature 89
4.5.10Set_Interface 90
4.5.11Synch_Frame 91
4.5.12類別特定的請求 91
4.5.13廠商特定的請求 92
第5章USB控制器晶片 93
5.1USB控制器的組成 93
5.1.1USB連線連線埠 93
5.1.3CPU 94
5.1.4程式記憶體 94
5.1.5數據存儲器 95
5.1.6暫存器 95
5.1.7其他接口 95
5.1.8其他特性 96
5.2USB控制器晶片結構 96
5.2.1專為USB設計的晶片 96
5.2.2與現有的晶片兼容 98
5.2.3需要外部微處理器接口
的晶片 99
5.2.4晶片的檔案 102
5.2.5固件示例程式 102
5.2.6驅動程式 103
5.2.7調試工具 103
5.2.8開發計畫的考慮 104
5.3CypressenCoRe 105
5.3.1CPU結構 105
5.3.2USB控制器 106
5.4CypressEZ-USB 106
5.4.1CPU結構 107
5.4.2USB控制器 109
5.5MicrochipPIC16C7x5 109
5.5.1結構 109
5.5.2USB控制器 111
5.6NetchipNET2888 111
5.6.1結構 111
5.6.2USB控制器 112
5.7NationalSemiconductorUSBN9603 113
5.7.1結構 113
5.7.2USB控制器 114
5.8PhilipsSemiconductor
PDIUSBD11/12 114
5.8.1結構 115
5.8.2USB控制器 115
第6章CypressenCoRe
控制器晶片 116
6.1選擇適合的晶片 116
6.2彙編語言編譯器 116
6.2.1彙編程式的基礎 118
6.2.2彙編語言碼 119
6.2.3彙編語言編譯器的用法 120
6.3C編譯器 122
6.3.1C語言的優點 122
6.3.2C編譯器的用法 123
6.4晶片的結構 123
6.4.1特性和限制 123
6.4.2晶片內部 123
6.4.3記憶體 124
6.4.4程式堆疊指針 127
6.4.5數據堆疊指針 127
6.5USB通信 127
6.5.1設備地址 129
6.5.2模式 129
6.5.3端點狀態及控制 131
6.5.4USB狀態及控制 131
6.6其他I/O 133
6.6.1一般用途的I/O 133
6.6.2內部電路 133
6.6.3中斷 135
6.6.4SPI連線連線埠 136
6.7定時器的功能 138
6.7.1執行定時工作 138
6.7.2測量時距 139
6.8中斷的處理 140
6.8.1中斷服務例程 140
6.8.2GPIO中斷 141
6.8.3USB端點中斷 142
6.8.4定時器中斷 142
6.8.5中斷狀態 143
6.9CPU的狀態、控制及脈衝 144
6.9.1暫停CPU 144
6.9.2重置 144
6.9.3選擇和控制脈衝 146
6.9.4電源的管理 146
6.10硬體的工作 146
6.11固件的工作 147
6.11.1端點0中斷 147
6.11.2傳送數據給主機 149
6.11.3從主機接收數據 151
6.11.4處理中斷傳輸 153
6.11.5其他的回響 153
6.12.1平台板 154
6.12.2監視/調試器 155
第7章驅動程式 157
7.2設備驅動程式的來源 158
7.2.1標準設備類型 158
7.2.2客戶化設備 159
7.3設備驅動程式的執行模式 159
7.4Win32驅動程式模型 159
7.5分層的驅動程式 161
7.5.1USB驅動程式層 161
7.5.2函式驅動程式 161
7.6通信的流程 163
7.6.1用戶的角色 163
7.6.2應用程式的角色 163
7.6.4集線器驅動程式的角色 166
7.6.5匯流排類別驅動程式的角色 166
7.6.6主機控制器驅動程式
的角色 167
7.6.7設備的角色 167
7.6.8回響 167
7.6.9通信的終結 168
7.7驅動程式的類型 168
7.7.1Windows提供的驅動程式 168
7.7.2廠商提供的驅動程式 168
7.8編寫客戶化的驅動程式 168
7.8.1工具軟體 169
7.8.2WinRTforUSB 169
7.8.3WinDriverUSB 171
7.8.4提供函式館的工具軟體 172
7.9Windows如何選擇驅動程式 173
7.9.1.inf檔案 173
7.9.2註冊表 174
7.9.3檢測特定的設備 175
7.9.4檢測通用的設備 176
7.10.inf檔案簡介 176
7.10.1語法 178
7.10.2Version區段 179
7.10.3ClassInstall區段 179
7.10.4Manufacturer區段 180
7.10.5DestinationDirs區段 180
7.10.6Strings區段 182
7.10.7HID的通用.inf檔案 182
7.10.8建立.inf檔案的工具 182
7.10.9使用.inf檔案的技巧 183
第8章設備類別 185
8.1類別 185
8.1.1類別規範 185
8.1.2類別的定義 186
8.2標準類型的設備 188
8.2.1鍵盤、滑鼠和遊戲桿 188
8.2.2大容量存儲設備 188
8.2.3印表機 192
8.2.4數位相機和掃瞄器 193
8.2.5音頻 195
8.3非標準類型的設備 197
8.3.1以中等速度傳輸數據
的設備 197
8.3.2更新RS-232設備 197
8.3.3POS設備 199
8.3.4取代非標準並行連線埠設備 199
8.3.5PC到PC的連線 200
8.3.6無線連線 200
第9章設備測試 202
9.1USB測試工具 202
9.1.1測試 203
9.1.2HIDView 207
9.2測試儀器 208
9.2.2USBExpert的硬體 209
9.2.3USBExpert的軟體 209
9.2.4CATCTrafficGenerator 211
9.2.5Root1測試適配器 212
9.3測試和標記 212
9.3.1USB實施者論壇的
合格計畫 213
9.3.2USB標誌 214
9.3.3Windows硬體品質
實驗室測試 214
9.3.4驅動程式簽名 214
10.1電源的管理 216
10.1.1電壓 216
10.1.2可以使用匯流排電源
的設備 216
10.1.3電源要求 217
10.1.4通知主機 218
10.2集線器電源 218
10.2.1電的來源 219
10.2.2過流保護 221
10.2.3電源開關 222
10.3節省電能 222
10.3.1全局掛起和選擇掛起 222
10.3.2掛起設備的限制 222
10.3.3恢復通信 223
10.4低速和中速的匯流排狀態 223
10.4.1Differential1和
Differential0狀態 224
10.4.2Single-ended0狀態 225
10.4.3Single-ended1狀態 225
10.4.4DataJ和DataK狀態 225
10.4.5閒置狀態 225
10.4.6恢復狀態 225
10.4.7信息包開始 225
10.4.8信息包結束 225
10.4.9未連線狀態 226
10.4.10連線狀態 226
10.4.11重置狀態 226
10.5高速的匯流排狀態 226
10.5.1高速Differential1和
Differential0狀態 227
10.5.2高速DataJ和DataK
狀態 228
10.5.3ChirpJ和ChirpK 228
10.5.4高速Squelch 228
10.5.5高速閒置 228
10.5.6高速信息包開始 228
10.5.7高速信息包結束 228
10.5.8高速未連線狀態 229
10.6數據編碼 229
10.6.1維持同步 229
10.6.2位填充 230
10.6.3SYNC欄位 230
10.6.4信息包結尾 231
10.6.5時序正確性 231
10.7信息包格式 232
10.7.1SYNC欄位 232
10.7.2PID欄位 232
10.7.3地址欄位 233
10.7.4端點欄位 233
10.7.5幀號碼欄位 233
10.7.6數據欄位 233
10.7.7CRC欄位 234
10.7.8信息包間的延遲 234
10.8測試模式 234
第11章電路接口 237
11.1接收器與信號 237
11.2低速和中速接收器 238
11.3高速接收器 240
11.3.1電路 240
11.3.2轉換速度 241
11.3.3檢測高速設備的移除 242
11.3.4高速的掛起和恢復 242
11.4信號電壓 243
11.4.1低速和中速 243
11.4.2高速 243
11.5電纜 246
11.5.1連線器 248
11.5.2可拆分的與捕獲性
的電纜 249
11.5.3電纜長度 250
11.6信號的品質 250
11.6.1噪聲 250
11.6.2平衡線 250
11.6.3雙絞線 251
11.6.4邊緣速率 251
第12章集線器 252
12.1集線器的基礎 252
12.1.1避免設備進入掛起狀態 253
12.1.2可串聯的集線器數目 253
12.2集線器中繼器 254
12.2.1低速和中速的中繼器 254
12.2.2高速的中繼器 254
12.3事務轉換器 255
12.4集線器控制器 256
12.5速度 257
12.6集線器類別 257
12.6.1標準描述符 258
12.6.2集線器描述符 260
12.6.3標準請求 261
12.6.4集線器類別請求 262
12.6.5連線連線埠指示器 265
第13章HID設備 266
13.1HID簡介 266
13.1.1硬體要求 267
13.1.2固件要求 268
13.2HID的描述符 269
13.2.1描述符的內容 272
13.2.2HID類別描述符 272
13.2.3報表描述符 274
13.3HID特定請求 278
13.3.1Get_Report 279
13.3.2Set_Report 279
13.3.3Get_Idle 279
13.3.4Set_Idle 280
13.3.5Get_Protocol 281
13.3.6Set_Protocol 281
13.4傳輸數據 281
13.4.1傳送數據給主機 282
13.4.2從主機接收數據 283
13.5報表的結構 285
13.5.1HIDDescriptorTool 286
13.5.2短項目 287
13.5.3長項目 287
13.6Main項目類型 288
13.6.1Input、Output和Feature
項目 288
13.6.2Collection與EndCollection
標記 291
13.7Global項目類型 291
13.7.1識別報表 292
13.7.2數據的使用 293
13.7.3轉換原始數據 294
13.7.4數據的大小與格式 296
13.7.5Global項目的儲存
與恢復 296
13.8Local項目類型 296
13.9填充 298
13.10實體描述符 298
第14章HID程式設計 300
14.1主機的通信 300
14.1.1說明檔案 301
14.1.2HID函式 301
14.1.3DirectX 302
14.2.1使用VisualC++ 303
14.2.2使用VisualBasic 304
14.3取得HID類別的GUID 305
14.3.1使用VisualC++ 306
14.3.2使用VisualBasic 306
14.4取得HID信息的結構數組 307
14.4.1使用VisualC++ 307
14.4.2使用VisualBasic 307
14.4.3詳解 307
14.5識別HID接口 308
14.5.1使用VisualC++ 308
14.5.2使用VisualBasic 308
14.5.3詳解 309
14.6取得設備的路徑 309
14.6.1使用VisualC++ 310
14.6.2使用VisualBasic 311
14.7取得設備的代號 312
14.7.1使用VisualC++ 312
14.7.2使用VisualBasic 313
14.8取得廠商與產品ID 314
14.8.1使用VisualC++ 314
14.8.2使用VisualBasic 314
14.8.3詳解 315
14.9取得包含設備能力的緩
沖區指針 315
14.9.1使用VisualC++ 315
14.9.2使用VisualBasic 315
14.9.3詳解 316
14.10取得設備的能力 316
14.10.1使用VisualC++ 316
14.10.2使用VisualBasic 317
14.10.3詳解 317
14.11取得數值的能力 317
14.12傳送輸出報表給設備 318
14.12.1使用VisualC++ 318
14.12.2使用VisualBasic 318
14.12.3詳解 319
14.13從設備讀取輸入報表 319
14.13.1使用VisualC++ 320
14.13.2使用VisualBasic 320
14.13.3詳解 321
14.14使用重疊ReadFile讀取報表 321
14.14.1使用VisualC++ 322
14.14.2使用VisualBasic 323
14.15使用多執行緒的ReadFile
讀取報表 324
14.15.1使用VisualC++ 324
14.15.2使用VisualBasic 326
14.16傳送特徵報表給設備 326
14.16.1使用VisualC++ 326
14.16.2使用VisualBasic 326
14.17從設備讀取特徵報表 327
14.17.1使用VisualC++ 327
14.17.2使用VisualBasic 327
14.18關閉通信 327
14.18.1使用VisualC++ 328
14.18.2使用VisualBasic 328
第15章HID設備開發實例 330
15.1HID設備開發綜述 330
15.2HID溫度計開發示例 333
15.3用C語言來設計固件 400
附錄USB參考資料 430
2.3.2信息包的順序 33
2.3.3定時約束和保障 34
2.3.4分割事務 34
2.4聯絡信號 36
2.4.1ACK 37
2.4.2NAK 37
2.4.3STALL 37
2.4.4NYET 38
2.4.5ERR 38
2.4.6無回響 38
2.4.7控制傳輸的狀態 39
2.5錯誤的檢驗 39
2.5.1錯誤校驗位 39
2.5.2數據交替位 40
2.6控制傳輸 41
2.6.1結構 41
2.6.2信息包的大小 44
2.6.3傳輸速度 44
2.6.4檢測錯誤 45
2.7批量傳輸 46
2.7.1結構 46
2.7.2信息包大小 47
2.7.3傳輸速度 47
2.7.4檢測錯誤 47
2.8中斷傳輸 47
2.8.1結構 48
2.8.2信息包大小 48
2.8.3傳輸速度 48
2.8.4檢測錯誤 49
2.9等時傳輸 49
2.9.1結構 49
2.9.2信息包大小 51
2.9.3傳輸速度 51
2.9.4檢測錯誤 51
2.10時間關鍵的傳輸 51
2.10.1匯流排的頻寬 51
2.10.2設備的能力 52
2.10.3主機軟體的能力 52
2.10.4Windows的延遲 52
第3章檢測設備 54
3.1檢測設備的過程 54
3.1.1檢測的步驟 55
3.1.2檢測集線器 58
3.1.3移除設備 58
3.2描述符 59
3.2.1類型 59
3.2.2設備描述符 60
3.2.3Device_Qualifier描述符 62
3.2.4配置描述符 64
3.2.5Other_Speed_Configuration
描述符 65
3.2.6接口描述符 66
3.2.7端點描述符 68
3.2.8字元串描述符 70
3.3USB2.0兼容設備的描述符 73
第4章控制傳輸 75
4.1設定階段 75
4.1.1令牌信息包 76
4.1.2數據信息包 77
4.1.3聯絡信息包 79
4.2數據階段 80
4.2.1令牌信息包 81
4.2.2數據信息包 81
4.2.3聯絡信息包 81
4.3狀態階段 81
4.3.1令牌信息包 82
4.3.2數據信息包 82
4.3.3聯絡信息包 82
4.4檢測錯誤 83
4.5請求 83
4.5.1Clear_Feature 84
4.5.2Get_Configuration 85
4.5.3Get_Descriptor 85
4.5.4Get_Interface 86
4.5.5Get_Status 87
4.5.6Set_Address 88
4.5.7Set_Configuration 88
4.5.8Set_Descriptor 89
4.5.9Set_Feature 89
4.5.10Set_Interface 90
4.5.11Synch_Frame 91
4.5.12類別特定的請求 91
4.5.13廠商特定的請求 92
第5章USB控制器晶片 93
5.1USB控制器的組成 93
5.1.1USB連線連線埠 93
5.1.3CPU 94
5.1.4程式記憶體 94
5.1.5數據存儲器 95
5.1.6暫存器 95
5.1.7其他接口 95
5.1.8其他特性 96
5.2USB控制器晶片結構 96
5.2.1專為USB設計的晶片 96
5.2.2與現有的晶片兼容 98
5.2.3需要外部微處理器接口
的晶片 99
5.2.4晶片的檔案 102
5.2.5固件示例程式 102
5.2.6驅動程式 103
5.2.7調試工具 103
5.2.8開發計畫的考慮 104
5.3CypressenCoRe 105
5.3.1CPU結構 105
5.3.2USB控制器 106
5.4CypressEZ-USB 106
5.4.1CPU結構 107
5.4.2USB控制器 109
5.5MicrochipPIC16C7x5 109
5.5.1結構 109
5.5.2USB控制器 111
5.6NetchipNET2888 111
5.6.1結構 111
5.6.2USB控制器 112
5.7NationalSemiconductorUSBN9603 113
5.7.1結構 113
5.7.2USB控制器 114
5.8PhilipsSemiconductor
PDIUSBD11/12 114
5.8.1結構 115
5.8.2USB控制器 115
第6章CypressenCoRe
控制器晶片 116
6.1選擇適合的晶片 116
6.2彙編語言編譯器 116
6.2.1彙編程式的基礎 118
6.2.2彙編語言碼 119
6.2.3彙編語言編譯器的用法 120
6.3C編譯器 122
7.8.3WinDriverUSB 171
7.8.4提供函式館的工具軟體 172
7.9Windows如何選擇驅動程式 173
7.9.1.inf檔案 173
7.9.2註冊表 174
7.9.3檢測特定的設備 175
7.9.4檢測通用的設備 176
7.10.inf檔案簡介 176
7.10.1語法 178
7.10.2Version區段 179
7.10.3ClassInstall區段 179
7.10.4Manufacturer區段 180
7.10.5DestinationDirs區段 180
7.10.6Strings區段 182
7.10.7HID的通用.inf檔案 182
7.10.8建立.inf檔案的工具 182
7.10.9使用.inf檔案的技巧 183
第8章設備類別 185
8.1類別 185
8.1.1類別規範 185
8.1.2類別的定義 186
8.2標準類型的設備 188
8.2.1鍵盤、滑鼠和遊戲桿 188
8.2.2大容量存儲設備 188
8.2.3印表機 192
8.2.4數位相機和掃瞄器 193
8.2.5音頻 195
8.3非標準類型的設備 197
8.3.1以中等速度傳輸數據
的設備 197
8.3.2更新RS-232設備 197
8.3.3POS設備 199
8.3.4取代非標準並行連線埠設備 199
8.3.5PC到PC的連線 200
8.3.6無線連線 200
第9章設備測試 202
9.1USB測試工具 202
9.1.1測試 203
9.1.2HIDView 207
9.2測試儀器 208
9.2.2USBExpert的硬體 209
9.2.3USBExpert的軟體 209
9.2.4CATCTrafficGenerator 211
9.2.5Root1測試適配器 212
9.3測試和標記 212
9.3.1USB實施者論壇的
合格計畫 213
9.3.2USB標誌 214
9.3.3Windows硬體品質
實驗室測試 214
9.3.4驅動程式簽名 214
10.1電源的管理 216
10.1.1電壓 216
10.1.2可以使用匯流排電源
的設備 216
10.1.3電源要求 217
10.1.4通知主機 218
10.2集線器電源 218
10.2.1電的來源 219
10.2.2過流保護 221
10.2.3電源開關 222
10.3節省電能 222
10.3.1全局掛起和選擇掛起 222
10.3.2掛起設備的限制 222
10.3.3恢復通信 223
10.4低速和中速的匯流排狀態 223
10.4.1Differential1和
Differential0狀態 224
10.4.2Single-ended0狀態 225
10.4.3Single-ended1狀態 225
10.4.4DataJ和DataK狀態 225
10.4.5閒置狀態 225
10.4.6恢復狀態 225
10.4.7信息包開始 225
10.4.8信息包結束 225
10.4.9未連線狀態 226
10.4.10連線狀態 226
10.4.11重置狀態 226
10.5高速的匯流排狀態 226
10.5.1高速Differential1和
Differential0狀態 227
10.5.2高速DataJ和DataK
狀態 228
10.5.3ChirpJ和ChirpK 228
10.5.4高速Squelch 228
10.5.5高速閒置 228
10.5.6高速信息包開始 228
10.5.7高速信息包結束 228
10.5.8高速未連線狀態 229
10.6數據編碼 229
10.6.1維持同步 229
10.6.2位填充 230
10.6.3SYNC欄位 230
10.6.4信息包結尾 231
10.6.5時序正確性 231
10.7信息包格式 232
10.7.1SYNC欄位 232
10.7.2PID欄位 232
10.7.3地址欄位 233
10.7.4端點欄位 233
10.7.5幀號碼欄位 233
10.7.6數據欄位 233
10.7.7CRC欄位 234
10.7.8信息包間的延遲 234
10.8測試模式 234
第11章電路接口 237
11.1接收器與信號 237
11.2低速和中速接收器 238
11.3高速接收器 240
11.3.1電路 240
11.3.2轉換速度 241
11.3.3檢測高速設備的移除 242
11.3.4高速的掛起和恢復 242
11.4信號電壓 243
11.4.1低速和中速 243
11.4.2高速 243
11.5電纜 246
11.5.1連線器 248
11.5.2可拆分的與捕獲性
的電纜 249
11.5.3電纜長度 250
11.6信號的品質 250
11.6.1噪聲 250
11.6.2平衡線 250
11.6.3雙絞線 251
11.6.4邊緣速率 251
第12章集線器 252
12.1集線器的基礎 252
12.1.1避免設備進入掛起狀態 253
12.1.2可串聯的集線器數目 253
12.2集線器中繼器 254
12.2.1低速和中速的中繼器 254
12.2.2高速的中繼器 254
12.3事務轉換器 255
12.4集線器控制器 256
12.5速度 257
12.6集線器類別 257
12.6.1標準描述符 258
12.6.2集線器描述符 260
12.6.3標準請求 261
12.6.4集線器類別請求 262
12.6.5連線連線埠指示器 265
第13章HID設備 266
13.1HID簡介 266
13.1.1硬體要求 267
13.1.2固件要求 268
13.2HID的描述符 269
13.2.1描述符的內容 272
13.2.2HID類別描述符 272
13.2.3報表描述符 274
13.3HID特定請求 278
13.3.1Get_Report 279
13.3.2Set_Report 279
13.3.3Get_Idle 279
13.3.4Set_Idle 280
13.3.5Get_Protocol 281
13.3.6Set_Protocol 281
13.4傳輸數據 281
13.4.1傳送數據給主機 282
13.4.2從主機接收數據 283
13.5報表的結構 285
13.5.1HIDDescriptorTool 286
13.5.2短項目 287
13.5.3長項目 287
13.6Main項目類型 288
13.6.1Input、Output和Feature
項目 288
13.6.2Collection與EndCollection
標記 291
13.7Global項目類型 291
13.7.1識別報表 292
13.7.2數據的使用 293
13.7.3轉換原始數據 294
13.7.4數據的大小與格式 296
13.7.5Global項目的儲存
與恢復 296
13.8Local項目類型 296
13.9填充 298
13.10實體描述符 298
第14章HID程式設計 300
14.1主機的通信 300
14.1.1說明檔案 301
14.1.2HID函式 301
14.1.3DirectX 302
14.2.1使用VisualC++ 303
14.2.2使用VisualBasic 304
14.3取得HID類別的GUID 305
14.3.1使用VisualC++ 306
14.3.2使用VisualBasic 306
14.4取得HID信息的結構數組 307
14.4.1使用VisualC++ 307
14.4.2使用VisualBasic 307
14.4.3詳解 307
14.5識別HID接口 308
14.5.1使用VisualC++ 308
14.5.2使用VisualBasic 308
14.5.3詳解 309
14.6取得設備的路徑 309
14.6.1使用VisualC++ 310
14.6.2使用VisualBasic 311
14.7取得設備的代號 312
14.7.1使用VisualC++ 312
14.7.2使用VisualBasic 313
14.8取得廠商與產品ID 314
14.8.1使用VisualC++ 314
14.8.2使用VisualBasic 314
14.8.3詳解 315
14.9取得包含設備能力的緩
沖區指針 315
14.9.1使用VisualC++ 315
14.9.2使用VisualBasic 315
14.9.3詳解 316
14.10取得設備的能力 316
14.10.1使用VisualC++ 316
14.10.2使用VisualBasic 317
14.10.3詳解 317
14.11取得數值的能力 317
14.12傳送輸出報表給設備 318
14.12.1使用VisualC++ 318
14.12.2使用VisualBasic 318
14.12.3詳解 319
14.13從設備讀取輸入報表 319
14.13.1使用VisualC++ 320
14.13.2使用VisualBasic 320
14.13.3詳解 321
14.14使用重疊ReadFile讀取報表 321
14.14.1使用VisualC++ 322
14.14.2使用VisualBasic 323
14.15使用多執行緒的ReadFile