精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于單片機實現USB設備固件的應用設計

電子設計 ? 來源:微計算機信息 ? 作者:涂望明;魏友國;陳 ? 2021-06-10 14:26 ? 次閱讀

作者:涂望明;魏友國;陳運濤;段道聚

一、 引言

USB是應用在PC領域中的新型接口技術,它由三部分組成:具有USB接口的PC系統,能夠支持USB的系統軟件和使用USB接口的設備。它的提出是基于采用通用連接技術,實現外設的簡單快速連接,達到方便用戶、降低成本、擴展PC連接外設范圍的目地。它的最顯著優點是支持熱插拔,當用戶插入USB外設后,計算機能夠自動識別接入的外設,而不需要重新啟動系統。

二、USB設備硬件結構

為了提高系統的可擴展性,也便于選擇高性能的單片機,以實現更多的功能,我們使用較為廣泛的Philip公司的單純的接口芯片PDIUSBD12。下面介紹USB設備硬件的相關情況。

1. PDIUSBD12芯片的內部結構

芯片內部集成SIE、320B的FIFO緩存、收發器以及電壓調整電路和終結電阻器,提供2MB/s速率的并行接口,具有全自治本地DMA功能,芯片提供的多重中斷模式有利于批量和等時數據傳輸模式。芯片還提供了可編程時鐘、上電復位和低電壓復位電路。

2. PDIUSBD12芯片的控制字

D12的控制字分為初始化命令、數據流命令和通用命令三種基本類型。在USB 設備列舉過程中使用初始化命令,這些命令用來啟動設備、設置地址、端點和工作模式。數據流命令用于管理USB 和單片機之間的數據流。很多數據流是通過一個發給單片機的中斷請求開始的。控制器使用數據流命令來存取數據,確認在FIFO中的數據是否有效。通用命令主要在數據傳輸過程中使用,包括恢復和讀取當前幀號。

3. PDIUSBD12 與單片機的連接

以PDIUSBD12和89C52單片機之間的連接如圖所示,ALE接到單片機的ALE上,使用地址總線復用方式。A0通過電阻接VCC。VCC接+5V,VOUT3.3通過電容接地,同時腳20RESET_N和腳18DMACK_N接高電平。GND接地。8根數據線接至數據總線。腳11CS_N端接至控制器或譯碼器的相應端, PDIUSBD12可以通過CS_N端,映射為控制器的任何地址。腳14中斷接至控制器的中斷線,并用電阻拉高。XTAL1和XTAL2接6MHZ晶振,EOT_N拉高,D-、D+分別接到USB 總線的D-、D+上。在實際產品中,腳21GL_N可接LED顯示設備狀態。

三、USB設備固件的設計

固件的設計要求非常熟悉USB設備的具體通信步驟以及單片機的指令系統。

1. 固件介紹

PDIUSBD12是一種高速并行總線的USB接口設備,支持本地DMA傳輸。固件設計的目標是使D12在USB上能達到最快的傳輸率。外圍設備如打印機等使用D12傳送大量的數據。這些設備中的CPU忙于處理許多任務象設備控制,數據和圖象處理。D12的固件設計成完全的中斷驅動模式。當CPU在處理前臺任務時,USB傳輸在后臺被處理。這保證了最好的傳輸率和較好的軟件結構,簡化了編程和調試。

在后臺中斷服務程序和前臺主程序之間的數據交換是通過標志和數據緩沖區來實現的。例如, D12主要的大量輸出端點用一個圓形的數據緩沖區。當D12從USB接收到數據封包,就向CPU產生一個中斷請求,CPU會馬上執行中斷服務程序。在中斷服務程序內部,固件把數據封包從D12的內部緩沖區送到圓形緩沖區,然后清除PDIUSBD12的內部緩沖區使它能接收下一個新的數據包。CPU能繼續執行當前前臺的任務直到完成。然后它返回到主循環,檢查圓形緩沖區是否有新的數據,開始另外一個前臺任務。

使用這種結構,主函數不關心數據源是來自USB設備,串行口還是并行口。主函數只檢查圓形緩沖區是否有新數據需要處理。因此,主函數將目標定為數據處理,而中斷服務程序做的工作是以可能的最快速度傳送數據。類似地,控制端點在數據封包處理上使用了同樣的概念。中斷服務程序在數據緩沖區里接收和存儲控制傳輸內容并設置相應的標志寄存器。主函數將發送請求到協議處理程序。一旦所有的標準設備,類,和用戶請求在協議處理程序處理了,中斷服務程序就能保持它的效率。

2. 固件結構和任務

1) 固件結構

固件由6部分組成,它們如下: 主程序:發送USB設備請求,讀測試鍵,控制發光二極管,處理USB總線事務,等等、標準請求、用戶請求、中斷服務程序、PDIUSBD12命令接口、硬件層。下面依次簡略介紹:

硬件層:這是固件中最低的層,它完成向PDIUSBD12的硬件通道。當固件轉向其他的CPU 平臺,這部分需要修改或增加內容。

PDIUSBD12命令接口:為進一步簡化用PDIUSBD12編程,固件定義了一系列命令接口,它們壓縮了使用PDIUSBD12的所有功能。

中斷服務程序:這部分代碼處理由PDIUSBD12產生的中斷。它接收從PDIUSBD12內部的FIFO區到CPU存儲器的數據,并且建立合適的標志以通知主程序處理。

主程序:主程序檢查事件的標志,轉移到合適的子程序做進一步的處理。它也包含人機接口代碼,例如,發光二極管和鍵盤掃描。

協議層:協議層處理標準USB設備請求,也處理具體的用戶請求諸如DMA和TWAIN。

2) 固件任務

在編寫固件程序的過程中,PDIUSBD12 作為接口芯片硬件為我們做了大量的工作,其中包括:

a.檢測新的進入事務;翻譯從USB 總線上獲得的信息;b. 檢測事務的目的地址,以決定是否響應;e. 確定事務的類型;d. 從USB 總線上接收數據到FIFO;e. 從FIFO 中發送數據到USB 總線上;f. 計算校驗位,檢測并報告結果。

但還有相當一部分的工作由固件程序來完成。這部分任務包括:

a.初始化PDIUSBD12并處理PDIUSBD12的中斷;b.響應各種請求,至少要響應標準的11種請求;c.選擇適當的數據寫入PDIUSBD12的FIFO;d.從PDIUSBD12的FIFO中讀取數據;

3) PDIUSBD12 的初始化

與一般的接口芯片一樣,PDIUSBD12必須先初始化以后再使用,初始化的步驟如下:

a.用Set Address/Enable命令使能芯片功能,地址應設為0;b.用Set Endpoint Enable命令使能芯片上除端點0、1外的所有端點;c.用Set Mode 命令斷開連接,延時1-2s;用Set Mode 命令連接;d. 用命令Read Interrupt Register清空中斷寄存器;

初始化完后,D12就可以接收USB 總線上的信息了。之后,主機通過端點0、1來讀取設備信息,配置設備、設置設備地址,完成設備列舉。

4) USB 設備的列舉

當有一個USB 設備連接到主機上時,主機的USB總線驅動、根集線器驅動獲得設備連接的通知,開始列舉設備。在主機一端,列舉設備的過程是向設備發出一系列的標準請求。在設備一端,則需要響應主機發出的請求。其順序如下:

a響應獲取設備描述符的請求。務必保證設備描述符的正確發送;b.響應設置地址的請求,設備進入編址態;c.連續三次響應獲取設備描述符請求;d.響應獲取配置描述符的的請求,務必保證配置描述符的正確發送;e.發送全部的配置描述符,同時發送所有的接口描述符、端點描述符;

如果以上步驟都正確,則主機會提示找到新設備,安裝驅動程序。否則,提示找到未知設備,設備不可用。

5) USB 設備固件框架的實現

從上面的討論發現編寫USB設備的固件實質上是處理各種主機提出的請求。其中,標準的11個請求是必須實現的,如果要求設備有其它的功能還必須加入自定義的請求。按照USB 2.0 中的定義,稱這些固件程序為USB設備的框架。下面介紹USB設備框架的實現。

3. 主程序的結構

一旦加電,MCU就要初始化所有的端口,存儲器,定時器和中斷服務子程序。之后,MCU需要重新連接USB。這個程序很重要因為它保證了在MCU未準備好服務D12之前,D12不會動作。

在主循環程序里面,MCU會詢問鍵盤上的任何動作。如果任何一個具體的鍵被按下,處理鍵的命令就會執行處理程序,之后返回主程序。這個程序僅是用來調試用。1ms定時是用來啟動檢查被按下鍵的子程序。

當詢問到達檢查Setup包時,它需要先確定setup標志是否建立。如果setup標志已經確立,它將發送設備請求到協議層進行處理。下面的流程圖顯示了主程序在前臺執行的情況。

4. 中斷服務程序的實現

PDIUSBD12固件是完全中斷驅動的,因此中斷服務程序是整個固件編寫過程中非常重要的一環。在進入中斷服務程序后首先要發用命令Read Interrupt Register(控制字為F4H)讀取中斷寄存器,根據中斷寄存器的內容判斷中斷源,然后跳轉到不同的服務程序中去處理中斷。

中斷服務程序(ISR)與主程序通信是通過事件標志“EPPFLAG”和數據緩沖區“Control-XFER”。

主程序和中斷服務程序(ISR)之間任務分配是,ISR從D12收集數據,主程序將處理這些數據。ISR只在它收集了足夠的數據才通知主程序準備處理,這樣會減少不必要的主程序服務時間,也簡化了主程序。

總線重置和空閑在ISR里面不需要特殊的處理。ISR要么設置總線重置標志,要么在EPPFLAG里暫停這一位并退出。

控制型傳輸總是以setup階段開始的,接著是數據階段。然后以狀態階段結束。

下面以處理Control OUT和Control IN這兩個最復雜最重要的中斷子程序為例,說明編寫中斷服務程序的一些問題。

Control OUT主要是主機用來傳遞控制請求的,也可用于傳輸數據,進入服務程序后首先要發送控制字Read Last Transaction Status(40H)給PDIUSBD12,讀取管道狀態,根據讀取的狀態判斷是因為有數據包還是有SETUP包的到來而中斷。當SETUP包被USB設備的D12接收后,設備將會向MCU產生中斷。微控制器將通過讀取D12中斷寄存器的內容判斷封包是送到Control端點還是Genric端點而進行處理。如果封包是送到Control端點,MCU將會進一步通過讀D12的“Read Last Transaction Status Register”判斷數據是不是SETUP 封包。對于獲取描述符設備請求,第一個封包必須是SETUP封包。

之后,MCU需要讀出SETUP封包的內容通過選擇Control Out端點來判斷這個端點是滿的還是空的。如果控制端點是滿的,MCU就從緩沖區中讀出它的內容并將它存在存儲器里。然后,它將從存儲器里去驗證主機設備請求是否合法。如果是合法請求,MCU必須送“Acknowledge Setup command”到Control Out端點使能接收下一個封包。下一步,MCU需要確定控制傳輸是控制讀還是控制寫。這可以通過從SETUP 封包里讀bmRequestType的8個字節來完成。控制傳輸是控制讀,設備需要在下一個數據時相回送數據包給主機。MCU需要建立一個標志,表明USB設備現在正處于傳送模式。應主機的要求準備送數據。

Control IN主要是用來向主機傳送數據的,進入服務子程序后,首先要通過讀Read Last Transaction Status(40H)來清除Control-In interrupt Bit,在確認D12是處于傳送模式下后,MCU將數據包送往主機。但是,由于D12只有16字節的FIFO,所以MCU必須控制好傳送的總量,如果要求的長度大于16字節的話。MCU必須檢查當前和剩下的要送往主機的數據,如果剩下的字節大于16字節的話,MCU將先送頭16字節。在下一個Control-IN令牌包到來的時候,MCU將先判斷剩下的字節是否為0,如果是,MCU將發一個空包給主機,通知它數據已經傳送完畢。

結束語:

功能強大的USB規格已經成為PC的眾多標準之一,鉆研計算機科技的種種發展,都離不開USB的相關知識。本文創新點:使用USB通信方面的具體協議,用單片機匯編語言編程,利用單片機的指令系統去實現USB設備與PC主機的具體通信,設計出適合用戶需求的USB設備。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6032

    文章

    44514

    瀏覽量

    632981
  • 接口
    +關注

    關注

    33

    文章

    8497

    瀏覽量

    150834
  • usb
    usb
    +關注

    關注

    60

    文章

    7892

    瀏覽量

    263983
收藏 人收藏

    評論

    相關推薦

    單片機通過USB升級固件的方法

    單片機升級固件的方法有很多中,比如:ISP(在系統編程)、ICP(在電路編程)、IAP(在應用編程)等。
    的頭像 發表于 01-11 09:37 ?1825次閱讀
    <b class='flag-5'>單片機</b>通過<b class='flag-5'>USB</b>升級<b class='flag-5'>固件</b>的方法

    單片機實現USB2.0通訊的全數字圖像的實時采集

    單片機實現USB2.0通訊的全數字圖像的實時采集主要論述利用USB2.0 單片機接口技術實現
    發表于 03-31 13:51

    使用 PDIUSBD12的 USB 系統固件程序設計

    USB 外設中。固件的作用以及固件程序的編寫流程,并給出了相應程序。關鍵詞:USB 固件程序 PDIUSBD12 端點
    發表于 04-27 11:40

    采用PDIUSBD12的USB系統固件程序設計

    固件的作用以及固件程序的編寫流程,并給出了相應程序。 關鍵詞:USB固件程序PDIUSBD12端點單片機
    發表于 09-30 11:42

    單片機USB主從的設計與實現

    單片機USB主從的設計與實現
    發表于 08-20 14:18

    單片機固件問題

    使用一個壓力傳感器與C8051F單片機相連進行數據傳輸。編一個單片機固件,通過固件將讀取到的電壓信號轉換成對應的壓力信號。本人新手一枚,有些都不懂這其中的意思?電壓信號轉換成壓力信號不
    發表于 06-02 22:32

    基于單片機的嵌入式USB主機系統的實現

    在無操作系統的單片機系統中實現USB主機系統功能,對U盤進行文件的讀寫,并在U盤上實現FAT格式文件系統,使U盤成為單片機應用系統的存儲
    發表于 09-16 09:21 ?30次下載

    單片機實現USB移動存儲

    單片機實現USB移動存儲功能,具體包括USB主機接口的硬件設計和整機USB驅動固件的設計。其
    發表于 11-12 17:04 ?129次下載

    基于AVR單片機USB接口設計

    以AVR單片機ATmega8和USB接口器件PDIUSBD12為核心,基于標準的USB1.1協議,設計一種通用USB接口模塊,以滿足嵌入式系統中對U
    發表于 12-16 15:30 ?141次下載

    Cypress 帶usb接口的單片機

    Cypress 帶usb接口的單片機
    發表于 01-08 14:27 ?30次下載

    如何更簡單的給單片機更新固件

    單片機已經焊接到電路板上時,如何更簡單更便捷的為單片機升級固件便成了一件值得深思的問題。本文介紹了一種更簡單更便捷的固件升級方式,不需要任何專用工具,只是簡單的一個刪除粘貼操作,便可
    的頭像 發表于 10-23 18:19 ?1.7w次閱讀
    如何更簡單的給<b class='flag-5'>單片機</b>更新<b class='flag-5'>固件</b>?

    STM32單片機網絡遠程升級固件的源碼下載

    STM32單片機網絡遠程升級固件的源碼下載
    發表于 04-17 09:27 ?77次下載

    介紹單片機 MCU 固件打包腳本軟件

    1. 基于 Windows 平臺的單片機 MCU 固件腳本打包工具
    的頭像 發表于 02-15 15:40 ?1324次閱讀
    介紹<b class='flag-5'>單片機</b> MCU <b class='flag-5'>固件</b>打包腳本軟件

    基于單片機USB主從的設計與實現

    電子發燒友網站提供《基于單片機USB主從的設計與實現.pdf》資料免費下載
    發表于 10-19 10:54 ?0次下載
    基于<b class='flag-5'>單片機</b>的<b class='flag-5'>USB</b>主從<b class='flag-5'>機</b>的設計與<b class='flag-5'>實現</b>

    STM32單片機實現固件在線升級(IAP)

    1,固件升級方案綜述單片機固件升級方式有很多種。1、ICP:簡單說就是在單片機開發時使用燒錄器升級程序,比如使用J-Link燒錄單片機程序
    的頭像 發表于 12-16 08:00 ?5033次閱讀
    STM32<b class='flag-5'>單片機</b><b class='flag-5'>實現</b><b class='flag-5'>固件</b>在線升級(IAP)