天天看點

rs232轉usb驅動for server 2008_采用USB控制器實作USB主機功能的設計研究

通用串行總線(USB)接口具有簡單靈活、高帶寬、易于擴充和熱插拔等優點,它目前已成為數位裝置的标準接口之一,小到 U 盤、MP3,大到數位相機、列印機,USB 接口的身影無處不在。但我們目前所使用的 USB 移動裝置多為 USB 的外設(Device) , 比如 USB 的移動硬碟、USB 接口的數位相機,一般隻能在 PC上使用,即隻能通過 PC 實作檔案和資料的交換。

業界和使用者的需求呼喚 USB 主機的嵌入式化,是以在嵌入式系統中實作 USB 主機功能成了 USB 設計領域的熱點之一。

迄今為止,嵌入式 USB 主機的最大市場和增長點在移動消費電子裝置領域, 比如 PDA 與 USB 記憶棒傳遞資料、MP3 之間傳遞歌曲、數位相機連接配接列印機等。

嵌入式 USB 主機也逐漸用于工業測控領域,用來實作資料的采集和交換。原來資料采集和交換大多是使用軟碟、串行接口(RS232/RS485)或以太網等方式。軟碟存儲容量小、可靠性差,而串行接口或以太網都需要布線施工,接入成本大,而且不具備移動性。現在,越來越多的嵌入式系統采用通過 USB 總線連接配接的測控裝置。

USB 控制器 ISP1161 簡介

一個 USB 系統一般由一個 USB 主機(HOST)、一個或多個 USB 集線器(HUB)和一個或多個 USB 裝置節點(NODE)組成。USB 協定規定了 USB 主機與 USB 裝置的主從關系,是以 USB 接口産品的應用離不開 USB 主機的開發。USB 主機是包含 USB 軟體驅動和 USB 主機硬體功能接口的計算機系統實體。USB 主機硬體是指 USB 主機控制器,它規定了 USB 主機硬體接口,因而在設計 USB 協定棧時必須了解相關的 USB 主機控制器規範。

針對嵌入式系統應用的 USB 主機控制器規範是康柏、微軟、松下等公司提出的 OHCI(開放式主機控制器接口)标準。

飛利普公司的 ISP1161 晶片支援 OHCI 标準,它是一個符合 USB2.0 全速規範的單片主機控制器和裝置控制器。ISP1161 可以僅作為主機控制器或裝置控制器使用,也可以同時作為主機和裝置控制器使用。

ISP1161 可分為四大功能子產品:

1)主機控制器子產品:實作主機控制器的功能。提供兩個下行端口,每個下行端口都有自己的過流檢測輸入管腳和電源轉換控制輸出管腳。

2)裝置控制器子產品:實作裝置控制器的功能。提供一個上行端口,有其自身的 VBUS 檢測輸入管腳。

3)微處理器接口子產品:兩個 USB 控制器共用一個微處理器總線接口,它們有相同的資料總線,I/O 位址不同。它們也有各自的中斷請求輸出管腳和獨立的 DMA 通道。

4)電源調整和上電複位子產品:除了可以軟體複位外,還可以通過 RESET_N 管腳實作硬體複位。ISP1161 隻接受 5V 或 3.3V 的電壓,當輸入 5V 電壓時,電源調整器會将其調整為 3.3V。

ISP1161 主機控制器子子產品的功能框圖示于圖 1,主機控制器的下行端口可與任意一個符合 USB 規範的 USB 裝置和包含 USB 上行端口的 USB 集線器相連。類似地,裝置控制器的上行端口可與任意一個符合 USB 規範的 USB 主機和包含 USB 下行端口的 USB 集線器相連。

rs232轉usb驅動for server 2008_采用USB控制器實作USB主機功能的設計研究

相關嵌入式應用系統的架構

本文涉及的嵌入式系統是一個指紋驗證系統,其總體結構如圖 2 所示。系統采用英特爾公司的 32 位 400MHz 微處理器 PXA255 以滿足指紋識别系統計算量大的需要,PXA255 具有豐富的外圍接口,如:LCD 控制器、序列槽、CF 卡接口、USB 用戶端口,但沒有 USB 主機控制器。此外,硬體平台還包括存儲子產品、資料采集子產品、USB 子產品、網絡通信子產品和調試及下載下傳接口子產品,系統總體結構框圖如圖 2 所示。

rs232轉usb驅動for server 2008_采用USB控制器實作USB主機功能的設計研究

32 位微處理器 PXA255 中央處理器結合一個 51 單片機完成對整個系統的控制操作。

8M 的 FLASH 和 32M 的 SDRAM 用作存儲子產品。

具有 USB 裝置接口的富士通公司指紋傳感器晶片 MBF200 實作對指紋資料的采集和轉換。

通過 USB 主機接口實作嵌入式系統與 USB 裝置——MBF200 之間的通信。

鑒于該指紋驗證系統要實作網絡化,因而配置了 CF 接口無線網卡。

通過 PXA255 本身的序列槽控制器與 PC 通信,用于調試和下載下傳 Windows CE 鏡像檔案。

人機互動用于顯示運作結果和注冊 / 增删指紋資料。

對于 PXA255 處理器而言,ISP1161 類似于一個具有 16 位資料總線的儲存設備。ISP1161 工作在并行 I/O(PIO)模式,隻占用兩個 I/O 端口和微處理器兩個記憶體空間。微處理器用兩根位址線 A0 和 A1 來讀寫 ISP1161 内部寄存器和 FIFO 緩沖 RAM。位址線 A0 用來選擇傳輸指令資料:A0=1,處理器通路 ISP1161 的指令端口;A0=0,處理器通路 ISP1161 的資料端口。位址線 A1 用來選擇主機控制器或裝置控制器模式:A1=0,切換至主機控制器模式;A1=1,切換至裝置控制器模式。本系統中 ISP1161 和 PXA255 的硬體接口如圖 3 所示。用可程式設計 I/O 模式實作資料通信,即 ISP1161 的資料總線經總線驅動接到 PXA255 的資料總線 D[0:15],A0 和 A1 分别接到 PXA255 的 A1 和 A2 以實作主機和裝置、指令和資料端口的選擇。I/O 口位址的完全解碼包括晶片選擇信号 CS 及位址線 A1 和 A0。I/O 口的通路方向由 RD 及 WR 信号控制:當 RD 為低時,微處理器從 ISP1161A1 資料口讀取資料;當 WR 為低時,微處理器向指令端口寫入一個指令,或向資料端口寫入資料。

rs232轉usb驅動for server 2008_采用USB控制器實作USB主機功能的設計研究

USB 主機軟體設計

系統的軟體平台是微軟公司的 Windows CE。

ISP1161 軟體模型

USB 主機軟體系統包括通用串行總線驅動程式(USBD)、主機控制器驅動程式(HCD)和用戶端軟體。用戶端軟體是應用代碼或 USB 類驅動程式。USBD 和 HCD 共同用作 USB 主機堆棧。USBD 以 I/O 請求包的形式指定某一特定通道傳輸資料,并把請求分解成多個事務。HCD 與 ISP1161 之間以 PTD(Philips Transfer Description)的形式進行通信。I/O 請求包的資料在底層被打包成 PTD 的格式後再與 ISP1161 進行通信。

ISP1161 隻提供了一部分符合 OHCI 标準的寄存器,而其硬體是支援 OHCI 标準的。是以為使它完全符合 OHCI 标準,我們設計時在系統記憶體中定義一套完全符合 OHCI 規範的操作寄存器和 HCCA 控制器通信區,軟體讀寫其中資料,以軟體模拟硬體來實作完整的 OHCI 規範,并按照 OHCI 規範的要求,在系統記憶體中維護了一套完整的資料結構,以完成對主機控制器初始化、狀态讀取并收集 USB 主機與裝置通信的詳細資訊。

ISP1161 的資料傳輸模式

ISP1161 提供了 HC 控制和狀态寄存器、ATL 緩沖區和 ITL 緩沖區。其中 HC 控制和狀态寄存器包括一套可操作的符合 OHCI 的寄存器(32 位)和一套 ISP1161 特定的寄存器(16 位)。通過對相應寄存器的操作,主機控制器驅動程式就可以完成對主機控制器初始化和配置工作。ATL 緩沖區和 ITL 緩沖區用來實作 USB 系統支援的四種不同資料傳輸:控制傳輸、批量傳輸、中斷傳輸和實時傳輸。ITL 是實時傳輸的緩沖的 FIFO,而 ATL 是 USB 其它三種類型傳輸的緩沖 FIFO。

ISP1161 資料傳輸的具體過程為:硬體初始化完成後,調用 HCD 的 MakePTDdata 函數在系統存儲器中以 PTD 資料結構定義一塊資料緩沖區。再調用 SendPTD 函數發送 PTD 資料,其中的 WritePTDtoATL 函數将資料複制到 ATL 或 ITL 緩沖區。通過 ISP1161 硬體掃描 ATL 或 ITL 緩沖區以實作與 USB 終端裝置進行通信。

硬體掃描過程就是把資料發送到總線上,以硬體掃描 ATL 緩沖區為例:當 HCD 通過 HcTransferCounter 寄存器向 ATL 緩沖區寫入 HcATLBufferPort 寄存器指定的位元組數時,主機控制器硬體開始掃描 ATL 緩沖區;當操作完成後,HcBufferStatusPort 寄存器中的位 ATLBufferFull 被置位,ATLBufferFull 位從邏輯 0 到邏輯 1 的跳變使硬體開始掃描 ATL 緩沖區内的 PTD;當 ATLInt 中斷産生時,表明硬體停止掃描 ATL 緩沖區,HcBufferStatus 寄存器中的位 ATLBufferDone 被置位,HCD 又可以通路 ATL 緩沖區了。相關的部分僞代碼如下:

#define hccport base_address | 0x02

#define hcdport base_address

#define CMD_RD 0x00

#define CMD_WR 0x80

void SendlPTD(UINT16 *pPTDdata){ // pPTDdata 指針指向 PTD 資料内容;

WritePTDtoATL(pPTDdata, 16); // 把 PTD 資料寫入 ATL 緩沖區,16 為寫入資料位元組數;

do {ReadPTDfromATL(pPTDdata, 72); // 從 ATL 緩沖區讀取 PTD 資料,72 為讀取的位元組數;

bfAcTIve = (*pPTDdata) & PTD_ACTIVE; // 檢查有效位,PTD 結束後主要器将把該位清零。

}while(bfAcTIve != 0)}

void WritePTDtoATL(UINT16 *pPTDdata, UINT totalbytes){

WriteHCR_UINT16(IDX_HcTransferCounter, databytes);// 向 HcTransferCounter 寄存器寫入要傳輸的位元組數;

*hccport = IDX_HcATLBufferPort | COM_WR; // 向 ATLBuffer 端口寫入寫指令;

DisableInterrupts; // 禁止所有中斷;

for (UINT m= totalbytes; m》0; m -=4 ){ // 為了維護 PTD 資料在 ATL 緩沖區中的結構,采取每四位元組循環

*hcdport = * pwPTDdata ++; // 的方式;

*hcdport = * pwPTDdata ++; }

EnableInterrupts;} // 使能中斷;

void ReadPTDfromATL(UINT16 * pPTDdata, UINT totalbytes){

WriteHCR_UINT16(IDX_HcTransferCounter, totalbytes);

*hccport = IDX_HcATLBufferPort | COM_RD;

DisableInterrupts;

for (UINT m= totalbytes; m》0; m -=4 ){

* pwPTDdata ++ = *hcdport;

* pwPTDdata ++ = *hcdport; }

EnableInterrupts;}

資料結構連結清單的處理

在 HCD 将 PTD 從系統記憶體複制到 ATL 或 ITL 緩沖區之前,HCD 必須通過集合資料結構來建立和追蹤 PTD。HCD 的責任是追蹤所有已連接配接裝置的每個端點的屬性,如端點最大封包大小、端點位址和該端點從屬的裝置位址。另外,HCD 必須管理每個端點新的 PTD 的産生和已經完成的 PTD 的處理。是以使用一個有效的資料結構體系可以加快主機控制器的操作。本設計實作的資料結構類似于 OHCI 中定義的資料結構,如圖 4 所示。此資料結構由三部分組成:三種類型端點的隊列(控制傳輸端點、批量傳輸端點和中斷傳輸端點)、每種端點的一個 PTD 列和一個完成隊列。每個列隊由一個全局指針指定,這個全局指針保持隊列中第一個端點(EP)隊列頭的位址。每個 EP 隊列頭指向一個 PTD 列。一個 PTD 列保留着等待被主機控制器處理的 PTD。在控制、批量和中斷傳輸中,PTD 被複制到 ATL 緩沖區。一旦 PTD 被放入 ATL 緩沖區,主機控制器就在下一幀中處理該 PTD。

rs232轉usb驅動for server 2008_采用USB控制器實作USB主機功能的設計研究

結束語

在 USB 主機端功能實作後,我們又開發了 USB 裝置——指紋傳感器 MBF200 的驅動程式,并按照規定要求實作了指紋資料的采集和傳輸。