基于Blackfin532和Netchip2272的USB接口設(shè)計
Blackfin532和Netchip2272的數(shù)據(jù)交換采用中斷驅(qū)動方式,當(dāng)2272發(fā)生了特定的某些事件如收到主機發(fā)送的Setup包,收到主機發(fā)送的數(shù)據(jù)包等,需要Blackfin 532對事件進(jìn)行處理時,2272在其IRQ管腳產(chǎn)生1個低電平,與它相連接的PF10管腳在檢測到此低電平之后。在DSP內(nèi)部產(chǎn)生中斷,DSP在中斷處理函數(shù)內(nèi)部讀取2272相關(guān)寄存器的值,并根據(jù)這些寄存器的值對發(fā)生的事件作出相應(yīng)的處理,完成USB設(shè)備的枚舉和數(shù)據(jù)的傳輸。
2 USB接口電路的軟件設(shè)計
接口電路的軟件設(shè)計包括固件程序和PC端的驅(qū)動程序。固件程序的設(shè)計需要對硬件電路和USB的通信協(xié)議比較熟悉,因而開發(fā)起來難度比較大,這里對固件程序的開發(fā)作以介紹。
2.1 固件程序
設(shè)備的固件程序是指運行在設(shè)備端CPU中的程序,它主要用來完成對接收到的數(shù)據(jù)包的類型,內(nèi)容進(jìn)行識別和分析,并在分析的基礎(chǔ)上對主機的請求做出相應(yīng)的處理,完成設(shè)備的枚舉,讀取主機發(fā)送的數(shù)據(jù)和向主機發(fā)送數(shù)據(jù),從而實現(xiàn)和主機之間的數(shù)據(jù)交換。固件程序的流程圖如圖3所示。
固件程序主要包括初始化和中斷服務(wù)程序兩部分;
2.1.1 初始化
初始化程序用以對Blackfin532和Netchip2272進(jìn)行初始化設(shè)置。
(1)對Blaekfin532進(jìn)行軟復(fù)位,對PLL(Phase Locked Loop),EBIU(External Bus Interface Unit),PF口進(jìn)行設(shè)置,以及使能PF10引起的中斷。
(2)對Netchip2272進(jìn)行軟復(fù)位,對本地總線控制寄存器(LOCCTL,LOCCTL1),USB控制寄存器(USB_CTL0,USBCTL1),端點0的寄存器進(jìn)行設(shè)置,在中斷使能寄存器(IRQENDO,IRQENBl)中使能相應(yīng)的中斷。
2.1.2 中斷服務(wù)程序
中斷服務(wù)程序主要是用來處理主機的Setup標(biāo)準(zhǔn)請求,將主機發(fā)送過來的數(shù)據(jù)讀到Blacldin532中和將Blackfin532中的數(shù)據(jù)發(fā)送給主機。
主機要和USB設(shè)備進(jìn)行數(shù)據(jù)交換首先要正確的識別USB設(shè)備,這需要經(jīng)過一個枚舉過程,這個過程主要通過主機向設(shè)備發(fā)送Setup請求,設(shè)備對該請求進(jìn)行響應(yīng)來完成。
(1)USB設(shè)備加電,連接到主機的—個集線器端口。
(2)主機檢測到新設(shè)備連接后,總線復(fù)位。
(3)主機使用默認(rèn)地址(地址O)讀取設(shè)備描述符。
(4)主機給設(shè)備分配一個地址,在以后的通信里設(shè)備就只對這個地址的信息作出應(yīng)答。
(5)主機從新的地址獲取設(shè)備描述符。
(6)主機讀取配置描述符。
(7)主機讀取配置描述符集合,主機除了讀取配置描述符之外,還要讀取接口描述符及端點描述符。
(8)主機設(shè)置設(shè)備的配置。
在中斷服務(wù)程序中首先判斷是何種類型的中斷,如果是Setup請求中斷,則調(diào)用函數(shù)setup_handler()進(jìn)行處理,函數(shù)的參數(shù)為設(shè)備接收到的Setup數(shù)據(jù)包的第3~第8 bit(Setup~Setup)。在setup_handler()函數(shù)中根據(jù)Setup數(shù)據(jù)包的內(nèi)容跳轉(zhuǎn)至相應(yīng)的分支,對Setup請求進(jìn)行響應(yīng)。使用軟件Bushound5.0對設(shè)備的枚舉過程進(jìn)行觀察,捕獲的部分?jǐn)?shù)據(jù)如圖4所示。
評論