新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機的USB主控器驅動設計

        基于單片機的USB主控器驅動設計

        作者: 時間:2016-12-02 來源:網絡 收藏
        1 引言

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

        解決這一問題的根本辦法就是在需要使用USB設備的嵌入式系統中擴展USB Host功能模塊,使之具有與USB設備進行數據傳輸的能力。

        USB協議按功能分為2部分,USB HOST(USB主協議)和USB SLAVE(USB從協議)分別應用于USB HOST CONTROLLER(USB主控制器)和USB DEVICE(USB設備)。一般,USB HOST要比USB SLAVE復雜,對于廣大的非PC用戶來說,尤其是嵌入式系統用戶來說,由于USB協議的不對稱性,使得實現USB HOST比USB SLAVE要困難地多,Philips公司的ISP1161A1芯片很好地解決了這種問題,他封裝了復雜的USB協議,使得在嵌入式系統中實現USB HOST和USB SLAVE變得簡單方便。

        2 USB HOST技術簡介

        USB的通信可以用圖1表示,圖1中,左半部分為USB主機端,可以看出,USB主機端由2部分構成,即軟件體和硬件體,實際上是3個軟件組件組成了USB HOST解決方案,即USB客戶驅動程序,USB驅動程序和USB主機控制器驅動程序,應用程序的事務處理是由USB客戶驅動程序(設備驅動程序)啟動的,客戶驅動程序把USB設備當做一個可以被訪問的端點集合,他可以被控制并與他的功能單元進行通信,USB系統軟件包括USB驅動程序和USB主控制器驅動程序,USB驅動程序負責配置管理、用戶管理、總線管理和數據傳輸,USB主控制器驅動程序負責調度管理,隊列管理和控制器管理,以及數據的位編碼、封包、循環校驗、發送、錯誤處理等。



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



        3 SP1161體系結構

        要實現USB協議,必須要通過一系列寄存器來完成,這些寄存器要能實現USB軟件結構中的USBD和HCD,即要完成USB協議狀態的控制,還要有一定的緩沖區來存放進出的數據,ISP1161專門針對USB協議設計的特殊硬件結構可方便地實現USB HOST和USB SLAVE。ISP1161的硬件結構主要是3類不同的寄存器,用戶通過操作這3種寄存器來達到實現USB傳輸的目的,這3類寄存器是:

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

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

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

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

        4 ISP1161x主控制器編程實現

        設計ISP1161x主控制驅動程序主要涉及以下2個重要內容,下面詳細介紹:

        4.1 讀/寫ATL和ITL緩沖區

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

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 汤阴县| 广灵县| 子长县| 林甸县| 法库县| 云安县| 奈曼旗| 柘城县| 海南省| 泽库县| 丰宁| 北川| 金阳县| 肇庆市| 庆元县| 康平县| 阜平县| 福海县| 四会市| 安阳市| 平遥县| 尖扎县| 潮安县| 韶山市| 睢宁县| 潼关县| 邵武市| 内江市| 长治县| 安义县| 武威市| 分宜县| 沿河| 通榆县| 甘孜县| 晋宁县| 嵩明县| 富民县| 施甸县| 河源市| 应城市|