1 設計背景 隨著嵌入式處理器設計功耗的降低,越來越多的設備朝著小型化和集成化發展,而外形的精簡和功能的增加對外圍接口功能的兼容性和通用性提出了新的要求,如何在有限的空間內通過最少的外圍接口實現最多的功能是嵌入式系統設計面臨的新課題之一。與研發新的通信協議相比,充分利用現有接U的多種通信模式更具有現實意義。本文提出一種針對USB接口工作模式復用的設計思路和實現方法。 2 雙模式接口的設計原理 通用串行總線(USB)接LJ是當前應用領域最為廣泛的接口之一,主要優點是速度快、功耗低,支持熱插拔和具有良好的兼容性。根據USB通信協議的設計,USB接口支持雙向通信,但只能有一個主控端對通信過程進行控制,因此USB設備存在兩種工作模式:USB.Host模式和USB.Device模式。 工作于USB—Host模式的設備包含USB主控器,并且能夠控制完成主機和USB設備之間的數據傳輸,USB系統的數據和命令的傳輸都是由USB—Host設備來啟動的,常見的有計算機以及其他具有USB主控芯片的設備。而工作于USB-Device模式的設備則可分為USB集線器和USB功能設備兩種。常見的u盤、MP3和移動硬盤都是USB功能設備。每個USB功能設備內部都包含有描述其功能和資源需求的配置信息,USB.Host設備必須在使用前對其進行配置。兩種模式的通信交互模式如圖1所示。 ![]() 在傳統的數據通信應用中由于設備功能單一,固定地將接口設定為Host或者Device能夠滿足實際需求,但在嵌入式系統的應用中往往會出現既需要訪問USB設備,又需要和計算機進行通信的情況,這就需要在同一個接口上實現Host和Device兩種工作模式。 3 雙工作模式的設計實現 3.1硬件設計 設計選用同時支持USB.Host和USB.Device模式的CH375A作為接口控制芯片,該芯片具有8位雙向數據總線和完整的讀寫、片選控制信號,具有全速USB—Host主機接口,支持動態切換主機與設備方式,兼容USB2.0協議。 在USB.HostI作模式下,CH375A提供了串行通信方式,通過串行輸入、輸出和中斷輸出與嵌入式主控芯片相連;在USB.DeviceT作模式下,CH375A內置了USB通信中的底層協議,可以采用方便的內置固件模式,也可以采用靈活的外置固件模式,完全滿足設計需求。 由于物理接口是復用的,連接時采用并行數據接口與主控芯片通信。兩種模式不能同時工作,而接口不能自動識別接入設備的工作模式,因此主從設備識別需要由嵌入式主控芯片根據外部輸入來識別。硬件連接圖如圖2所示。 ![]() 一圖中輸入輸出接口符號均為CH375A與主控芯片互連的信號,為增強USB信號強度,設計電路時對差分信號采用等長走線,并串接共模電感以減小串擾。 3.2軟件設計 設備上電時默認處于”未啟用的USB設備”方式,需要主控芯片根據外部輸入指定新的工作模式。當設備工作于USB.Host模式時,需要主動地對接入的設備進行檢測和初始化,具體流程如圖3所示。 ![]() 程序采用查詢方式檢測設備接入,檢測到設備的存在后首先獲取設備中斷狀態并清空中斷請求,初始化設備并查詢該設備的存儲特性,最后獲取設備容量信息并對設備進行讀寫操作。部分功能函數代碼如下: CheckExist(); //測試CH375A工作狀態; SetUSBMode(USB MODE5); //設置CH375A工作于Host模式; GetUSBStatus(); //初始化中斷狀態; USB_DISK_INIT(); //初始化USB設備; USB_DISK_INQUIRY() //查詢USB存儲設備的特性 GetUSBDiskSize(); //獲取設備容量; ... WriteUSBCmd(int8 x); //向設備寫入命令; WriteUSBData(int8 x); //向設備寫入數據; ... 當設備工作于USB.Device模式時,設備本身就成為一個需要主機控制的USB設備,在接入上位機后流程如圖4所示。 ![]() 此時設備與上位機的通信方式采用請求加應答方式,由上位機主動請求數據,設備被動地應答上傳數據。部分功能函數代碼如下: USB_Reset_ALL(): //設備復位; CheckExist(); 測試CH375A工作狀態; SetUSBMode(USB_MODE2); //設置CH375A工作于內部固件Device模式; GetUSBStatus(); //初始化中斷狀態: USB Open Device(); //通信之前必須先打開設備: USB_GetFirmwareInfo(); //獲取調試固件程序版本,并取消未完成的上傳數據塊 ... 當設備需要在Host模式和Device模式中進行切換時,由主控芯片接受外部輸入的模式切換信號,然后向CH375A發送模式轉換命令,流程如圖5所示。 ![]() 在不同模式之間切換,首先要切換至“未啟用的USB設備”模式,即上電復位后的默認模式。在經過一定的延時之后,再切換到所需的工作模式,如考慮進一步確保系統的穩定性還可在延時之前加入復位命令。具體功能函數如下: SetUSBMode(USB_MODE0); //設置CH375A為未啟用設備模式; Delay(1000): //延時 SetUSBMode(USB_MODEn);//設置CH375A為目標模式; .... 4 結束語 實踐證明,按照程序所規定的流程對USB接口進行配置在調試板上工作正常,在兩個模式切換的過程中沒有產生任何錯誤。由于芯片限制,此系統目前只能工作在USB1.1模式下,如何進一步提高兩種工作模式下的數據傳輸速率將是下一步研究的重點。 參考文獻 [1]南京沁恒電子有限公司.USB總線接口芯片CH375中文手冊 2005[EB/0L].http://www.winchiphead.eom/download/CH375/ CH375DS1.pdf [2]薛園園.USB應用開發技術大全[M].北京:人民郵電出版社,2007. [3]張蕾,楊潔,許力.基于ARM的CH375讀寫u盤的接口設計與實現[J].電工技術,2008(8):44-45,50. [4]杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003. [5]王殊,程卓.基于CH375的嵌入式I JS:B文件加密系統的設計[J].電子技術應用,2007,33(8):163—166. 作者簡介: 熊雪暉(1984-),男,61938部隊,助理工程師,研究方向:嵌入式系統設計與數據安全。聯系地址:北京市海淀區半壁街南路2號,中國人民解放軍61938部隊數據備份室(100089) 來源:電子技術2009,36(11) |