內容簡介
《嵌入式協議棧μC/USB Device》全麵深入地介紹瞭嵌入式USB設備協議的原理和Micriμm 的μC/USB設備協議棧的使用.一部分對USB進行瞭概述;第二部分講述瞭如何用μC/USB設備堆棧構建基於成熟的硬件和軟件平颱的USB設備的基本方法.書中對各種USB類設備作瞭詳細的介紹,包括USB轉串口適配器(通信設備類)、鼠標或鍵盤(人機接口設備類)、可移動存儲設備(MassStorage類)和USB醫療設備(個人保健設備類)等.
本書適用於嵌入式係統開發人員、谘詢顧問、愛好者及有興趣瞭解μC/USB設備協議棧工作原理的學生.
內頁插圖
目錄
第1章 USB概述
1.1 USB曆史概述
1.2 機械規範
1.2.1 電纜和連接器
1.2.2 電氣規範
1.2.3 高速模式
1.3 USB設備供電
1.3.1 總綫供電設備
1.3.2 自供電設備
1.4 總綫狀態
1.5 USB拓撲結構
1.5.1 USB主機
1.5.2 USB設備
1.5.3 USB設備結構
1.5.4 設備狀態
1.5.5 主控製器
1.6 USB包
1.7 USB包類型
1.7.1 令牌包
1.7.2 數據包———低速和全速模式
1.7.3 數據包———高速模式
1.7.4 握手包
1.7.5 拆分事務特殊令牌包
1.8 數據流模型
1.8.1 端 點
1.8.2 管 道
1.8.3 傳 輸
1.9 事務、傳輸和幀
1.10 幀和微幀
1.11 USB實際吞吐量
1.12 枚 舉
1.13 USB協議棧
1.13.1 設備協議棧
1.13.2 主機協議棧
1.13.3 USBOTG協議棧
1.14 一緻性測試
1.14.1 USB設備測試
1.14.2 USB黃金樹
1.14.3 USB主機測試
第2章 開始工作
2.1 準 備
2.2 下載源代碼
2.3 安裝文件
2.4 構建應用示例
2.4.1 理解Micriμm 示例
2.4.2 復製和修改臨時文件
2.4.3 包含進USBDevice協議棧源代碼
2.4.4 修改應用配置文件
2.5 運行應用範例
第3章 主機操作係統
3.1 微軟Windows
3.2 關於INF文件
3.3 使用GUID
第4章 架 構
4.1 模塊關係
4.1.1 應用程序
4.1.2 庫
4.1.3 USB類層
4.1.4 USB內核層
4.1.5 端點管理層
4.1.6 實時操作係統抽象層
4.1.7 硬件抽象層
4.1.8 CPU 層
4.2 任務模型
4.2.1 發送和接收數據
4.2.2 處理USB請求和總綫事件
4.2.3 處理調試事件
第5章 配 置
5.1 靜態堆棧配置
5.1.1 基本配置
5.1.2 USB設備配置
5.1.3 接口配置
5.1.4 字符串配置
5.1.5 調試配置
5.1.6 通信設備類(CDC)配置
5.1.7 CDC抽象控製模型(ACM)串口類配置
5.1.8 人機接口設備(HID)類配置
5.1.9 大容量存儲設備類(MSC)配置
5.1.10 個人健康設備類(PHDC)配置
5.1.11 供應商類配置
5.2 應用相關配置
5.2.1 任務優先級
5.2.2 任務堆棧大小
5.3 設備和設備控製器驅動配置
5.4 配置範例
5.4.1 簡單的全速USB設備
5.4.2 組閤高速USB設備
5.4.3 復雜的組閤高速設備
第6章 設備驅動程序指南
6.1 設備驅動程序結構
6.2 設備驅動程序模型
6.3 設備驅動程序API
6.4 中斷處理
6.4.1 帶ISR處理參數的單個USBISR嚮量
6.4.2 單個USBISR嚮量
6.4.3 帶ISR處理參數的多個USBISR嚮量
6.4.4 多個USBISR嚮量
6.4.5 USBD_DrvISR_HANDLER()
6.5 設備配置
6.6 內存分配
6.7 支持的CPU 和闆子
6.8 USB設備驅動程序函數模型
6.8.1 設備同步接收
6.8.2 設備異步接收
6.8.3 設備同步發送
6.8.4 設備異步發送
6.8.5 設置設備地址
第7章 USB類
7.1 類實例的概念
7.2 類實例的結構
7.3 類和內核層通過迴調函數的交互
第8章 通信設備類
8.1 概 述
8.2 架 構
8.3 配 置
8.4 ACM 子類
8.4.1 概 述
8.4.2 常規配置
8.4.3 子類實例配置
8.4.4 子類通知與管理
8.4.5 子類實例通信
8.4.6 使用演示應用程序
第9章 人機接口設備類
9.1 概 述
9.2 架 構
9.3 配 置
9.3.1 常規配置
9.3.2 類實例配置
9.3.3 類實例通信
9.3.4 同步通信
9.3.5 異步通信
9.4 使用演示應用程序
9.4.1 配置PC和設備應用程序
9.4.2 運行演示程序
9.5 移植HID類到RTOS層
9.6 周期輸入報告任務
第10章 大容量存儲類
10.1 概 述
10.1.1 大容量存儲類協議
10.1.2 端 點
10.1.3 大容量類請求
10.1.4 小型計算機係統接口(SCSI)
10.2 體係結構
10.2.1 MSC體係結構
10.2.2 SCSI命令
10.2.3 存儲層和存儲介質
10.2.4 多個邏輯單元
10.3 RTOS層
10.4 配 置
10.4.1 一般配置
10.4.2 類實例配置
10.5 使用演示應用
10.5.1 USB設備應用
10.5.2 USB主機應用
10.6 MSC的存儲層移植
10.7 MSC的RTOS移植
第11章 個人健康設備類
11.1 概 述
11.1.1 數據特性
11.1.2 操作模型
11.2 配 置
11.2.1 一般配置
11.2.2 類實例配置
11.3 類實例通信
11.3.1 使用元數據前文進行通信
11.3.2 無元數據前文的通信
11.4 RTOS基於QoS的任務調度程序
11.5 使用演示應用
11.5.1 演示應用的配置
11.5.2 運行演示應用
11.6 PHDC的RTOS移植
第12章 供應商類
12.1 概 述
12.2 配 置
12.2.1 通用配置
12.2.2 類實例配置
12.2.3 類實例通信
12.2.4 同步通信
12.2.5 異步通信
12.3 USBDev_API
12.3.1 設備和管道管理
12.3.2 設備通信
12.4 運行演示程序
12.4.1 配置PC和設備應用程序
12.4.2 編輯INF文件
12.4.3 運行演示程序
12.4.4 GUID
第13章 調試和跟蹤
13.1 使用調試跟蹤
13.1.1 調試配置
13.1.2 調試跟蹤輸齣
13.1.3 調試格式
13.2 處理調試事件
13.2.1 調試事件池
13.2.2 調試任務
13.2.3 調試宏
第14章 μC/USB設備的實時操作係統移植
附錄A 核心API參考
附錄B 設備控製器驅動API參考手冊
附錄C CDCAPI參考手冊
附錄D HIDAPI參考手冊
附錄E MSCAPI參考手冊
附錄F PHDCAPI參考手冊
附錄G 供應商類API參考手冊
附錄H 錯誤代碼
附錄I 存儲器占用
附錄J μC/OS III和μC/USB Device軟件許可政策
前言/序言
本書翻譯工作接近尾聲的時候,我們和原書μC/USB:TheUniversalSerialBusDeviceStack 的齣版人、Micriμm 創始人和總裁Jeanlabrosse先生就中文版?嵌入式協議棧μC/USB Device?一書的序言交換瞭意見,他希望何小慶能為全書寫一篇序言(實際上原書本身也沒有序言),於是就有瞭下麵的序言.
?嵌入式協議棧μC/USB Device?一書以嵌入式USB設備協議棧為重點,介紹瞭USB係統原理、操作係統移植和USB控製器驅動編寫等方麵的知識,並配有詳實的軟件代碼實現的文檔介紹,這樣全麵介紹嵌入式USB的圖書還很少見到.市場上的USB圖書多數介紹芯片級的USB功能實現,主要寫USB芯片的驅動編程和支持該芯片特定類的軟件實現,局限性很大.本書也是目前北京航空航天大學齣版社齣版的μC/OS III係列圖書最新的一本,該係列已經齣版瞭?嵌入式實時操作係統μC/OS III?、?嵌入式實時操作係統μC/OS III應用開發———基於STM32微控製器?和?嵌入式協議棧μC/TCP IP———基於STM32微控製器?.
本書原版中的第二部分“μC/USBandtheRenesasRX63N”,因為RenesasRX63N芯片在國內不是很流行,我們與Jeanlabrosse先生商量之後,決定將這部分內容移植到STM32微控製器後再在國內齣版,這部分工作已經在進展之中.為瞭配閤這個部分,北京麥剋泰軟件技術有限公司計劃將把為μC/OS III圖書配套的μC/Eval STM32F107評估闆進行升級,發布一款新的闆子,它既可以支持已經齣版的三本書,還能很好地支持?嵌入式協議棧μC/USB Device?.STM32微控製器是最早進入市場的32位ARM Cortex M 核微控製器,在中國市場人氣很旺,我們相信這樣的安排能讓中國的讀者更容易通過μC/USB Device協議軟件和STM32微控製器的結閤,更好地學習和掌握嵌入式USB知識.
USB是計算機係統曆史上最成功的通信接口,是連接個人計算機外設事實上的工業標準.USB在嵌入式係統中已經廣泛采用,可實現設備之間或者設備與主機之間的通信和數據存儲等功能,還可用於軟件升級和內容更新.Micriμm 的μC/USBDevice是專門針對嵌入式係統設計的USB設備協議棧.依靠Micriμm 團隊的共同努力,高質量、可伸縮和高可靠性的代碼經過瞭很嚴格的認證過,μC/USB Device符閤USB2.0規範.
截至本書齣版,Micriμm 的μC/USB Device協議棧已經能夠支持通信設備(CDC)類、人機接口設備(HID)類、大容量存儲設備類(MSC)、個人健康設備類(PHDC)和供應商類.μC/USB Device協議棧的最新版本增加瞭CDC EEM 類和Audio類的支持,豐富瞭μC/USB Device協議棧的功能.Audio類可以幫助用戶構建符閤Audio1.0規範的音頻設備,典型應用包括揚聲器、麥剋風、耳機等.
EEM(以太網仿真模型)類是一種在USB總綫上高效率傳輸以太網數據包的一種規範.它是USBCDC規範的一部分,允許設備通過USB接口連接到以太網,所有典型的網絡應用如HTTP、FTP、DHCP等,都可以運行在該設備上(這兩個類沒有在本書中體現).μC/USB Device協議棧設備控製器的驅動程序很豐富,支持許多MCU 芯片內置的USB 控製器,包括STM32、TITivaC 係列、LPC17xx、21xx和318x等近40餘種.μC/USB Device協議棧的架構非常清晰,核心模塊分為設備控製驅動、設備核心、類和RTOS移植四大部分,既可以支持μC/OS II或者μC/OSIII,也可以支持其他的RTOS.
μC/USB Device協議棧是MicriμmμC/OS 係列操作係統軟件的成員之一,μC/OS的內核已經有第三代産品,第一代産品1992年問世,1998年有瞭μC/OSII,2009年發錶瞭μC/OS III.1999年Jeanlabrosse先生創辦Micriμm 公司之後開發瞭大量的μC/OS的組件,比如μC/FS、μC/TCP IP和μC/GUI等,這些組件和μC/OS組閤,形成一個功能和性能很強大的嵌入式操作係統.μC/USB Device可以流暢地與μC/OS II或者μC/OS III配閤工作,還能得到μC/FS和μC/TCPIP的支持.
本書的作者來自Micriμm USB 開發團隊:Christian Légaré 是Micriμm 的CTO,有22年通信行業的經驗,是?嵌入式協議棧μC/TCP IP———基於STM32微控製器?作者,目前負責物聯網應用解決方案MicriμmSpectra的開發工作;CédricMigliorini是Micriμm USB 團隊負責人,他改進和維護瞭USB設備和主機協議棧;Jean Fran?oisDeschênes是Micriμm USB團隊的工程師,負責μC/USB Host軟件;JuanP.Benavides是應用工程師,在Micriμm 美國佛羅裏達Weston辦公室.前麵三位都在Micriμm 加拿大濛特利爾辦公室,何小慶在2014年6月曾經訪問過這個辦公室,與Christian就物聯網操作係統進行瞭廣泛和深入的交流,收獲很多.
本書的翻譯團隊由兩部分組成,其中一部分來自北京麥剋泰軟件技術公司專業工程師:張愛華,她在RTOS的移植和應用方麵有豐富的經驗,與何小慶一起翻譯瞭?嵌入式實時操作係統μC/OS III應用開發———基於STM32微控製器?;韓誌華和趙曉彤,他們對μC/OS和IAR 開發工具有實踐經驗.另外一部分是在校的優秀學生,何靈淵現是哥倫比亞大學計算機科學專業的研究生,他已經參與翻譯瞭2本計算機專業的圖書;江山是斯蒂文森理工大學電子工程專業的本科生.何小慶除在公司任職外,還在高校給研究生和本科生授課,在科技期刊和行業協會兼職.
本書的第1章和附錄B、C、D由張愛華翻譯;第2~4章,附錄H、I、J及參考文獻由何小慶翻譯;第5~7章和附錄E、F由韓誌華翻譯;第8、9章和附錄G由趙曉彤翻譯;第10、11章和附錄A 由何靈淵翻譯;第12~14章和附錄A(部分)由江山翻譯,全書由何小慶統稿和審校.
我們要感謝北京航空航天大學齣版社讓這本非常專業的嵌入式軟件書籍可以與讀者見麵.策劃編輯鬍曉柏主任長期緻力於嵌入式係統圖書齣版的精神感動和鼓勵瞭我們.感謝北京麥剋泰軟件技術公司各方麵的支持和幫助.
最後,希望讀者能從本書的閱讀中受益.我們的翻譯如有不足和紕漏之處,還請
讀者指正.
譯 者
2015年8月
於北京、上海和美國紐約
現代嵌入式係統中的 USB 設備開發:機遇、挑戰與實用指南 隨著嵌入式係統在工業自動化、醫療設備、消費電子、汽車電子以及物聯網等領域的廣泛應用,高性能、高可靠性的通信接口扮演著越來越重要的角色。在眾多通信協議中,通用串行總綫(USB)以其便捷性、通用性、高傳輸速率和熱插拔特性,成為嵌入式設備與主機係統(如PC、平闆電腦、甚至其他嵌入式主機)之間進行數據交換和通信的首選接口之一。然而,要成功地將USB設備功能集成到資源受限的嵌入式係統中,開發者需要深入理解USB協議的復雜性,掌握高效的驅動程序開發技巧,並應對各種軟硬件挑戰。 本書旨在為嵌入式係統開發者提供一個全麵、深入且高度實用的USB設備開發指南。我們並非局限於某一特定軟件棧的介紹,而是緻力於剖析USB協議的本質,探討在各種嵌入式硬件平颱上實現USB設備功能的通用原理、設計模式和最佳實踐。本書將引導讀者從理解USB協議的基本概念齣發,逐步深入到實際的開發流程,最終能夠獨立完成復雜的USB設備功能設計與實現。 一、 USB協議深度解析:構建堅實的基礎 理解USB協議是成功開發USB設備的首要前提。本書將從底層協議細節入手,係統性地梳理USB的各個關鍵組成部分: USB物理層: 詳細介紹USB信號傳輸、數據編碼(NRZI)、差分信號、時序要求、電源規範(5V、3.3V、1.5A、500mA、100mA)、連接器類型(Type-A, Type-B, Mini-A, Mini-B, Micro-A, Micro-B, Type-C)及其電氣特性。特彆會關注嵌入式係統中常用的低功耗USB(如USB Full-Speed, USB Low-Speed)以及高性能USB(如USB High-Speed, USB SuperSpeed)在物理層實現上的差異與考量。 USB協議層: 深入講解USB的拓撲結構(主機-設備模型)、傳輸類型(控製傳輸、批量傳輸、中斷傳輸、等時傳輸)的工作原理、數據包格式(同步包、PID、地址、端點號、CRC、數據包、握手包、ACK/NAK/STALL)以及它們之間的交互流程。我們將詳細剖析USB的枚舉過程,從設備插入、主機檢測、設備描述符(設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符)的讀取、地址分配到配置過程,這是構建任何USB設備功能的基礎。 USB端點(Endpoint)概念: 詳細闡述不同類型的端點(Control Endpoint 0, Bulk Endpoint, Interrupt Endpoint, Isochronous Endpoint)的功能、傳輸限製、緩衝管理策略,以及它們在實現特定設備功能(如CDC、HID、MSC等)中的作用。 USB設備類(Device Class)和請求(Request): 介紹USB標準化設備類(如CDC-Abstract Control Model for CDC Devices、Human Interface Device (HID)、Mass Storage Class (MSC)、Audio Class、Video Class等)的設計理念和常用命令。理解這些類可以幫助開發者快速構建功能豐富的USB設備,而無需從零開始定義私有協議。同時,我們將詳細講解USB控製傳輸中的標準請求(GET DESCRIPTOR, SET DESCRIPTOR, SET ADDRESS, SET CONFIGURATION, GET STATUS, CLEAR FEATURE, SET FEATURE等)和類特定請求,以及如何根據這些請求在設備端實現相應的處理邏輯。 二、 嵌入式USB設備軟件架構與設計 在理解瞭USB協議之後,如何將其高效地映射到嵌入式係統的軟件架構中是關鍵。本書將探討以下核心內容: USB驅動程序模型: 介紹USB設備驅動程序在嵌入式係統中的常見實現方式,包括輪詢、中斷驅動和DMA(Direct Memory Access)驅動。重點分析不同驅動模型的優劣勢,以及在資源受限的嵌入式環境中如何選擇和優化。 USB通信棧的實現: 探討USB通信棧(Protocol Stack)的設計理念。無論是基於RTOS(Real-Time Operating System)的棧,還是裸機(Bare-metal)實現,都將涉及USB的枚舉、配置、數據傳輸、錯誤處理和狀態管理等模塊。我們將分析不同通信棧的實現策略,例如如何管理USB通信狀態機、如何高效地處理USB中斷、如何組織USB事務(Transaction)和傳輸(Transfer)。 硬件抽象層(HAL)與USB控製器: 闡述USB控製器(如ULPI, OTG, High-Speed PHY)與CPU之間的接口(如Host Interface)。介紹HAL在屏蔽底層硬件差異、實現軟件可移植性方麵的重要性。我們將討論如何與特定的USB控製器驅動交互,包括寄存器配置、中斷處理、DMA通道管理等。 內存管理與緩衝策略: USB通信涉及大量數據的緩存和傳輸。本書將深入探討嵌入式係統中USB數據緩衝區的管理策略,包括固定大小緩衝區、環形緩衝區(Circular Buffer)、鏈錶緩衝區等,以及如何根據不同的傳輸類型和設備需求進行優化,以平衡性能和內存占用。 功耗優化策略: 嵌入式設備的功耗是關鍵考量因素。我們將介紹USB設備在低功耗模式(如Suspend Mode)下的實現技術,包括如何檢測主機發齣的Suspend命令,如何管理設備的電源狀態,以及如何在喚醒時快速恢復USB通信。 三、 典型USB設備功能實現 本書將通過豐富的實例,帶領讀者深入理解常見USB設備功能的開發與實現: CDC (Communication Device Class) 串口仿真: 介紹如何利用CDC類實現USB轉串口功能,讓嵌入式設備能夠像標準串口一樣與PC進行通信。我們將詳細講解CDC ACM(Abstract Control Model)的實現細節,包括如何處理控製接口(設置波特率、停止位、校驗位等)和數據接口(發送和接收數據)。 HID (Human Interface Device) 接口開發: 探討如何為自定義的輸入設備(如按鍵、搖杆、傳感器)或輸齣設備(如LED指示燈)開發HID報告。我們將詳細講解HID報告描述符的編寫,以及如何根據主機的HID請求(如Get Report, Set Report)發送或接收設備數據。 MSC (Mass Storage Class) 存儲設備實現: 講解如何將嵌入式設備模擬成一個U盤或SD卡,實現文件的讀寫功能。我們將深入分析MSC協議的工作流程,包括SCSI命令的解析、數據傳輸模式(Bulk-Only Transport)以及存儲介質的管理。 自定義USB設備開發: 除瞭標準設備類,本書還將指導讀者如何設計和實現自定義的USB設備協議。這包括如何定義設備的功能和行為,如何設計私有的控製命令和數據傳輸格式,以及如何在設備端和主機端實現相應的驅動程序。 四、 調試與性能優化 在USB設備開發過程中,調試是必不可少且極具挑戰性的環節。本書將提供實用的調試技巧和工具: USB協議分析儀的使用: 介紹如何利用Wireshark、Saleae Logic Analyzer等USB協議分析儀來捕獲和解析USB數據包,識彆通信錯誤和協議違規。 嵌入式調試工具: 講解JTAG/SWD調試器、UART控製颱輸齣等在USB設備調試中的應用。 常見問題診斷與排除: 針對USB枚舉失敗、數據傳輸錯誤、設備無響應等常見問題,提供係統性的診斷思路和解決方法。 性能瓶頸分析與優化: 分析USB通信中的性能瓶頸,如CPU占用率、中斷處理延遲、DMA效率低下等,並提供相應的優化建議,如調整緩衝區大小、優化中斷服務例程、閤理使用DMA等。 五、 平颱通用性與實戰考量 本書的重點在於提供通用的USB設備開發原理和方法,使其能夠適用於各種嵌入式平颱和微控製器。我們將討論: 微控製器USB外設的選型與特性: 分析不同微控製器(如STM32係列、NXP Kinetis係列、ESP32係列、Nordic nRF係列等)的USB外設接口特性,包括全速、高速支持、OTG功能、DMA集成度等,以及如何根據項目需求進行選型。 RTOS與裸機下的USB開發: 對比在實時操作係統(如FreeRTOS, RT-Thread, Zephyr)和裸機環境下實現USB設備功能的差異,包括任務調度、互斥訪問、事件驅動等,並提供相應的開發建議。 USB OTG (On-The-Go) 技術: 介紹USB OTG技術,使其能夠支持設備(Device)和主機(Host)的雙重角色,並討論相關的協議和實現細節。 USB Type-C 和 Power Delivery: 簡要探討USB Type-C接口帶來的新特性,包括正反插、更大數據速率支持,以及Power Delivery(PD)協議在嵌入式設備中的應用可能性。 總結 本書旨在為讀者打造一個堅實的USB設備開發知識體係。通過深入剖析USB協議的底層機製,理解軟件架構的設計原則,掌握常見設備功能的實現方法,並學會有效的調試與優化技巧,讀者將能夠自信地應對嵌入式USB設備開發的各種挑戰,並成功地將其集成到各類創新産品中。本書並非對某個特定軟件棧的推銷,而是緻力於賦能開發者,使其具備獨立解決USB設備開發問題的能力,從而在不斷發展的嵌入式技術浪潮中,構建齣更智能、更互聯的下一代産品。