51單片機控制SL811HS的USB主機底層驅(qū)動
引言
基于usb接口的設(shè)備使用方便,性價比高,因此在人們的工作和生活中得到了廣泛的應(yīng)用,如u盤,移動硬盤,光驅(qū),usb攝像頭,usb鼠標(biāo)鍵盤等,同時,51系列單片機以其成熟的技術(shù)和高性價比吸引了大量國內(nèi)用戶,被廣泛應(yīng)用于測控和自動化領(lǐng)域,因此,如果在51單片機系統(tǒng)中增加usb主機接口,實現(xiàn)對usb從機設(shè)備的控制,則該單片機系統(tǒng)可以充分利用現(xiàn)有的各種usb從機設(shè)備,大大擴展單片機系統(tǒng)功能。
本設(shè)計實現(xiàn)了在51單片機系統(tǒng)中增加usb主機功能,采用普通51單片機外接專用usb接口芯片的方案,這種方案雖然會使系統(tǒng)傳輸速度受到限制,而且在穩(wěn)定性有所欠缺,但此方案設(shè)計靈活性高,且易于移植,為低成本產(chǎn)品的開發(fā)提供了廣闊前景,設(shè)計中采用51單片機是atmel公司的at89s52芯片,usb主機功能的擴展通過外接專用usb接口芯片sl811hs實現(xiàn),cypress公司的usb接口芯片sl811hs可以工作在主機或從機模式,支持usb1.1的全速和低速數(shù)據(jù)傳輸,工作在主機模式時,sl811hs可以自動檢測外設(shè)的插拔動作,可以按照外處理器(如單片機)的要求自動把數(shù)據(jù)整合為usb協(xié)議數(shù)據(jù)包進行數(shù)據(jù)傳輸。
本文將介紹單片機at89s52控制sl811hs的硬件設(shè)備和底層驅(qū)動的編寫,其中重點講述底層驅(qū)動的設(shè)計。
硬件設(shè)計
系統(tǒng)的硬件原理圖如圖1所示,at89s52的供電電壓為5v,sl811hs的為3.3v,盡管供電電壓不同,但根據(jù)芯片引腳的信號噪聲容限參數(shù)分析可知,at89s52與sl811hs之間的引腳可以直接相連,不需要電平轉(zhuǎn)換或緩沖。
軟件設(shè)計
usb主機驅(qū)動是一個高低層子程序的組合,實現(xiàn)usb傳輸和控制的過程是較高層子程序調(diào)用較低層子程序的過程,編寫usb主機驅(qū)動時,可按從低層往高層的順序逐層進行。
以usb主機枚舉從機設(shè)備的操作為例,實現(xiàn)該功能所需要的各層子程序?qū)哟侮P(guān)系如表1所示,本文將介紹較低層的幾個子程序的實現(xiàn),包括讀寫sl811hs內(nèi)部寄存器,傳輸事務(wù)的實現(xiàn),設(shè)備插拔檢測、復(fù)位等,其中,傳輸事務(wù)的實現(xiàn)是關(guān)鍵和難點,同時也是本文的重點。
單片機讀寫sl811hs
內(nèi)部寄存器
讀寫sl811hs內(nèi)部寄存器子程序是最低層的子程序,系統(tǒng)所進行的各種操作主要都是通過調(diào)用這些子程序讀寫sl811hs內(nèi)部寄存器實現(xiàn)的,例如,通過讀取sl811hs的狀態(tài)寄存器獲取sl811hs的狀態(tài)信息可以實現(xiàn)設(shè)備插拔檢測、設(shè)備速度檢測等,通過向sl811hs的相關(guān)控制寄存器寫入控制字節(jié)可以實現(xiàn)usb總線復(fù)位以及usb數(shù)據(jù)傳輸?shù)炔僮鳌?
sl811hs內(nèi)部寄存器
從編程結(jié)構(gòu)的角度來看,sl811hs內(nèi)部寄存器一共有256個單元,每個單元是一個字節(jié),其中地址為[00h]-[0fh]的前16個單元是sl811hs的狀態(tài)寄存器或控制寄存器(統(tǒng)稱為特殊寄存器),其余的是數(shù)據(jù)緩沖寄存器,表2列出了16個特殊寄存器的名稱和主要功能含義。
單片機讀寫sl811hs
內(nèi)部寄存器的實現(xiàn)
按照sl811hs的讀寫控制信號時序圖編寫單片機讀寫sl811hs內(nèi)部寄存器的子程序,使各控制引腳上按照規(guī)定的時序給出符合要求的信號脈沖。在這個程序中,單片機指令周期的大小將直接影響輸出信號的保持時長和時序關(guān)系。
初始化
初始化操作主要包括sl811hs芯片復(fù)位、usb總線復(fù)位、設(shè)備插拔檢測和設(shè)備usb數(shù)據(jù)傳輸速度檢測等,通過這些初始化操作,sl811hs將作為usb主機與從機之間建立一個底層協(xié)議連接關(guān)系,為后續(xù)的數(shù)據(jù)通信做好準(zhǔn)備。
sl811hs芯片復(fù)位
usb接口芯片sl811hs的復(fù)位是對芯片的狀態(tài)進行復(fù)位,包括了對芯片內(nèi)部寄存器值的復(fù)位,實現(xiàn)該操作不需要讀寫接口芯片內(nèi)部寄存器,只需向接口芯片的復(fù)位引腳輸入一個有效的復(fù)位脈沖即可。
usb總線復(fù)位。
按照usb協(xié)議,usb總線復(fù)位是指在usb數(shù)據(jù)線上輸出se0態(tài),并保持10ms以上,接在usb總線上的從機設(shè)備受到這個復(fù)位信號后就會進行自身的復(fù)位操作,為接下來的usb數(shù)據(jù)傳輸作好準(zhǔn)備,通過設(shè)置接口芯片的ctrlreg[05h]寄存器的第4、3位為邏輯"01",并保持10ms,然后再把它們恢復(fù)為邏輯"00",就可以讓接口芯片產(chǎn)生usb總線復(fù)位信號。
設(shè)備插拔檢測和設(shè)備速度檢測
在usb協(xié)議的物理層上,usb從機設(shè)備是否接在usb總線上是通過檢測總線的電壓得知的,根據(jù)該電壓的高低,還可獲得usb總線上的設(shè)備所支持的速度(例如,在usb1.1協(xié)議中,分有低速和全速)。usb主機接口芯片sl811hs把這個物理層的電壓檢測結(jié)果反應(yīng)到狀態(tài)寄存器的取值上,通過讀取這些狀態(tài)寄存器的值,可以獲知當(dāng)前的設(shè)備插拔狀態(tài)的設(shè)備速度。
usb主機所進行的初始化操作除了上述3項外,還包括幀起始包啟動/禁止的設(shè)置、幀同步設(shè)置、幀定時初值的設(shè)置等,它們都是通過對接口芯片特殊寄存器進行讀寫而實現(xiàn)的。
傳輸事務(wù)的實現(xiàn)
根據(jù)usb1.1協(xié)議,一個傳輸事務(wù)一般包含3個包(packet)的傳輸,分別是標(biāo)記包(token packet)的傳輸,分別是標(biāo)記包(token
packet),數(shù)據(jù)包(data packet)和握手包(handshake packet)。usb數(shù)據(jù)傳輸方式一共有四種,分別是控制傳輸(control
transfer)、同步傳輸(isochronous transfer)、中斷傳輸(interrupt transfer)和批傳輸(bulk
transfer)。其中,控制傳輸方式至少由2個傳輸事務(wù)構(gòu)成,其他三種傳輸方式則都各由1個傳輸事務(wù)構(gòu)成,可見,傳輸事務(wù)在usb傳輸中至關(guān)重要。
一個典型的傳輸事務(wù)含有3個包的傳送,這連續(xù)的3個包數(shù)據(jù)流如表3所示。
使用sl811hs設(shè)計usb主機系統(tǒng)時,用戶只需要讓單片機設(shè)置sl11hs內(nèi)部幾個相關(guān)的特殊寄存器,然后把傳輸事務(wù)啟動位使能(置為邏輯"1"),就可以讓接口芯片自動完成這3個包的發(fā)送與接收,在表3所示的例子中,第n個包(標(biāo)記包)和第n+2個包(握手包)都是由主機法給從機的,第n+1個包(數(shù)據(jù)包)是由從機發(fā)送給主機的。這個傳送方向和第n+2個包的傳送方向都是由標(biāo)記包中的標(biāo)識域取值決定的,其規(guī)律可參考usb協(xié)議。
如果傳輸事務(wù)的數(shù)據(jù)包是由從機發(fā)送給主機,則該傳輸事務(wù)屬于輸入類型,稱為輸入傳輸事務(wù),反之則稱為輸出傳輸事務(wù),可見,表3例子是一個輸入傳輸事務(wù),對于一個輸入傳輸事務(wù),單片機通過設(shè)置
sl811hs內(nèi)部特殊寄存器就可以決定其取值的包域主要有:標(biāo)記包中的標(biāo)識域、地址域或端點域,數(shù)據(jù)包中的標(biāo)識域。在輸入傳輸事務(wù)中,雖然數(shù)據(jù)包并不是主機發(fā)送的,但之所以仍需要單片機設(shè)置與數(shù)據(jù)包標(biāo)識域相關(guān)的寄存器,是因為主機在該傳輸事務(wù)中將只認(rèn)可標(biāo)識域符合所設(shè)置值的數(shù)據(jù)包。其余部分,如標(biāo)記包中的其他域及握手包的內(nèi)容則都是sl811hs根據(jù)情況自動產(chǎn)生的。
主機接口芯片sl811hs完成一次輸入傳輸事務(wù)后,如果傳輸成功,單片機就可以從sl811hs的數(shù)據(jù)緩沖寄存器讀到從機發(fā)送過來的數(shù)據(jù),此處,數(shù)據(jù)緩沖區(qū)的首地址是由單片機預(yù)先通過設(shè)置控制寄存器指定的。
對于輸出傳輸事務(wù),單片機同樣需要設(shè)置相關(guān)的寄存器以確定標(biāo)記包的標(biāo)識域、地址域、端點域和數(shù)據(jù)包的標(biāo)識域,以及存放發(fā)送數(shù)據(jù)的緩沖區(qū)首地址,并且,這個緩沖區(qū)中的數(shù)據(jù)也是由單片機寫入的。
具體的,單片機控制usb主機接口芯片進行一次傳輸事務(wù)所需要知執(zhí)行的操作步驟如下:
首先,如果是輸出傳輸事務(wù),則需要把將在數(shù)據(jù)包中發(fā)送給從機的數(shù)據(jù)存放到sl811hs的數(shù)據(jù)緩沖區(qū)中。
其次,做好相關(guān)的傳輸準(zhǔn)備工作,即設(shè)置接口芯片中的4個特殊寄存器,這4個寄存器的名稱及其在傳輸事務(wù)中的作用如表4的前4項所列。
第三、啟動傳輸事務(wù):把寄存器ep0control[00h]或ep1control[08h]的第0位(即傳輸事務(wù)啟動位)置為邏輯"1",即可啟動傳輸事務(wù)。但在此之前必須他這個寄存器中其他位設(shè)置好(或與啟動位同時設(shè)置),與這個寄存器相關(guān)的包域如表4中最后一項所列。
最后,如果傳輸成功,而且該傳輸事務(wù)是輸入性質(zhì),則單片機可讀取數(shù)據(jù)緩沖區(qū),獲得從機發(fā)送過來的數(shù)據(jù)。
結(jié)語
在51單片機控制usb接口芯片sl811hs的底層驅(qū)動中,讀寫sl811hs內(nèi)部寄存器的子程序是最底層的,各種usb傳輸?shù)妮^低層操作,如總線復(fù)位、插拔檢測、速度檢測以及傳輸事務(wù)等,都主要是通過讀寫sl811hs內(nèi)部特殊寄存器實現(xiàn)的,其中,傳輸事務(wù)的實現(xiàn)直接涉及了5個特殊寄存器的讀寫。
在本文所述的底層驅(qū)動基礎(chǔ)上,添加相關(guān)的高層程序,使該51單片機系統(tǒng)實現(xiàn)了對各種usb從機設(shè)備的枚舉控制和對u盤的數(shù)據(jù)交換,為51單片機系統(tǒng)的開發(fā)提供了廣闊的應(yīng)用前景,同時也對其他平臺的usb主機設(shè)計有一定的參考價值。
評論