- USB應用分析精粹:從設備硬件、固件到主機端程序設計
- 龍虎
- 1570字
- 2022-08-16 17:39:04
第3章 我們將要實現什么
在簡要介紹了USB設備的開發流程之后,我們將正式進入USB設備的開發階段。首先需要明確:要實現的USB設備是什么?它有哪些功能?具體怎么操作?這些屬于系統需求分析階段,因為只有清晰認識產品最終實現的功能,才能有的放矢地進行USB接口的芯片選型及后續軟硬件的開發工作。
我們要實現的USB設備包含4個發光二極管(Light Emitting Diode, LED)與8個輕觸按鍵(其中一個具有復位功能),它們的狀態可以通過主機進行控制或讀取,其硬件模塊的大體分布如圖3.1所示(不需要很精確,只為方便后續描述)。

圖3.1 USB設備硬件模塊的大體分布
該USB設備硬件的核心是一款基于ARM Cortex-M3內核的STM32F103C8T6單片機,其內置的USB控制器的外部信號線與A型母口連接(如果自行設計硬件模塊,只要有合適的連接線纜,那么使用圖1.8中的任意一種都可以),4個LED可以根據主機發送的數據切換亮滅狀態,主機也可以讀取7個按鍵的狀態(按鍵K8為復位)。由于設備消耗的電流比較小,所以決定直接使用USB主機提供的+5V電源供電。當我們將設計好的固件下載到單片機后,將USB設備通過USB線纜與主機連接后就可以進入工作狀態了。
對USB設備的控制是通過配套的應用程序完成的,最終的界面如圖3.2所示。

圖3.2 應用程序最終的界面
在默認情況下(USB設備未與主機連接時),“控制”與“讀取”按鈕均處于灰色禁用狀態,一旦使用USB線纜將主機與USB設備連接后,主機檢測到USB設備就會首先調整“控制”與“讀取”按鈕進入可用狀態,然后可以進行如下兩種操作。
(1)控制USB設備上LED的狀態。發光二極管組合框中有4個復選框,它們分別對應USB設備上相同位號的LED(高有效,即“勾選”表示LED處于點亮狀態,“未勾選”表示LED處于熄滅狀態)。當你單擊“控制”按鈕后,USB設備上的LED就會立刻進行相應的狀態轉換。
(2)讀取輕觸按鍵的狀態。輕觸按鍵組合框中也有4個復選框,它們分別對應USB設備上相同位號的按鍵(高有效,即“勾選”表示按鍵處于按下狀態,“未勾選”表示按鍵處于彈起狀態)。當你單擊“讀取”按鈕時,應用程序會根據按鍵(K1~K4)的狀態對復選框進行相應的狀態更改。
有些讀者可能想說:這個應用也太簡單了吧!設計一個方波信號發生器或模擬電壓測量之類的應用不是更好嗎?這里的回復是:沒有必要!因為我們已經提過:本書旨在詳盡闡述USB設備的開發思路及透徹理解USB 2.0規范。如果設計一些相對復雜的應用,就意味著必須對單片機中其他與USB控制器無關的模塊做過多闡述。例如,方波信號發生器功能需要使用定時器(Timer),模擬電壓測量功能需要使用模數轉換器(Analog to Digital Converter, ADC),這些都已經偏離了本書撰寫的初衷:避免與某個開發平臺有過多的依賴。除USB控制器外,本書還詳細介紹了STM32F103C8T6單片機中最簡單的通用的輸入/輸出(General-Purpose Input/Output, GPIO)模塊,它用來控制LED與讀取按鍵的狀態,這種簡單應用對于所有平臺都是適用的,因為具體的開發平臺是多種多樣的(很可能你的開發平臺與本書并不相同),即使我們使用某款單片機設計了某些比較復雜的應用,對你也未必有多大的參考價值,而且還分散了學習USB設備開發與理解USB 2.0規范的精力。但是,只要你掌握了USB設備的開發思路,即使開發平臺完全不一樣,對USB設備開發也沒有多大影響。
USB只是一種數據傳輸方式,本質上與SPI、I2C等總線的數據傳輸方式并無不同。只要你能夠通過USB將數據發送到USB設備,或將數據從USB設備讀取出來,就已經達到了本書的目的,至于你使用這些數據做些其他什么具體應用,就不是本書關心的了。
在實際進行USB設備開發時,我們采用了3種方案(配套應用程序的界面與功能完全一樣),你不僅能夠親身體驗不同方案的開發難度,輕松掌握不同的USB設備開發流程,對USB 2.0規范也會有更深刻的理解,而且還有能力進行設備固件內核層的編程。另外,我們還會開發一些諸如USB鼠標、USB鍵盤、USB大容量存儲、USB轉串口、USB聲卡等常用設備,這些都有助于讀者透徹理解與應用USB相關的其他規范,下面就從設計USB設備的硬件電路開始吧!
- FPGA從入門到精通(實戰篇)
- Artificial Intelligence Business:How you can profit from AI
- Svelte 3 Up and Running
- 分布式微服務架構:原理與實戰
- 計算機組裝與維修技術
- Rapid BeagleBoard Prototyping with MATLAB and Simulink
- 電腦高級維修及故障排除實戰
- 筆記本電腦應用技巧
- OpenGL Game Development By Example
- 3D Printing Blueprints
- 單片微機原理及應用
- 現代多媒體技術及應用
- Hands-On Game Development with WebAssembly
- Proxmox VE部署與管理指南
- 數字噴墨與應用