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