目前嵌入式系統在數字化電子產品領域應用越來越廣泛。隨著其成本的降低,大有取代單片機的趨勢。USB 設備以其小巧、便攜、即插即用、成本低廉等優勢在當前的桌面應用中有相當的比重,尤其是HID(人機接口)設備,其免驅的特點(不用安裝驅動程序)更是給用戶帶來極大方便。現在市場上USB 設備多是由專門的USB 控制芯片來實現其應用控制,芯片內集成了USB 協議,成本較高。PCB 板的面積較大。本文提出了僅用一片MCU(微處器-單片機)或嵌入式系統芯片來實現其與PC 機的通訊的方法。就單片機而言,多數單片機速度較慢,對事件的響應能力較弱,對全速USB 應用不是很好的選擇。而嵌入式系統,由于其速度較之單片機快很多,內部RAM 容量較大,用其來仿真USB 設備是個理想的策略。
本文將以LM310 嵌入式芯片仿真USB(HID)鍵盤為例,研究其仿真USB 的方法。
1 USB 協議規范
1.1 總線定義:
USB 又稱通用串地總線,共有四條線,如圖1 所示,VBUS 是設備供電接線,電壓+5V,最大供電電流500mA,向設備提供電源。具有過流保護、供電控制等功能。D-低速信號線;D+全速信號線;GND 電源地。
1.2 USB 版本
常規USB 通訊協議有USB1.1、USB2.0。USB1.1 版本的USB 設備,支持全速12Mb/S 低速通訊(1.5Mb/S);USB2.0 版本的USB 設備,支持高速通訊(480Mb/S)。由于USB2.0 的通訊速率太高,所以用芯片仿真無法實現(必須由單獨芯片控制)。
1.3 總線長度
USB1.1 版本的設備總線長度不大于5 米,通過集線器或中繼器,可達到30 米95 個中斷器或集線器)。U2.0 設備總線長度不大于3 米。
1.4 通訊建立
串口通訊另一個標準RS232 的通訊發起方可以從兩端發起,而USB 通訊發起方總是在主機端(HOST),設備端總是響應主機端的通訊請求。主機端如果是PC 機,每隔1ms 發起一次對一個設備的通訊建立請求,設備接收到訪問己方請求后,立即與主機建議起通訊連接。
1.5 電氣特性
對于“D-是低帶信號總線,D+是高速信號總線是高速總線”的說法是不準確的,因為USB 信號總線是平衡差分式的,這點類似于485 總線。所謂“在-是低速信號總線”是指當US 陽低速設備(如鼠標、鍵盤) 時,D-這條線在USB 設備端加1.5K 上拉電阻。反之對于全速設備(如U 盤、打印機、掃描儀),D+信號線加1.5K 上拉電阻。
關于D+、D-信號線上的電壓淺談一下,類似于485 總線,當485 總線的A 相電壓大,B相電壓200mV 時,差分放大器輸出邏輯“1”,反之“0”,USB 總線在低速設備端D-電壓如大于2.0V,D+電壓小于0.8V 為邏輯“1”反之為“0”,在主機端,一根為大于2.8V,另一根小于0.3 發,在此主機端不做深入探究。
1.6 NRZI 編碼及位填充
由于USB 總線沒有同步時鐘信號線,想要主機與設備建立良好通訊同步效果,只有從數據序列中提取同步時鐘。類似RS232 串口通訊,USB 通訊的建立也有起始信息,RS232 是一個起始位,而USB 起始位也有8 位,稱之為同步域(或段)格式為01010100。由于RS232 的通訊速率較低,所以兩端同步時鐘不大于5%即可實現良好通訊。然而USB 通訊最低速率也大于1Mb/S,對于時鐘的同步要求嚴格的多,況且USB 的數據包中的每個字節不象RS232 每個字節都有起始位(僅在包頭有同步域)。鑒此,USB 通訊時必須在數據包的位序列中提取同步信息。想象一下,如果數據包序列中數據位全是邏輯“1”或者全是邏輯“0”,芯片是無法提取同步信息的,為此需要一個高效的編碼方案,于是就有了NRZI 和位填充概念。何謂NRZI,看圖2 所示,NRZI 是非“1”跳變。由圖可知問題只解決一半,USB 規范約定當序列1 1中連續出現6 個邏輯“1”時加進一位“0”,如此問題全部解決,只不過是需要在接收后除去加進的一個位“0”,加進一位“0”的過程就是位填充。
1.7 USB 通訊模式
共四種模式:控制傳輸、等時傳輸、中斷傳輸、批量傳輸。
1.8 端點
端點也可稱為設備終端,每個USB 設備(USB 芯片)內可以有1—16 個端點,相對USB 芯片而言,各端點在通訊*能傳輸的數據包的大小和傳輸模式有所不同。在芯片內數據緩沖區的地址也有所變化。
2 嵌入式芯片(LM3S310)
Stellaris 系列微控制器(包括L3 同S310)是以ARM CortexTM-M3 為內核設計的。與早期的ARM7 相比較有功耗更低、中斷延時更小、代碼執行速度更快、價格更低等優勢。
3 實現原理
由于LM3S310 控制器每個GPIO 都可配置為中斷引腳,所以在這個應用中只需要用兩個同Port 的兩個相鄰引腳仿真USB 的D+和D-,圖3 所示。
4 軟件設計
圖4 是一個簡化程序流程圖,實際編程中還有很多細節,在此不再羅列。下面以中斷傳輸為例,將一個事務不同階段思想重點研討。
LM3S310 芯片利用兩個GPIO(USB)的中斷監控USB 總線,當USB 總線從空閑狀態變為傳輸狀態,也就是總線由主機發起與同步域(SYN),LM3S310 進入USB 接收程序。略過同步階段,收到的第一個字節是PID 字段(包標識類型)。這字段的低四位描述此包類型方向(IN 或OUT),接下來7 位表示設備的地址,然后是四位端點號索引。LM3S310 根據設備地址判定主機向本設備發起的請求,如果是則根據包的類型決定繼續接收數據或向主機發送數據。對OUT 類型數據的后5—16 位是CRC 校驗(根據配置決定CRC 的位數)。對IN 類型,LM3S310將準備好數據連同RC 校驗數據一同發往主機。數據傳輸階段完成后,主機或設備要確認傳輸成功。
對于低速設備的仿真,LM3S310 芯片的速度足以滿足要求(包括一些速度較快單片機,如:PIC、EMP、MSP),然而對全速設備的仿真,須要選擇速度更快嵌入式芯片,軟件實現的原理方法基本相同。
5 結論
使用微控制器仿真USB 設備的方法,極大地方便了用戶的開發,同時降低了功耗、成本。本文作者創新點在于利用MCU或嵌入式控制器實現USB設備功能。本方法在USB 讀卡器、USB 編程器、USB 接口轉RS232 及RS485 接口等方面有良好的應用前景。
責任編輯:gt
-
控制器
+關注
關注
112文章
16445瀏覽量
179446 -
嵌入式
+關注
關注
5092文章
19177瀏覽量
307653 -
usb
+關注
關注
60文章
7980瀏覽量
266079
發布評論請先 登錄
相關推薦
評論