《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的USB主控器驅(qū)動設(shè)計(jì)
基于單片機(jī)的USB主控器驅(qū)動設(shè)計(jì)
摘要: 在現(xiàn)代社會,嵌入式系統(tǒng)逐漸深入到人們生活的方方面面,,各類嵌入式系統(tǒng)產(chǎn)品之間往往通過某種接口進(jìn)行交互或數(shù)據(jù)傳遞。而現(xiàn)在,,USB已經(jīng)成為嵌入式數(shù)據(jù)交換的最主要的方式,,可是各種USB接口的設(shè)備都是基于PC機(jī)系統(tǒng)的,所以,,基于嵌入式系統(tǒng)的USB接口的研究具有實(shí)用的價值和意義,,特別是起Master作用的HOST端接口的研究。
Abstract:
Key words :

       1 引言

       在現(xiàn)代社會,,嵌入式系統(tǒng)逐漸深入到人們生活的方方面面,,各類嵌入式系統(tǒng)產(chǎn)品之間往往通過某種接口進(jìn)行交互或數(shù)據(jù)傳遞。而現(xiàn)在,,USB已經(jīng)成為嵌入式數(shù)據(jù)交換的最主要的方式,,可是各種USB接口的設(shè)備都是基于PC機(jī)系統(tǒng)的,所以,,基于嵌入式系統(tǒng)的USB接口的研究具有實(shí)用的價值和意義,,特別是起Master作用的HOST端接口的研究。

       解決這一問題的根本辦法就是在需要使用USB設(shè)備的嵌入式系統(tǒng)中擴(kuò)展USB Host功能模塊,,使之具有與USB設(shè)備進(jìn)行數(shù)據(jù)傳輸?shù)哪芰Α?br />
       USB協(xié)議按功能分為2部分,,USB HOST(USB主協(xié)議)和USB SLAVE(USB從協(xié)議)分別應(yīng)用于USB HOST CONTROLLER(USB主控制器)和USB DEVICE(USB設(shè)備)。一般,,USB HOST要比USB SLAV

 

E復(fù)雜,,對于廣大的非PC用戶來說,尤其是嵌入式系統(tǒng)用戶來說,,由于USB協(xié)議的不對稱性,,使得實(shí)現(xiàn)USB HOST比USB SLAVE要困難地多,Philips公司的ISP1161A1芯片很好地解決了這種問題,,他封裝了復(fù)雜的USB協(xié)議,,使得在嵌入式系統(tǒng)中實(shí)現(xiàn)USB HOST和USB SLAVE變得簡單方便。

       2 USB HOST技術(shù)簡介

       USB的通信可以用圖1表示,,圖1中,,左半部分為USB主機(jī)端,可以看出,,USB主機(jī)端由2部分構(gòu)成,,即軟件體和硬件體,實(shí)際上是3個軟件組件組成了USB HOST解決方案,,即USB客戶驅(qū)動程序,,USB驅(qū)動程序和USB主機(jī)控制器驅(qū)動程序,,應(yīng)用程序的事務(wù)處理是由USB客戶驅(qū)動程序(設(shè)備驅(qū)動程序)啟動的,客戶驅(qū)動程序把USB設(shè)備當(dāng)做一個可以被訪問的端點(diǎn)集合,,他可以被控制并與他的功能單元進(jìn)行通信,,USB系統(tǒng)軟件包括USB驅(qū)動程序和USB主控制器驅(qū)動程序,USB驅(qū)動程序負(fù)責(zé)配置管理,、用戶管理,、總線管理和數(shù)據(jù)傳輸,USB主控制器驅(qū)動程序負(fù)責(zé)調(diào)度管理,,隊(duì)列管理和控制器管理,,以及數(shù)據(jù)的位編碼、封包,、循環(huán)校驗(yàn),、發(fā)送、錯誤處理等,。

USB通信模型


       如圖2所示,,USB HOST的軟件結(jié)構(gòu)分為3大部分,即USB總線驅(qū)動(USBD),,USB HOST控制器驅(qū)動(HCD),、客戶軟件、其中客戶軟件處理和設(shè)備有關(guān)的信息,,USBD處理和硬件無關(guān)的協(xié)議,,而HCD則處理與硬件相關(guān)的協(xié)議,USBD和HCD都包含了一系列管理各種狀態(tài)的寄存器,。

USB軟件結(jié)構(gòu)模型


       3 SP1161體系結(jié)構(gòu)

       要實(shí)現(xiàn)USB協(xié)議,,必須要通過一系列寄存器來完成,這些寄存器要能實(shí)現(xiàn)USB軟件結(jié)構(gòu)中的USBD和HCD,,即要完成USB協(xié)議狀態(tài)的控制,,還要有一定的緩沖區(qū)來存放進(jìn)出的數(shù)據(jù),ISP1161專門針對USB協(xié)議設(shè)計(jì)的特殊硬件結(jié)構(gòu)可方便地實(shí)現(xiàn)USB HOST和USB SLAVE,。ISP1161的硬件結(jié)構(gòu)主要是3類不同的寄存器,,用戶通過操作這3種寄存器來達(dá)到實(shí)現(xiàn)USB傳輸?shù)哪康模@3類寄存器是:

       (1)HC control and status registers:USB主控制器控制和狀態(tài)寄存器,,主要用于傳輸過程中控制命令的存放和狀態(tài)的讀取,,可讀可寫的寄存器有2個地址,只讀或只寫的寄存器只有1個地址,。

       (2)Isochronous Transfer List (ITL):同步傳輸列表緩沖區(qū),。

       (3)Acknowledged Transfer List(ATL):接收傳輸列表緩沖區(qū)。

       根據(jù)USB協(xié)議,數(shù)據(jù)傳輸分為4種模式,,Control(控制),,Bulk(整批),Interrupt(中斷)和Isochronous(同步),。其中ITL是為了實(shí)現(xiàn)同步傳輸,,ATL則實(shí)現(xiàn)其他3種模式的傳輸。

       4 ISP1161x主控制器編程實(shí)現(xiàn)

      
設(shè)計(jì)ISP1161x主控制驅(qū)動程序主要涉及以下2個重要內(nèi)容,,下面詳細(xì)介紹:

       4.1 讀/寫ATL和ITL緩沖區(qū)

      
ATL和ITL緩沖區(qū)的位于ISP1161x內(nèi)部的FIFO緩沖RAM之中,,每個緩沖區(qū)包含許多PTD(Philips Transfer Descriptor),而PTD用于主控制器硬件發(fā)送或接收USB包從USB設(shè)備,,作為調(diào)度USB傳輸?shù)囊徊糠郑琀CD在系統(tǒng)內(nèi)存中購建PTD,。然后HCD將購建好的PTD移入ATL或者ITL緩沖區(qū),,主控制器硬件允許軟件去訪問每一個緩沖區(qū),就像他們是分離的硬件緩沖區(qū),,HCD訪問ATL緩沖區(qū)通過硬件寄存器HcTransferCounter(22H/A2H)和HcATLBufferPort(41H/C1H),,而ITL緩沖區(qū)則由HcTransferCounter和HcITLBufferPort(40H/C0H)訪問。下面一段示例代碼取自于本項(xiàng)目,,其功能是向ATL緩沖區(qū)寫數(shù)據(jù),,hci→hp→atl_len表示,ATL則在內(nèi)存中還沒有發(fā)送的數(shù)據(jù)的長度,,hci→hp→tl表示緩沖區(qū)的地址,。
      
       讀/寫ATL和ITL緩沖區(qū)

       4.2硬件初始化過程

      
當(dāng)ISP1161x上電時,主控驅(qū)動程序(HCD)必須經(jīng)過下列的順序?qū)τ布M(jìn)行初始化,,以便主控制器進(jìn)入可操作狀態(tài),。

       檢測主控制器,軟件復(fù)位主控制器,,配置HcHardwareConfiguration寄存器,,配置中斷;配置HcControl寄存器,,配置HcFmInterval寄存器,,配置根集線寄存器,設(shè)置ITL和ATL緩沖區(qū)長度,,安裝INT1中斷服務(wù)程序,。

 


       4.2.1 檢測主控制器

       檢測的工作由HCD完成的,HCD通過向寄存器HcScratch寫一個值,,接著從該寄存器讀出,,與剛才寫入的值進(jìn)行比較。如果寫入的和讀出的值相等,HCD得出結(jié)論:主控制器存在,,對HcCHipID寄存器的讀也被用來作為額外的條件來檢測該寄存器,。

       4.2.2 主控制器的軟件復(fù)位

       軟件復(fù)位主控制器通常包括2個步驟:復(fù)位主控制器;設(shè)置主控制器為RESET狀態(tài),。

       HCD通過設(shè)置在HcCommandStatus寄存器的HCR位來復(fù)位主控制器:

       HCD通過設(shè)置在HcCommandStatus寄存器的HCR位來復(fù)位主控制器

       一旦主控制器復(fù)位了,,HCD必須通過設(shè)置HcControl寄存器的HCFS字段為00B,以便使主控制器為RESET狀態(tài),。

       4.2.3 配置HcHardwareConfiguration寄存器

       WRITE_REG16(hci,,InterruptPinEnable|InterruptPin Trigger InterruptOutputPolarity |DataBusWidth16|AnalogOCEnable,HcHardwareConfiguration),;

       上述這段代碼表示將主控制器初始化為INT1允許,,中斷是邊沿觸發(fā),中斷的輸出極性為高電平,,數(shù)據(jù)線的寬度為16b,,使用片上過流檢測,模擬輸入,。

       4.2.4 配置中斷

       主控制器ISP1161x有2組中斷源,,第一組包含USB事件產(chǎn)生的中斷,比如Startof Frame,,調(diào)度溢出和根集線器狀態(tài)改變,,這些中斷的發(fā)生由HcInterruptEnable和HcInterruptDisable寄存器聯(lián)合控制,而每個中斷的狀態(tài)由HcInterruptStatus寄存器標(biāo)識,。

       第二組是主控制器中狀態(tài)變化所引起的中斷,,比如,主控制器延遲所產(chǎn)生的中斷,,同樣,,在第一組中斷中的任何組合是第二組中斷的中斷源。

       4.2.5 配置HcFmInterval寄存器

       HcFmInterval寄存器的14位值[FrameInteral,,F(xiàn)I]用于表示一幀之內(nèi)所占用的比特時間(在2個連續(xù)的SOFs,,15位的值[FSLargestDataPacket,PSMPS)用于表示在沒有引發(fā)調(diào)度溢出下可發(fā)送或接收全速最大包大小,,F(xiàn)I,,PSMPS的推薦值為0x2EDF和0x2778,所以將調(diào)用下列語句對該寄存器進(jìn)行初始化: 

   

 

   WRITE_REG32(hci,,0x2EDF|(0x2778<<16),,HcFmInterval);

       4.2.6 配置Root Hub(根集線器)寄存器

      
隨著初始化的深入,,下面的專門針對根集線器3個寄存器也必須初始化:HcRhDescriptorA,,HcRhDescriptorB 和 HcRhStatus,,前2個寄存器是根據(jù)電路板的制作自動由ISP1161x配置的,這2個寄存器均用來描述根集線器的特性,。

       HcRhStatus被劃分為2個部分,,低字部分表示集線器狀態(tài),而高字部分表示集線器狀態(tài)的改變,,還有保留部分必須被初始化為邏輯0,。

       4.2.7 設(shè)置ITL和ATL緩沖區(qū)的長度

       主控制器ISP1161x內(nèi)部的FIFO緩沖區(qū)有4kb/s,而這4k將被ATL和ITL劃分為2部分,,分由HcATLBufferLength和HcITLBufferLength寄存器表示,,ITL緩沖區(qū)又進(jìn)一步被分為2個相同的ITO0和ITD01緩沖區(qū),ATL緩沖區(qū)必須存在,,因?yàn)锳TL緩沖區(qū)用于控制,,中斷和大批量傳輸,而ITL的存在與否是可選的,。

       4.2.8 設(shè)置INT1中斷的服務(wù)程序

       如果在主控制器中發(fā)生一個或多個中斷,,ISP1161x的INT1引腳將會通知微處理器,在本項(xiàng)目中,,INT1的引腳直接接在ARM的INT0引腳上,,驅(qū)動程序通過Linux提供的函數(shù)request_irq向操作系統(tǒng)申請中斷號,,并在此函數(shù)中向操作系統(tǒng)提供中斷處理函數(shù),。

       request_irq(irq,hc_interrupt,,0,,"ISP116x",hci)

 

       irq為中斷號,;hc_interrupt為中斷處理函數(shù),,0為中斷標(biāo)記,"ISP116x"表示中斷設(shè)備名稱,;hci在此表示中斷設(shè)備號,。

       5 在μClinux中編譯USB主控驅(qū)動

       接下來就如何將驅(qū)動文件編譯到嵌入式操作系統(tǒng)做一個簡要說明。

       (1)將上述文件拷貝到drivers/USB/

       (2)編輯Drivers/USB/Makefile文件,,添加以下內(nèi)容:

       obj-$(CONFIG_USB_ISP1161)+=hc_isp1161.o

       (3)編輯driver/USB/config.in文件,,添加如下內(nèi)容: 

       Dep_tristat iisp1161(Philips)support iCONFIG_USB_ISP1161 $ CONFIG_USB

       (4)編譯μClinux內(nèi)核

       編譯成功后把生成的映象文件用JTAG燒寫器燒寫到開發(fā)板的ROM中,啟動后進(jìn)行驗(yàn)證實(shí)現(xiàn)了對ISP1161A1的控制,。

       6 結(jié)語

      
ISP1161A1使得在嵌入式系統(tǒng)中實(shí)現(xiàn)USB HOST變得十分簡單方便,,便于嵌入式系統(tǒng)中USB的普及。

       一個USB HOST要完成的功能因?yàn)樾枨蟛煌?,所使用的協(xié)議也不盡相同,,有的采用中斷傳輸,,有的采用同步傳輸,USB主機(jī)技術(shù)在嵌入式系統(tǒng)的應(yīng)用主要是針對某一種USB設(shè)備

 

或集中設(shè)備,,因而嵌入式系統(tǒng)上可以只固化某幾種協(xié)議,,該技術(shù)的應(yīng)用可以使得在嵌入式系統(tǒng)上輕松接入U(xiǎn)SB外設(shè)、擴(kuò)展系統(tǒng)的功能,、提高儀器的使用靈活性,。USB主機(jī)技術(shù)在嵌入式系統(tǒng)上的應(yīng)用會有更廣泛更美好的前景。

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