新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片無操作系統(tǒng)的 USB 主機(jī)控制器接口

基于單片無操作系統(tǒng)的 USB 主機(jī)控制器接口

作者: 時(shí)間:2010-07-05 來源:網(wǎng)絡(luò) 收藏

3.3 HCD 的數(shù)據(jù)管理

HCD 的主要功能是完成對(duì)HC 的驅(qū)動(dòng),包括對(duì)的硬件初始化和控制管理, 并與HC 合作完成 各種事務(wù)處理。它將各種要傳輸?shù)臄?shù)據(jù)TD 鏈入相應(yīng)的ED 并啟動(dòng) HC 進(jìn)行傳輸,HC 把接收的數(shù)據(jù)存入相應(yīng)的TD,HCD 則將這些結(jié)果返回給D 層,此 外HCD 還完成對(duì)HC 的配置和驅(qū)動(dòng)等操作。由于對(duì)可重用性考慮和便于對(duì)HC 的管理,首 先定義了一個(gè)OHCI 的數(shù)據(jù)結(jié)構(gòu),通過這個(gè)數(shù)據(jù)結(jié)構(gòu)來對(duì)和各種傳輸類型的數(shù)據(jù) 進(jìn)行管理。該結(jié)構(gòu)體具體如下:

typedef struct ohci{

struct root_hub rh;//根集線器的結(jié)構(gòu)體

struct ohci_hcca *hcca;//HCCA 結(jié)構(gòu)體

struct ohci_regs *regs;//OHCI 操作寄存器結(jié)構(gòu)體

struct usb_device *dev;// 設(shè)備

U32 hc_control;//控制寄存器的copy

int ohci_int_load[32]; //32 個(gè)中斷鏈?zhǔn)褂?p>ed_t *ed_rm_list[2]; //指向移除的ED 鏈

ed_t *ed_bulktail; //批量傳輸ED 的鏈尾

ed_t *ed_controltail; //控制傳輸ED 的鏈尾

U32 status;//HC 工作狀態(tài)

}ohci_t;

OHCI 規(guī)范中定義了4 個(gè)鏈表:控制傳輸數(shù)據(jù)鏈表,批量傳輸數(shù)據(jù)鏈表,完成數(shù)據(jù)鏈表 和周期性數(shù)據(jù)鏈表,其中除了完成數(shù)據(jù)鏈表是一維鏈表外,其他的鏈表都是二維鏈表(如圖 2 所示),主要由數(shù)據(jù)結(jié)構(gòu)TD 和ED 組成。硬件通過寄存器訪問每個(gè)鏈表來得到相關(guān)的USB 數(shù)據(jù)包,并將其發(fā)送到USB 總線上。主機(jī)控制器驅(qū)動(dòng)程序則根據(jù)實(shí)際的數(shù)據(jù)傳 輸需要,構(gòu)建相應(yīng)的ED 并將要傳輸?shù)臄?shù)據(jù)轉(zhuǎn)為TD 格式,所有的同類型ED 被連接在一起, 而TD 表述才是最終要在USB 總線上傳輸?shù)臄?shù)據(jù)包,同時(shí)屬于同一個(gè)USB 設(shè)備端點(diǎn)的TD 被鏈接在一起,并掛在相應(yīng)的ED 上。

當(dāng)主機(jī)控制器完成鏈接在相關(guān)鏈表上的TD 后,會(huì)將該TD 從相應(yīng)的鏈表上取下,并鏈 接到完成數(shù)據(jù)鏈表上。主機(jī)控制器驅(qū)動(dòng)程序則通過對(duì)該鏈表的訪問來獲得已經(jīng)傳輸完成的數(shù) 據(jù)包。此時(shí)HCD 可以將這些返回的數(shù)據(jù)放入到相應(yīng)的URB 中,由USBD 向上層傳輸。

4 試驗(yàn)實(shí)例

由USBD 層初始化URB 結(jié)構(gòu),并通過HCD 的函數(shù)ohci_submit_urb()傳遞給HCD 層。通過在S3C2410 實(shí)驗(yàn)平臺(tái)上的實(shí)驗(yàn)表明主機(jī)控制器驅(qū)動(dòng)程序能夠很好的向USBD 層提 供服務(wù)并管理HC。

5 結(jié)束語

主機(jī)控制器是USB 主機(jī)系統(tǒng)的硬件核心,主機(jī)控制器驅(qū)動(dòng)則是USB 系統(tǒng)軟件的最底層實(shí) 現(xiàn)。依據(jù)在USB 協(xié)議底層的主機(jī)開發(fā)的實(shí)踐,詳細(xì)介紹了OHCI 的主機(jī)控制器的規(guī) 范,列舉了所構(gòu)建的數(shù)據(jù)結(jié)構(gòu)以及函數(shù),實(shí)現(xiàn)了獨(dú)立于的HCD。

本文作者創(chuàng)新點(diǎn):實(shí)現(xiàn)了嵌入式系統(tǒng)中OHCI 的主機(jī)控制器驅(qū)動(dòng),對(duì)整個(gè)USB 協(xié)議棧采 用模塊化分層設(shè)計(jì),開發(fā)的HCD 獨(dú)立于,適合于無系統(tǒng)的USB 主機(jī)。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉