潘錦明


摘? ?要:基于LPC1788微處理器(MCU)平臺設計的帶USB通信功能的設備,采用特殊的主機通信及設備端通信連接處理措施和方法,對連接故障進行有效的處理。文章從上層軟件/動態庫及設備端微處理器對USB連接異常采取了一些方法進行容錯來加強連接穩定性。實際項目中解決了在輕軌交通控制領域應用的USB通信接中斷等問題;有效克服了現場環境干擾對USB通信的影響,提高了設備通信的穩定性。
關鍵詞:USB通信;LPC1788;穩定性;增強方法
1? ? USB設備發展背景
目前,USB設備廣泛應用于各種終端設備,工業控制領域及自助設備對穩定性要求較高,USB設備由于電磁干擾、設備震動使線纜暫時松脫等原因,使得設備斷開連接后,將無法和主機進行通信,尤其在一些現場維護環境不佳的情況下,維護人員未能及時處理故障導致故障時間較長,從而影響設備使用。本文基于LPC1788的微處理器平臺,介紹一種方法,從上層軟件/動態庫及設備端微處理器對USB連接異常采取了一些方法進行容錯來加強連接穩定性。
2? ? LPC1788芯片介紹及應用特點
LPC1788是恩智浦半導體公司推出的基于ARM Cortex-M3的微處理器(MCU),具有3級流水線和哈佛結構,帶獨立的本地指令總線與數據總線,以及用于外設的性能略低的第3條總線。在最差的商用條件下的操作頻率可以高達120 MHz,包括高達512 KB的Flash存儲器及96 KB數據存儲器。含有多個USB,通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter,UART)、以太網MAC,集成電路總線(Inter-Integrated Circuit,IIC)等豐富的外圍設備通信接口。用于處理要求高集成度和低功耗的嵌入式應用,廣泛應用于通信、醫療、工業、消費電子及汽車等領域[1]。
3? ? USB連接穩定性增強方法
USB通信在輕軌交通控制的實際應用中,由于現場環境復雜,針對出現的一些故障,需要現場維護人員進行診斷。根據現場存在的問題,對USB連接通信穩定性進行加強,本文重點介紹以下兩種容錯增強方法,組合起來可提高通信穩定性。
3.1? 主機通信增強方法
在PC機端,目前,在主流的USB驅動開發工具實現的通信機制中,當USB通信出現失敗的時候不會對總線設備進行重新配置,一旦總線出現斷鏈,通信即使進行重試也不會恢復。因此,現從主機端實行通信的容錯及恢復措施。將主機通信不成功或者響應超時的設備重新打開并配置后再重新聯通主機上層軟件,在和USB設備進行通信時,若發現因為USB設備狀態斷開導致無法通信,可通過系統應用程序編程接口(Application Programming Interface,API)函數禁用該USB設備,重新根據該設備比例—積分—微分(Proportion-Integral-Differential,PID)及供應商ID號(Vendor ID,VID)進行重新搜索,若設備重新復位連接并成功枚舉配置完成,則重新啟用設備。若上述操作能夠恢復USB連接,則對USB設備恢復之前的通信操作,避免因無法通信導致操作失敗及設備停機[2]。工作流程如圖1所示。
3.2? 設備端通信增強方法
LPC1788微處理器的固件程序使用USB從機設備的協議棧,該協議棧使用標準的USB2.0協議規范,響應從PC端主機的通信,實現數據的輸入及輸出通信操作。為增強數據傳輸的可靠性,并USB數據幀采用控制模式進行傳輸。LPC1788的內部USB架構及USB設備電路原理如圖2所示。
若因為現場環境使得USB D+/D-電氣信號發生異常,導致USB總線掛起,利用LPC1788的USB總線檢測機制及硬件架構,通過固件程序進行硬件總線異常判斷并重新連接。基于LPC1788內部的USB goodlink檢測技術,在設備處于枚舉成功狀態后,通過讀取USB_UP_LED信號,判斷出硬件處于被掛起狀態,此時則在LPC1788內部的程序上對USB進行重新連接并初始化USB設備,使得USB總線重新連接到主機,并進行枚舉配置,枚舉恢復后對通信數據進行恢復。其中,USB_CONNECT為軟連接信號,用于控制USB總線D+信號電平狀態,控制USB_CONNECT從斷開到連接狀態,實現USB總線的熱復位操作,重新建立USB連接。
3.3? USB程序實現
基于LPC1788的微處理器(MCU)平臺及其USB外圍電路,將USB線纜連接到設備USB typeB接口上,另一端接在PC機USB接口上,實現主機通信及設備端通信連接。USB 驅動程序采用分層總線結構,主機和設備利用微處理器平臺上的USB控制器實現數據交互。
LPC1788固件程序在基于NXP(恩智浦)公司提供的一套完整固件程序框架基礎上,用戶代碼對設備端USB外設初始化、配置控制、通信過程、數據交互及命令執行等流程進行開發,實現和主機通信及執行主機下發的命令并完成相應命令的設備功能操作。固件在后臺程序上對USB連接實時狀態進行輪詢處理,其中,對USB連接配置及檢測斷鏈后容錯步驟的框架代碼程序如下:PC端的USB驅動程序是基于Linux2.6.x內核開發出來的,USB通用USB-skeleton開發程序建立在內核源碼樹driver/USB/根目錄下,便于程序員進行系統開發和應用程序編程。USB驅動注冊/注銷調用USB_driver結構體指針數據,可以直接集成在內核系統中,并進行USB驅動程序的運行和終止[4]。USB_driver結構體內函數豐富,USB驅動注冊代碼程序如下:
3.4? 實驗及結果分析
在實驗室驗證過程中,通過使用靜電干擾方法對USB的通信D-/D+進行空氣放電干擾,在8 kV及―4 kV靜電的重復干擾下,偶爾會出現USB通信斷鏈情況,且后續繼續進行通信也不能恢復。以上兩種措施組合后,在同樣的靜電環境干擾下,USB能夠從斷鏈的狀態中恢復過來并繼續通信,從而驗證了措施的有效性。
4? ? 結語
基于LPC1788微處理器強大的硬件功能,通過固件代碼對硬件的控制流程進行修改及優化,能夠根據具體問題進行有針對性的改善。經過現有項目輕軌站臺設備的現場驗證對比,采用上述用上層軟件/動態庫及設備固件兩種增強方法組合后的設備,原有的USB通信連接不上的問題得到徹底改善,且不需要人手對線纜進行插拔恢復,有效避免了現場環境干擾對USB通信質量的影響,提高了設備通信的穩定性,減少了設備整機的維護頻率。