《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)控制SL811HS的USB主機(jī)底層驅(qū)動(dòng)
51單片機(jī)控制SL811HS的USB主機(jī)底層驅(qū)動(dòng)
摘要: 本設(shè)計(jì)實(shí)現(xiàn)了在51單片機(jī)系統(tǒng)中增加USB主機(jī)功能,,采用普通51單片機(jī)外接專用USB接口芯片的方案,。這種方案雖然會(huì)使系統(tǒng)傳輸速度受到限制,,而且在穩(wěn)定性方面有所欠缺,但此方案設(shè)計(jì)靈活性高,,且易于移植,,為低成本產(chǎn)品的開發(fā)提供了廣闊前景。
Abstract:
Key words :

       引言

       基于USB接口的設(shè)備使用方便,,性價(jià)比高,,因此在人們的工作和生活中得到了廣泛的應(yīng)用,如U盤,、移動(dòng)硬盤,、移動(dòng)光驅(qū)、USB攝像頭,、USB鼠標(biāo)鍵盤等,。同時(shí),51 系列單片機(jī)以其成熟的技術(shù)和高性價(jià)比吸引了大量國(guó)內(nèi)用戶,,被廣泛應(yīng)用于測(cè)控和自動(dòng)化領(lǐng)域,。因此,如果在51 單片機(jī)系統(tǒng)中增加USB 主機(jī)接口,,實(shí)現(xiàn)對(duì)USB 從機(jī)設(shè)備的控制,,則該單片機(jī)系統(tǒng)可充分利用現(xiàn)有的各種USB從機(jī)設(shè)備,大大擴(kuò)展單片機(jī)系統(tǒng)的功能,。

       本設(shè)計(jì)實(shí)現(xiàn)了在51單片機(jī)系統(tǒng)中增加USB主機(jī)功能,,采用普通51單片機(jī)外接專用USB接口芯片的方案。這種方案雖然會(huì)使系統(tǒng)傳輸速度受到限制,,而且在穩(wěn)定性方面有所欠缺,,但此方案設(shè)計(jì)靈活性高,,且易于移植,為低成本產(chǎn)品的開發(fā)提供了廣闊前景,。設(shè)計(jì)中采用的51單片機(jī)是Atmel公司的AT89S52芯片,,USB主機(jī)功能的擴(kuò)展通過(guò)外接專用USB接口芯片SL811HS實(shí)現(xiàn)。CYPRESS公司的USB接口芯片SL811HS可以工作在主機(jī)或從機(jī)模式,,支持USB1.1的全速和低速數(shù)據(jù)傳輸,。工作在主機(jī)模式時(shí),SL811HS可以自動(dòng)檢測(cè)外設(shè)的插拔動(dòng)作,,可以按照外處理器(如單片機(jī))的要求自動(dòng)把數(shù)據(jù)整合為USB協(xié)議數(shù)據(jù)包進(jìn)行數(shù)據(jù)傳輸,。
 

系統(tǒng)硬件示意圖
圖 1 系統(tǒng)硬件示意圖

       本文將介紹單片機(jī)AT89S52控制SL811HS的硬件設(shè)計(jì)和底層驅(qū)動(dòng)的編寫,,其中重點(diǎn)講述底層驅(qū)動(dòng)的設(shè)計(jì),。

       硬件設(shè)計(jì)

       系統(tǒng)的硬件原理圖如圖1所示。AT89S52的供電電壓為5V,,SL811HS的為3.3V,。盡管供電電壓不同,但根據(jù)芯片引腳的信號(hào)噪聲容限參數(shù)分析可知,,AT89S52與SL811HS之間的引腳可以直接相連,,不需要電平轉(zhuǎn)換或緩沖。
 

USB主機(jī)枚舉操作驅(qū)動(dòng)的層次關(guān)系
表1 USB主機(jī)枚舉操作驅(qū)動(dòng)的層次關(guān)系

       軟件設(shè)計(jì)

       USB主機(jī)驅(qū)動(dòng)是一個(gè)高低層子程序的組合,,實(shí)現(xiàn)USB傳輸和控制的過(guò)程是較高層子程序調(diào)用較低層子程序的過(guò)程,。編寫USB主機(jī)驅(qū)動(dòng)時(shí),可接從低層往高層的順序逐層進(jìn)行,。

 



       以USB主機(jī)枚舉從機(jī)設(shè)備的操作為例,,實(shí)現(xiàn)該功能所需要的各層子程序?qū)哟侮P(guān)系如表1所示。本文將介紹較低層的幾個(gè)子程序的實(shí)現(xiàn),,包括讀寫SL811HS內(nèi)部寄存器,、傳輸事務(wù)的實(shí)現(xiàn)、設(shè)備插拔檢測(cè),、復(fù)位等,,其中,“傳輸事務(wù)的實(shí)現(xiàn)”是關(guān)鍵和難點(diǎn),,同時(shí)也是本文的重點(diǎn),。

       單片機(jī)讀寫SL811HS

       內(nèi)部寄存器

       讀寫SL811HS內(nèi)部寄存器子程序是最低層的子程序,系統(tǒng)所進(jìn)行的各種操作主要都是通過(guò)調(diào)用這些子程序讀寫SL811HS內(nèi)部寄存器實(shí)現(xiàn)的,。例如,,通過(guò)讀取SL811HS的狀態(tài)寄存器獲取SL811HS的狀態(tài)信息可以實(shí)現(xiàn)設(shè)備插拔檢測(cè)、設(shè)備速度檢測(cè)等,,通過(guò)向SL811HS的相關(guān)控制寄存器寫入控制字節(jié)可以實(shí)現(xiàn)USB總線復(fù)位以及USB數(shù)據(jù)傳輸?shù)炔僮鳌?br />
       SL811HS內(nèi)部寄存器

       從編程結(jié)構(gòu)的角度來(lái)看,,SL811HS內(nèi)部寄存器一共有256個(gè)單元,,每個(gè)單元是一個(gè)字節(jié),其中地址為[00H]~[0FH]的前16個(gè)單元是SL811HS的狀態(tài)寄存器或控制寄存器(統(tǒng)稱為特殊寄存器),,其余的是數(shù)據(jù)緩沖寄存器,。表2列出了16個(gè)特殊寄存器的名稱和主要功能含義。
 

 

SL811HS內(nèi)部特殊寄存器簡(jiǎn)介
表2 SL811HS內(nèi)部特殊寄存器簡(jiǎn)介

       單片機(jī)讀寫SL811HS

       內(nèi)部寄存器的實(shí)現(xiàn)


       按照SL811HS的讀寫控制信號(hào)時(shí)序圖編寫單片機(jī)讀寫SL811HS內(nèi)部寄存器的子程序,,使各控制引腳上按照規(guī)定的時(shí)序給出符合要求的信號(hào)脈沖,。 在這個(gè)程序中,單片機(jī)指令周期的大小將直接影響輸出信號(hào)的保持時(shí)長(zhǎng)和時(shí)序關(guān)系,。
       初始化

       初始化操作主要包括SL811HS芯片復(fù)位,、USB總線復(fù)位、設(shè)備插拔檢測(cè)和設(shè)備USB數(shù)據(jù)傳輸速度檢測(cè)等,。通過(guò)這些初始化操作,,SL811HS將作為USB主機(jī)與從機(jī)之間建立一個(gè)底層協(xié)議連接關(guān)系,為后續(xù)的數(shù)據(jù)通信做好準(zhǔn)備,。

       SL811HS芯片復(fù)位

       USB接口芯片SL811HS的復(fù)位是對(duì)芯片的狀態(tài)進(jìn)行復(fù)位,,包括了對(duì)芯片內(nèi)部寄存器值的復(fù)位。實(shí)現(xiàn)該操作不需要讀寫接口芯片內(nèi)部寄存器,,只需向接口芯片的復(fù)位引腳輸入一個(gè)有效的復(fù)位脈沖即可,。

       USB總線復(fù)位

       按照USB協(xié)議,USB總線復(fù)位是指在USB數(shù)據(jù)線上輸出SE

 

0態(tài),,并保持10ms以上,,接在USB總線上的從機(jī)設(shè)備收到這個(gè)復(fù)位信號(hào)后就會(huì)進(jìn)行自身的復(fù)位操作,為接下來(lái)的USB數(shù)據(jù)傳輸做好準(zhǔn)備,。通過(guò)設(shè)置接口芯片的CtrlReg[05H]寄存器的第4,、3位為邏輯”01”,并保持10ms,,然后再把它們恢復(fù)為邏輯”00”,,就可以讓接口芯片產(chǎn)生USB總線復(fù)位信號(hào)。

       設(shè)備拔插檢測(cè)和設(shè)備速度檢測(cè)

       在USB協(xié)議的物理層上,,USB從機(jī)設(shè)備是否接在USB總線上是通過(guò)檢測(cè)總線的電壓得知的,。根據(jù)該電壓的高低,還可獲知USB總線上的設(shè)備所支持的速度(例如,,在USB1.1協(xié)議中,,分有低速和全速)。 USB主機(jī)接口芯片SL811HS把這個(gè)物理層的電壓檢測(cè)結(jié)果反映到狀態(tài)寄存器的取值上,,通過(guò)讀取這些狀態(tài)寄存器的值,,可以獲知當(dāng)前的設(shè)備插拔狀態(tài)和設(shè)備速度。

       USB主機(jī)所進(jìn)行的初始化操作除了上述3項(xiàng)外,,還包括幀起始包啟動(dòng)/禁止的設(shè)置,、幀同步設(shè)置,、幀定時(shí)初值的設(shè)置等,它們都是通過(guò)對(duì)接口芯片特殊寄存器進(jìn)行讀寫而實(shí)現(xiàn)的,。

       傳輸事務(wù)的實(shí)現(xiàn)

       根據(jù)USB1.1協(xié)議,,一個(gè)傳輸事務(wù)一般包含3個(gè)包(Packet)的傳輸,分別是標(biāo)記包(Token Packet),、數(shù)據(jù)包(Data Packet)和握手包(Handshake Packet),。USB數(shù)據(jù)傳輸方式一共有四種,分別是控制傳輸(Control Transfer),、同步傳輸(Isochronous Transfer),、中斷傳輸(Interrupt Transfer)和批傳輸(Bulk Transfer)。其中,,控制傳輸方式至少由2個(gè)傳輸事務(wù)構(gòu)成,,其它三種傳輸方式則都各由1個(gè)傳輸事務(wù)構(gòu)成??梢?jiàn),,傳輸事務(wù)在USB傳輸中至關(guān)重要,。

       一個(gè)典型的傳輸事務(wù)含有3個(gè)包的傳送,,這連續(xù)的3個(gè)包數(shù)據(jù)流如表3所示。
 

 

一個(gè)傳輸事務(wù)的數(shù)據(jù)流示意
表3 一個(gè)傳輸事務(wù)的數(shù)據(jù)流示意

       使用SL811HS設(shè)計(jì)USB主機(jī)系統(tǒng)時(shí),,用戶只需讓單片機(jī)設(shè)置SL811HS內(nèi)部幾個(gè)相關(guān)的特殊寄存器,,然后把傳輸事務(wù)啟動(dòng)位使能(置為邏輯’1’),就可以讓接口芯片自動(dòng)完成這個(gè)包的發(fā)送與接收,。在表3所示的例子中,,第n個(gè)包(標(biāo)記包)和第n+2個(gè)包(握手包)都是由主機(jī)發(fā)送給從機(jī)的,第n+1個(gè)包(數(shù)據(jù)包)是由從機(jī)發(fā)送給主機(jī)的,。這個(gè)傳送方向和第n+2個(gè)包的傳送方向都是由標(biāo)記包中的標(biāo)識(shí)域取值決定的,,其規(guī)則可參考USB協(xié)議。

       如果傳輸事務(wù)的數(shù)據(jù)包是由從機(jī)發(fā)送給主機(jī),,則該傳輸事務(wù)屬于輸入類型,,稱為輸入傳輸事務(wù),反之則稱為輸出傳輸事務(wù),??梢?jiàn),表3例子是一個(gè)輸入傳輸事務(wù),。對(duì)于一個(gè)輸入傳輸事務(wù),,單片機(jī)通過(guò)設(shè)置SL811HS內(nèi)部特殊寄存器就可以決定其取值的包域主要有:標(biāo)記包中的標(biāo)識(shí)域、地址域和端點(diǎn)域,,數(shù)據(jù)包中的標(biāo)識(shí)域,。在輸入傳輸事務(wù)中,,雖然數(shù)據(jù)包并不是由主機(jī)發(fā)送的,但之所以仍需要單片機(jī)設(shè)置與數(shù)據(jù)包標(biāo)識(shí)域相關(guān)的寄存器,,是因?yàn)橹鳈C(jī)在該傳輸事務(wù)中將只認(rèn)可標(biāo)識(shí)域符合所設(shè)置值的數(shù)據(jù)包,。其余部分,如標(biāo)記包中的其它域及握手包的內(nèi)容則都是SL811HS根據(jù)情況自動(dòng)產(chǎn)生的,。
       主機(jī)接口芯片SL811HS完成一次輸入傳輸事務(wù)后,,如果傳輸成功,單片機(jī)就可以從SL811HS的數(shù)據(jù)緩沖寄存器讀到從機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù),。此處,,數(shù)據(jù)緩沖區(qū)的首地址是由單片機(jī)預(yù)先通過(guò)設(shè)置控制寄存器指定的。

       對(duì)于輸出傳輸事務(wù),,單片機(jī)同樣需要設(shè)置相關(guān)的寄存器以確定標(biāo)記包的標(biāo)識(shí)域,、地址域、端點(diǎn)域和數(shù)據(jù)包的標(biāo)識(shí)域,,以及存放發(fā)送數(shù)據(jù)的緩沖區(qū)首地址,,并且,這個(gè)緩沖區(qū)中的數(shù)據(jù)也是由單片機(jī)寫入的,。

       具體地,,單片機(jī)控制USB主機(jī)接口芯片進(jìn)行一次傳輸事務(wù)所需要執(zhí)行的操作步驟如下:
首先,如果是輸出傳輸事務(wù),,則需要把將在數(shù)據(jù)包中發(fā)送給從機(jī)的數(shù)據(jù)存放到SL811HS的數(shù)據(jù)緩沖區(qū)中,。

       其次,做好相關(guān)的傳輸準(zhǔn)備工作,,即設(shè)置接口芯片中的4個(gè)特殊寄存器,。這4個(gè)寄存器的名稱及其在傳輸事務(wù)中的作用如表4的前4項(xiàng)所列。
 

 

與傳輸事務(wù)直接相關(guān)的SL811HS特殊寄存器
表4 與傳輸事務(wù)

 

直接相關(guān)的SL811HS特殊寄存器

 

       第三,,啟動(dòng)傳輸事務(wù):把寄存器EP0Control[00H]或EP1Control[08H]的第0位(即傳輸事務(wù)啟動(dòng)位)置為邏輯’1’即可啟動(dòng)傳輸事務(wù),。但在此之前必須把這個(gè)寄存器中其它位設(shè)置好(或與啟動(dòng)位同時(shí)設(shè)置),與這個(gè)寄存器相關(guān)的包域如表4中最后一項(xiàng)所列,。

       第四,,單片機(jī)讀取寄存器EP0Status[03H]或EP1Status[0BH]的值,以獲知此次事務(wù)傳輸?shù)耐瓿汕闆r,。

       最后,,如果傳輸成功,而且該傳輸事務(wù)是輸入性質(zhì)的,,則單片機(jī)可讀取數(shù)據(jù)緩沖區(qū),,獲得由從機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)。

       結(jié)語(yǔ)

       在51單片機(jī)控制USB接口芯片SL811HS的底層驅(qū)動(dòng)中,讀寫SL811HS內(nèi)部寄存器的子程序是最低層的,,各種USB傳輸?shù)妮^低層操作,,如總線復(fù)位、插拔檢測(cè),、速度檢測(cè)以及傳輸事務(wù)等,,都主要是通過(guò)讀寫SL811HS內(nèi)部特殊寄存器實(shí)現(xiàn)的。其中,,傳輸事務(wù)的實(shí)現(xiàn)就直接涉及了5個(gè)特殊寄存器的讀寫,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。