內容簡介
《USB開發大全(第4版)》介紹了有關通用串列匯流排(Universal Serial Bus,USB)的工作方式、設備硬體及軟體編程等方面的知識和工程實例,內容大致可分為4個方面。第 一,闡述USB協定,包括基本常識、設備枚舉、傳輸過程、設備類、主機通信方式以及匯流排狀態等。讀者通過學習,可迅速掌握USB接口的工作原理和組織結構。第 二,詳細地介紹了USB硬體,從控制器晶片的選擇、電源供給、集線器原理,到線纜的電氣和機械特性,幾乎涵蓋USB硬體的全部技術細節。第三,討論了USB的程式編寫,涉及設備固件和驅動,重點闡述了HID設備類驅動程式的開發,並給出了在廠商專屬設備上套用WinUSB的方法。第四,作者也關注了幾種開發工具的使用。本書在組織上真正做到了協定、硬體、軟體、工具的完美結合,對4方面的論述滲透全書。
《USB開發大全(第4版)》融會作者在該領域豐富的工作經驗和設計實例,在規範與工程實際間搭起了橋樑。它是USB軟硬體的開發指南,一本無可替代的工具書。新版本與時俱進地增加了USB 3.0協定及其超高速匯流排的內容。無論初學者還是資深開發人員,讀到此書,都將如沐春風,大受裨益。
圖書目錄
第 1章 USB基礎 1
1.1 USB的用途和局限 1
1.1.1 給用戶帶來的好處 1
1.1.2 給開發者帶來的好處 3
1.1.3 USB不能做什麼 5
1.1.4 USB與Ethernet 7
1.1.5 USB與IEEE-1394 7
1.2 USB接口的發展演變 7
1.2.1 USB 1.0 7
1.2.2 USB 1.1 8
1.2.3 USB 2.0 8
1.2.4 USB 3.0 9
1.2.5 USB On-The-Go 9
1.2.6 無線USB 9
1.3 匯流排組成部分 10
1.3.1 拓撲結構 10
1.3.2 關於匯流排速率的考慮 11
1.3.3 術語 12
1.4 分割工作 13
1.4.1 主機的責任 13
1.4.2 設備的職責 14
1.4.3 匯流排速率和數據吞吐量 15
1.5 開發設備 16
1.5.1 組件 16
1.5.2 開發工具 16
1.5.3 工程開發的步驟 16
1.6 USB 3.0常見問題 17
1.6.1 功能 17
1.6.2 兼容性 18
1.6.3 線纜 19
1.6.4 電源和功耗 20
第 2章 深入USB傳輸 21
2.1 傳輸的基礎 21
2.1.1 傳輸要素 21
2.1.2 通信的目的 22
2.1.3 管理匯流排上的數據 22
2.2 傳輸要素 23
2.2.1 端點:數據的來源和數據接收端 23
2.2.2 事務類型 23
2.2.3 管道:將端點連線到主機 24
2.2.4 傳輸類型 24
2.2.5 流管道和訊息管道 25
2.2.6 發起傳輸 25
2.3 USB 2.0事務 26
2.3.1 事務步驟 27
2.3.2 信息包的順序 29
2.3.3 時間約束和保證 29
2.3.4 分割事務 29
2.4 保證傳輸成功 30
2.4.1 狀態與控制 30
2.4.2 報告控制傳輸的狀態 32
2.4.3 錯誤檢查 32
2.5 超高速事務 34
2.5.1 信息包類型 34
2.5.2 數據傳輸 36
2.5.3 連線管理信息包 38
第3章 通用的傳輸類型 39
3.1 控制傳輸 39
3.1.1 可用性 39
3.1.2 結構 39
3.1.3 數據大小 44
3.1.4 速度 44
3.1.5 錯誤的檢測與處理 45
3.1.6 設備的職責 45
3.2 批量傳輸 45
3.2.1 可用性 46
3.2.2 結構 46
3.2.3 數據大小 48
3.2.4 速率 48
3.2.5 錯誤的檢測和處理 48
3.2.6 設備的職責 48
3.3 中斷傳輸 49
3.3.1 可用性 49
3.3.2 結構 49
3.3.3 數據大小 50
3.3.4 速率 50
3.3.5 錯誤的檢測和處理 51
3.3.6 設備的職責 51
3.4 等時傳輸 51
3.4.1 可用性 52
3.4.2 結構 52
3.4.3 數據大小 54
3.4.4 速度 54
3.4.5 錯誤的檢測和處理 55
3.4.6 設備的職責 55
3.5 更多關於時間關鍵傳輸的內容 55
3.5.1 匯流排頻寬 55
3.5.2 設備性能 56
3.5.3 主機性能 56
3.5.4 主機等待時間 56
第4章 枚舉:主機如何了解設備 58
4.1 枚舉過程 58
4.1.1 枚舉步驟 59
4.1.2 設備移除 62
4.1.3 枚舉成功的秘訣 62
4.2 描述字 63
4.2.1 類型描述字 63
4.2.2 設備描述字 64
4.2.3 Device_Qualifier描述字 67
4.2.4 配置描述字 67
4.2.5 Other_Speed_Configuration描述字 68
4.2.6 接口聯合描述字 68
4.2.7 接口描述字 69
4.2.8 端點描述字 71
4.2.9 超高速端點夥伴描述字 73
4.2.10 字元串描述字 73
4.2.11 二進制目標存儲及設備性能描述字 74
4.2.12 其他標準描述字 75
4.2.13 微軟OS描述字 75
4.2.14 更新描述字到USB 2.0 76
第5章 控制傳輸:用於關鍵數據的結構化請求 77
5.1 控制傳輸的組成 77
5.1.1 設定階段 77
5.1.2 數據階段 78
5.1.3 狀態階段 79
5.1.4 錯誤處理 80
5.1.5 設備固件 80
5.2 標準請求 81
5.2.1 Get Status(獲得狀態)請求 82
5.2.2 Clear Feature(清除特徵)請求 83
5.2.3 Set Feature(設定特徵)請求 83
5.2.4 Set Address(設定地址)請求 84
5.2.5 Get Descriptor(獲得描述字)請求 85
5.2.6 Set Descriptor(設定描述字)請求 85
5.2.7 Get Configuration(獲得配置)請求 85
5.2.8 Set Configuration(設定配置)請求 86
5.2.9 Get Interface(獲得接口)請求 86
5.2.10 Set Interface(設定接口)請求 87
5.2.11 Synch Frame(幀同步)請求 87
5.2.12 Set SEL(設定選擇)請求 87
5.2.13 Set Isochronous Delay(設定等時延時)請求 88
5.3 其他請求 88
5.3.1 類專屬請求 88
5.3.2 廠商定義的請求 88
第6章 晶片選擇 89
6.1 USB設備的組成部分 89
6.1.1 USB2.0控制器內部結構 89
6.1.2 其他的設備組件 90
6.2 簡化設備開發 92
6.2.1 設備要求 92
6.2.2 晶片文檔 93
6.2.3 驅動程式的選擇 93
6.2.4 調試工具 93
6.3 USB微控制器 95
6.3.1 Microchip的PIC18F4550 96
6.3.2 Cypress EZ-USB 99
6.3.3 ARM 101
6.4 連線到CPU的控制器 101
6.4.1 ST-NXP Wireless公司的ISP1582型控制器 101
6.4.2 PLX Technology的NET2272型控制器 102
6.4.3 FTDI公司的USB UART和USB FIFO 103
第7章 設備類 105
7.1 元素與用途 105
7.1.1 已被公認的規範 105
7.1.2 類規範的組成 106
7.2 已定義的類 107
7.2.1 音頻類 107
7.2.2 通信類 109
7.2.3 內容安全類 113
7.2.4 設備固件升級類 114
7.2.5 人機接口類 116
7.2.6 IrDA橋設備類 118
7.2.7 大容量存儲設備類 119
7.2.8 個人健康設備類 122
7.2.9 印表機設備類 122
7.2.10 智慧卡設備類 124
7.2.11 靜態圖像獲取設備類 126
7.2.12 測試與測量設備類 127
7.2.13 視頻設備類 128
7.3 非標準功能的實現 131
7.3.1 選擇驅動程式 131
7.3.2 使用通用驅動程式 131
7.3.3 從RS-232轉換到USB 131
7.3.4 從並行連線埠轉換到USB 132
7.3.5 PC與PC間的通信 133
第8章 主機的通信方式 134
8.1 設備驅動程式 134
8.1.1 分層的驅動程式模型 134
8.1.2 用戶及核心模式 134
8.2 分層結構內部 136
8.2.1 應用程式 136
8.2.2 用戶模式下的用戶驅動程式 137
8.2.3 核心模式下的用戶驅動程式 137
8.2.4 匯流排和主機控制器驅動程式 138
8.3 編寫驅動程式 140
8.3.1 核心模式的驅動程式 140
8.3.2 用戶模式的驅動程式 140
8.3.3 測試工具 141
8.4 GUID的使用 141
8.4.1 設備設定GUID 141
8.4.2 設備接口GUID 142
第9章 為設備匹配驅動程式 143
9.1 使用設備管理器 143
9.1.1 查看設備 143
9.1.2 屬性頁 144
9.2 註冊表中的設備信息 145
9.2.1 Hardware鍵值 145
9.2.2 Class鍵值 146
9.2.3 Driver鍵值 147
9.2.4 Service鍵值 147
9.3 深入INF檔案 148
9.3.1 結構及語法 150
9.3.2 設備專屬取值 151
9.4 使用設備標識字元串 151
9.4.1 找到匹配 153
9.4.2 何時提供INF檔案 153
9.5 工具及診斷協助 154
9.5.1 使用INF檔案的技巧 154
9.5.2 用戶可見到什麼 155
第 10章 設備檢測 156
10.1 關於Windows API函式調用的簡要指導 156
10.1.1 託管代碼與非託管代碼 156
10.1.2 管理數據 159
10.2 找到您的設備 161
10.2.1 獲取設備接口GUID 163
10.2.2 請求指向設備信息集的指針 163
10.2.3 標識設備接口 164
10.2.4 請求帶有設備類路徑名的結構體 166
10.2.5 提取設備路徑名 168
10.2.6 結束通信 168
10.3 獲取句柄 169
10.3.1 請求通信句柄 169
10.3.2 關閉句柄 171
10.4 檢測設備連線和移除 171
10.4.1 關於設備通知 171
10.4.2 請求設備通知 171
10.4.3 記錄設備變化信息 174
10.4.4 讀取設備變化訊息 175
10.4.5 收回訊息中的設備路徑名 176
10.4.6 停止設備通知 178
第 11章 人機接口設備:使用控制和中斷傳輸 180
11.1 什麼是HID 180
11.1.1 硬體要求 181
11.1.2 固件要求 182
11.2 描述字 182
11.2.1 HID接口 185
11.2.2 HID類描述字 185
11.2.3 報告描述字 186
11.3 HID專屬請求 187
11.3.1 Get Report請求 187
11.3.2 Get Idle請求 188
11.3.3 Get Protocol請求 188
11.3.4 Set Report請求 188
11.3.5 Set Idle請求 189
11.3.6 Set Protocol請求 189
11.4 數據傳輸 189
11.4.1 編寫固件 189
11.4.2 工具 190
第 12章 人機接口設備:報告 191
12.1 HID報告的數據結構 191
12.1.1 使用HID描述符編輯工具 191
12.1.2 控制項及數據項目的值 192
12.1.3 項目格式 192
12.2 主項目 193
12.2.1 輸入項目,輸出項目及特徵項目 193
12.2.2 Collection項目 196
12.3 全局項目類型 196
12.3.1 識別報告 196
12.3.2 描述數據用途 197
12.3.3 單位轉換 198
12.3.4 轉換原始數據 199
12.3.5 描述數據大小及數據格式 201
12.3.6 儲存和恢復全局項目 201
12.4 局部項目類型 201
12.4.1 物理描述符 203
12.4.2 填充 203
第 13章 人機接口設備:主機應用程式 204
13.1 HID API函式 204
13.1.1 請求HID信息 204
13.1.2 報告傳送與接收 205
13.1.3 報告數據提供及使用 206
13.1.4 HID通信管理 207
13.2 設備識別 207
13.2.1 讀取Vendor ID及Product ID 207
13.2.2 獲取設備功能指針 209
13.2.3 獲取設備功能 210
13.2.4 獲取按鈕及數值的功能 211
13.3 報告傳送與接收 212
13.3.1 向設備傳送輸出報告 212
13.3.2 由設備讀取輸入報告 214
13.3.3 向設備寫入特徵報告 220
13.3.4 從設備讀取特徵報告 221
13.3.5 關閉通信 222
第 14章 利用WinUSB的廠商定義函式 224
14.1 功能與局限 224
14.1.1 設備要求 224
14.1.2 主機要求 224
14.1.3 設備固件 224
14.1.4 分配WinUSB驅動程式 226
14.2 訪問設備 227
14.2.1 獲取WinUSB句柄 228
14.2.2 請求接口描述符 229
14.2.3 端點識別 230
14.2.4 配置管道策略 233
14.2.5 利用批量傳輸及中斷傳輸寫入數據 237
14.2.6 利用批量傳輸及中斷傳輸讀取數據 238
14.2.7 使用廠商定義的控制傳輸 239
14.2.8 關閉通信 242
第 15章 集線器 243
15.1 USB 2.0 243
15.1.1 集線器轉發器 244
15.1.2 事務轉換器 245
15.1.3 集線器控制器 249
15.1.4 傳輸速率 249
15.1.5 維持已激活連結 250
15.2 USB 3.0 250
15.2.1 匯流排速率 251
15.2.2 USB 3.0的構成 251
15.2.3 通信管理 251
15.3 集線器類 252
15.3.1 集線器描述符 252
15.3.2 集線器類請求 252
15.3.3 連線埠指示器 252
第 16章 電源管理 253
16.1 電源選項 253
16.1.1 電壓 253
16.1.2 使用匯流排電源 254
16.1.3 電源需求 255
16.1.4 通知主機 255
16.1.5 電池充電 256
16.2 集線器電源 257
16.2.1 電源 257
16.2.2 電流超載保護 258
16.2.3 功率切換 259
16.3 節電模式 259
16.3.1 USB 2.0鏈路電源管理 259
16.3.2 掛起狀態 259
16.3.3 休眠狀態 260
16.3.4 超速通信電源管理 261
16.3.5 Windows作業系統下的電源管理 264
第 17章 測試與調試 266
17.1 工具 266
17.1.1 硬體協定分析器 267
17.1.2 軟體協定分析器 268
17.1.3 流量發生器 269
17.2 測試 269
17.2.1 合規性 270
17.2.2 Windows徽標 273
第 18章 匯流排上的包 276
18.1 USB 2.0通信 276
18.1.1 低速、全速匯流排狀態 276
18.1.2 高速匯流排狀態 277
18.1.3 數據編碼 279
18.1.4 保持同步 279
18.1.5 精確計時 280
18.1.6 包的格式 281
18.1.7 包間延遲 282
18.1.8 測試模型 282
18.2 超速通信 283
18.2.1 數據加擾 283
18.2.2 編碼 283
18.2.3 鏈路層 283
18.2.4 復位 284
第 19章 電氣與機械接口 285
19.1 USB 2.0收發器 285
19.1.1 線纜段 285
19.1.2 低速和全速收發器 286
19.1.3 高速收發器 288
19.1.4 信號電壓 291
19.2 USB 2.0線纜 292
19.2.1 導線 292
19.2.2 連線器 293
19.2.3 可拆卸及不可分離線纜 294
19.2.4 線纜長度 294
19.2.5 匯流排長度 295
19.2.6 晶片間連線 295
19.3 USB 3.0 296
19.3.1 傳送器和接收器 296
19.3.2 線纜 296
19.4 確保信號質量 299
19.4.1 噪聲來源 299
19.4.2 對稱傳輸線 300
19.4.3 雙絞線 300
19.4.4 禁止 301
19.4.5 邊沿變化率 301
19.4.6 被隔離的接口 301
19.5 無線方式實現USB 301
19.5.1 無線USB認證 302
19.5.2 Cypress無線USB 302
19.5.3 其他選擇 303
第 20章 嵌入式系統主機 305
20.1 USB OTG 305
20.1.1 能力與局限 305
20.1.2 OTG連線器 306
20.1.3 A型設備及B型設備 306
20.1.4 OTG設備要求 306
20.1.5 OTG描述符 310
20.1.6 HNP特徵代碼 310
20.2 其他主機選項 311
20.2.1 嵌入式主機要求 311
20.2.2 設備連線埠 312
20.3 控制器晶片 312
20.3.1 微控制器 312
20.3.2 接口晶片 313