基于Linux下USB主機(jī)接口設(shè)計
2.3 USB主機(jī)端口設(shè)計
AT91SAM7X256的USB主機(jī)端口原理圖,如圖3所示。SL811HS/T選用48引腳的TQFP封裝形式,SL811HS/T既能用作Host模式又能用作Slave模式。將SL811HS/T的M/S引腳接地,即設(shè)為低電平信號(M/S=0),選擇作為主機(jī)端口。
SL811HS/T的D0~D7端口為雙向數(shù)據(jù)I/O端口,與控制器的PAl0~PAl7端口相連,實現(xiàn)數(shù)據(jù)通信。SL811HS/T的nRD引腳與AT91SAM7X256的PA9相連,nWR引腳與AT9lSAM7X256的PA8相連,SL811HS/T的nCS引腳與AT91SAM7X256的PA7相連,AO引腳與AT91SAM7X256的PA6相連,控制SL811HS/T的讀寫狀態(tài),如圖4所示。
訪問存儲器和控制寄存器的空間時,先設(shè)A0=0后寫地址,接下來設(shè)A0=1,再進(jìn)行寄存器/存儲器讀/寫周期。當(dāng)nWR或nCS處于無效時,SL811HS寫或讀操作終止。對于連接到SL81lHS的設(shè)備,在write nWR信號之前取消片選nCS,數(shù)據(jù)將一直保持并與指定的值相同。SL811HS/T的nRST引腳與AT91SAM7X256的PAl8相連,實現(xiàn)軟件低電平復(fù)位功能。SL811HS/T的引腳7、8與USB接口的DATA+,DATA-相連實現(xiàn)數(shù)據(jù)通信。S-L811HS/T的Clk/X1引腳和X2引腳與外接12 MHz晶振相連。
3 系統(tǒng)軟件實現(xiàn)
USB設(shè)備驅(qū)動程序設(shè)計包括主機(jī)端設(shè)備驅(qū)動程序、主機(jī)控制器驅(qū)動程序和設(shè)備端驅(qū)動程序3部分組成。主機(jī)端設(shè)備驅(qū)動程序就是設(shè)備驅(qū)動程序,它是主機(jī)環(huán)境中為用戶應(yīng)用程序提供一個訪問USB外設(shè)的接口。Linux為這部分驅(qū)動程序提供編程接口,設(shè)計者只要按照需求編寫驅(qū)動程序框架,通過調(diào)用操作系統(tǒng)提供的APl接口函數(shù)可以完成對USB外設(shè)的特定訪問。
3.1 USB設(shè)備驅(qū)動程序框架
圖5所示Linux中USB驅(qū)動的體系結(jié)構(gòu)。Linux USB主機(jī)驅(qū)動由3部分組成:USB主機(jī)控制器驅(qū)動,USB驅(qū)動和不同的USB設(shè)備類驅(qū)動。USB驅(qū)動程序首先要向Linux內(nèi)核進(jìn)行注冊自己,并告之系統(tǒng)該驅(qū)動程序所支持的設(shè)備類型及其所支持的操作。這些信息通過usb_driver結(jié)構(gòu)傳遞。
評論