51單片機控制SL811HS的USB主機底層驅動(dòng)
引言
基于usb接口的設備使用方便,性?xún)r(jià)比高,因此在人們的工作和生活中得到了廣泛的應用,如u盤(pán),移動(dòng)硬盤(pán),光驅?zhuān)瑄sb攝像頭,usb鼠標鍵盤(pán)等,同時(shí),51系列單片機以其成熟的技術(shù)和高性?xún)r(jià)比吸引了大量國內用戶(hù),被廣泛應用于測控和自動(dòng)化領(lǐng)域,因此,如果在51單片機系統中增加usb主機接口,實(shí)現對usb從機設備的控制,則該單片機系統可以充分利用現有的各種usb從機設備,大大擴展單片機系統功能。
本設計實(shí)現了在51單片機系統中增加usb主機功能,采用普通51單片機外接專(zhuān)用usb接口芯片的方案,這種方案雖然會(huì )使系統傳輸速度受到限制,而且在穩定性有所欠缺,但此方案設計靈活性高,且易于移植,為低成本產(chǎn)品的開(kāi)發(fā)提供了廣闊前景,設計中采用51單片機是atmel公司的at89s52芯片,usb主機功能的擴展通過(guò)外接專(zhuān)用usb接口芯片sl811hs實(shí)現,cypress公司的usb接口芯片sl811hs可以工作在主機或從機模式,支持usb1.1的全速和低速數據傳輸,工作在主機模式時(shí),sl811hs可以自動(dòng)檢測外設的插拔動(dòng)作,可以按照外處理器(如單片機)的要求自動(dòng)把數據整合為usb協(xié)議數據包進(jìn)行數據傳輸。
本文將介紹單片機at89s52控制sl811hs的硬件設備和底層驅動(dòng)的編寫(xiě),其中重點(diǎn)講述底層驅動(dòng)的設計。
硬件設計
系統的硬件原理圖如圖1所示,at89s52的供電電壓為5v,sl811hs的為3.3v,盡管供電電壓不同,但根據芯片引腳的信號噪聲容限參數分析可知,at89s52與sl811hs之間的引腳可以直接相連,不需要電平轉換或緩沖。

軟件設計
usb主機驅動(dòng)是一個(gè)高低層子程序的組合,實(shí)現usb傳輸和控制的過(guò)程是較高層子程序調用較低層子程序的過(guò)程,編寫(xiě)usb主機驅動(dòng)時(shí),可按從低層往高層的順序逐層進(jìn)行。
以usb主機枚舉從機設備的操作為例,實(shí)現該功能所需要的各層子程序層次關(guān)系如表1所示,本文將介紹較低層的幾個(gè)子程序的實(shí)現,包括讀寫(xiě)sl811hs內部寄存器,傳輸事務(wù)的實(shí)現,設備插拔檢測、復位等,其中,傳輸事務(wù)的實(shí)現是關(guān)鍵和難點(diǎn),同時(shí)也是本文的重點(diǎn)。

單片機讀寫(xiě)sl811hs
內部寄存器
讀寫(xiě)sl811hs內部寄存器子程序是最低層的子程序,系統所進(jìn)行的各種操作主要都是通過(guò)調用這些子程序讀寫(xiě)sl811hs內部寄存器實(shí)現的,例如,通過(guò)讀取sl811hs的狀態(tài)寄存器獲取sl811hs的狀態(tài)信息可以實(shí)現設備插拔檢測、設備速度檢測等,通過(guò)向sl811hs的相關(guān)控制寄存器寫(xiě)入控制字節可以實(shí)現usb總線(xiàn)復位以及usb數據傳輸等操作。
sl811hs內部寄存器
從編程結構的角度來(lái)看,sl811hs內部寄存器一共有256個(gè)單元,每個(gè)單元是一個(gè)字節,其中地址為[00h]-[0fh]的前16個(gè)單元是sl811hs的狀態(tài)寄存器或控制寄存器(統稱(chēng)為特殊寄存器),其余的是數據緩沖寄存器,表2列出了16個(gè)特殊寄存器的名稱(chēng)和主要功能含義。
單片機讀寫(xiě)sl811hs
內部寄存器的實(shí)現
按照sl811hs的讀寫(xiě)控制信號時(shí)序圖編寫(xiě)單片機讀寫(xiě)sl811hs內部寄存器的子程序,使各控制引腳上按照規定的時(shí)序給出符合要求的信號脈沖。在這個(gè)程序中,單片機指令周期的大小將直接影響輸出信號的保持時(shí)長(cháng)和時(shí)序關(guān)系。
初始化
初始化操作主要包括sl811hs芯片復位、usb總線(xiàn)復位、設備插拔檢測和設備usb數據傳輸速度檢測等,通過(guò)這些初始化操作,sl811hs將作為usb主機與從機之間建立一個(gè)底層協(xié)議連接關(guān)系,為后續的數據通信做好準備。
sl811hs芯片復位
usb接口芯片sl811hs的復位是對芯片的狀態(tài)進(jìn)行復位,包括了對芯片內部寄存器值的復位,實(shí)現該操作不需要讀寫(xiě)接口芯片內部寄存器,只需向接口芯片的復位引腳輸入一個(gè)有效的復位脈沖即可。
usb總線(xiàn)復位。
按照usb協(xié)議,usb總線(xiàn)復位是指在usb數據線(xiàn)上輸出se0態(tài),并保持10ms以上,接在usb總線(xiàn)上的從機設備受到這個(gè)復位信號后就會(huì )進(jìn)行自身的復位操作,為接下來(lái)的usb數據傳輸作好準備,通過(guò)設置接口芯片的ctrlreg[05h]寄存器的第4、3位為邏輯"01",并保持10ms,然后再把它們恢復為邏輯"00",就可以讓接口芯片產(chǎn)生usb總線(xiàn)復位信號。
設備插拔檢測和設備速度檢測
在usb協(xié)議的物理層上,usb從機設備是否接在usb總線(xiàn)上是通過(guò)檢測總線(xiàn)的電壓得知的,根據該電壓的高低,還可獲得usb總線(xiàn)上的設備所支持的速度(例如,在usb1.1協(xié)議中,分有低速和全速)。usb主機接口芯片sl811hs把這個(gè)物理層的電壓檢測結果反應到狀態(tài)寄存器的取值上,通過(guò)讀取這些狀態(tài)寄存器的值,可以獲知當前的設備插拔狀態(tài)的設備速度。
usb主機所進(jìn)行的初始化操作除了上述3項外,還包括幀起始包啟動(dòng)/禁止的設置、幀同步設置、幀定時(shí)初值的設置等,它們都是通過(guò)對接口芯片特殊寄存器進(jìn)行讀寫(xiě)而實(shí)現的。
傳輸事務(wù)的實(shí)現
根據usb1.1協(xié)議,一個(gè)傳輸事務(wù)一般包含3個(gè)包(packet)的傳輸,分別是標記包(token packet)的傳輸,分別是標記包(token
packet),數據包(data packet)和握手包(handshake packet)。usb數據傳輸方式一共有四種,分別是控制傳輸(control
transfer)、同步傳輸(isochronous transfer)、中斷傳輸(interrupt transfer)和批傳輸(bulk
transfer)。其中,控制傳輸方式至少由2個(gè)傳輸事務(wù)構成,其他三種傳輸方式則都各由1個(gè)傳輸事務(wù)構成,可見(jiàn),傳輸事務(wù)在usb傳輸中至關(guān)重要。
一個(gè)典型的傳輸事務(wù)含有3個(gè)包的傳送,這連續的3個(gè)包數據流如表3所示。

使用sl811hs設計usb主機系統時(shí),用戶(hù)只需要讓單片機設置sl11hs內部幾個(gè)相關(guān)的特殊寄存器,然后把傳輸事務(wù)啟動(dòng)位使能(置為邏輯"1"),就可以讓接口芯片自動(dòng)完成這3個(gè)包的發(fā)送與接收,在表3所示的例子中,第n個(gè)包(標記包)和第n+2個(gè)包(握手包)都是由主機法給從機的,第n+1個(gè)包(數據包)是由從機發(fā)送給主機的。這個(gè)傳送方向和第n+2個(gè)包的傳送方向都是由標記包中的標識域取值決定的,其規律可參考usb協(xié)議。
如果傳輸事務(wù)的數據包是由從機發(fā)送給主機,則該傳輸事務(wù)屬于輸入類(lèi)型,稱(chēng)為輸入傳輸事務(wù),反之則稱(chēng)為輸出傳輸事務(wù),可見(jiàn),表3例子是一個(gè)輸入傳輸事務(wù),對于一個(gè)輸入傳輸事務(wù),單片機通過(guò)設置
sl811hs內部特殊寄存器就可以決定其取值的包域主要有:標記包中的標識域、地址域或端點(diǎn)域,數據包中的標識域。在輸入傳輸事務(wù)中,雖然數據包并不是主機發(fā)送的,但之所以仍需要單片機設置與數據包標識域相關(guān)的寄存器,是因為主機在該傳輸事務(wù)中將只認可標識域符合所設置值的數據包。其余部分,如標記包中的其他域及握手包的內容則都是sl811hs根據情況自動(dòng)產(chǎn)生的。

主機接口芯片sl811hs完成一次輸入傳輸事務(wù)后,如果傳輸成功,單片機就可以從sl811hs的數據緩沖寄存器讀到從機發(fā)送過(guò)來(lái)的數據,此處,數據緩沖區的首地址是由單片機預先通過(guò)設置控制寄存器指定的。
對于輸出傳輸事務(wù),單片機同樣需要設置相關(guān)的寄存器以確定標記包的標識域、地址域、端點(diǎn)域和數據包的標識域,以及存放發(fā)送數據的緩沖區首地址,并且,這個(gè)緩沖區中的數據也是由單片機寫(xiě)入的。
具體的,單片機控制usb主機接口芯片進(jìn)行一次傳輸事務(wù)所需要知執行的操作步驟如下:
首先,如果是輸出傳輸事務(wù),則需要把將在數據包中發(fā)送給從機的數據存放到sl811hs的數據緩沖區中。
其次,做好相關(guān)的傳輸準備工作,即設置接口芯片中的4個(gè)特殊寄存器,這4個(gè)寄存器的名稱(chēng)及其在傳輸事務(wù)中的作用如表4的前4項所列。
第三、啟動(dòng)傳輸事務(wù):把寄存器ep0control[00h]或ep1control[08h]的第0位(即傳輸事務(wù)啟動(dòng)位)置為邏輯"1",即可啟動(dòng)傳輸事務(wù)。但在此之前必須他這個(gè)寄存器中其他位設置好(或與啟動(dòng)位同時(shí)設置),與這個(gè)寄存器相關(guān)的包域如表4中最后一項所列。

最后,如果傳輸成功,而且該傳輸事務(wù)是輸入性質(zhì),則單片機可讀取數據緩沖區,獲得從機發(fā)送過(guò)來(lái)的數據。
結語(yǔ)
在51單片機控制usb接口芯片sl811hs的底層驅動(dòng)中,讀寫(xiě)sl811hs內部寄存器的子程序是最底層的,各種usb傳輸的較低層操作,如總線(xiàn)復位、插拔檢測、速度檢測以及傳輸事務(wù)等,都主要是通過(guò)讀寫(xiě)sl811hs內部特殊寄存器實(shí)現的,其中,傳輸事務(wù)的實(shí)現直接涉及了5個(gè)特殊寄存器的讀寫(xiě)。
在本文所述的底層驅動(dòng)基礎上,添加相關(guān)的高層程序,使該51單片機系統實(shí)現了對各種usb從機設備的枚舉控制和對u盤(pán)的數據交換,為51單片機系統的開(kāi)發(fā)提供了廣闊的應用前景,同時(shí)也對其他平臺的usb主機設計有一定的參考價(jià)值。
評論