USB的固件處理流程_第1頁
USB的固件處理流程_第2頁
USB的固件處理流程_第3頁
USB的固件處理流程_第4頁
USB的固件處理流程_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

USB的固件處理流程USB的固件處理流程USB的固件處理流程USBFirmware的流程(USB固件程序解析)應(yīng)一位朋友的邀請,準(zhǔn)備把USBFirmware的流程寫一寫。首先聲明:這都是我這個菜鳥的一點認(rèn)識,如果有不準(zhǔn)確的地方,請大家多多包涵。通常來說USB設(shè)備(這里只分析USB設(shè)備,而不針對USBHOST,USBOTG和USBHUB)內(nèi)部都有一片USB的芯片和一個MCU,有些當(dāng)然有些廠商提供的USB芯片已經(jīng)集成了MCU在里邊,如Cypress的CY68013就是這樣的。這里考慮MCU和USB芯片分開的情況吧,集成的也類似,大家可以自己去分析。USB芯片完成USB底層的事物,接收的時候:將接收到的USB串行數(shù)據(jù)識別出來,解包后存放在內(nèi)部的緩存中,然后通過中斷的方式告知MCU收到數(shù)據(jù)包了,MCU通過和USB芯片的并行或串行接口讀回接收到的數(shù)據(jù)并進(jìn)行相應(yīng)的分析和處理;發(fā)送數(shù)據(jù)的時候,MCU將需要發(fā)送的數(shù)據(jù)通過和USB芯片的接口寫入到USB芯片內(nèi)部的緩存,寫入完成后,一般來說USB芯片會在接收到來自HOST的IN令牌包時,將緩存中的數(shù)據(jù)送到USB總線上去.當(dāng)發(fā)送完成后,通常USB芯片也可以通過中斷的方式告知MCU.從這里看出,USB芯片只是完成數(shù)據(jù)的解包和打包,并不對數(shù)據(jù)進(jìn)行任何分析和處理,數(shù)據(jù)包的分析和處理都是由MCU完成的。具體來說是由運(yùn)行在MCU中的程序,也就是通常所說的USBFirmware或者說USB固件程序完成的。首先來分析一次簡單的從HOST到Device的數(shù)據(jù)傳輸,即OUT型的傳輸,假設(shè)傳輸類型為BULK。USB傳輸只能由HOST發(fā)起,HOST需要向Device發(fā)送一個OUT令牌包。在這個包里指定了接受數(shù)據(jù)的設(shè)備地址、端點。然后將數(shù)據(jù)包發(fā)送到USB總線上。不是目的接收器件的USB設(shè)備不會響應(yīng)該數(shù)據(jù)包,目的接收設(shè)備如果能接收該數(shù)據(jù)包,則以ACK握手包響應(yīng),如果不能接收該數(shù)據(jù)包,則以NAK握手包響應(yīng)。在上述過程中,USB芯片會在接收完數(shù)據(jù)包后中斷MCU,然后MCU讀取緩存在USB芯片中的數(shù)據(jù)包,再決定回復(fù)ACK,或者是NAK.以上只是一次簡單的BULKOUT傳輸,對于BULKIN傳輸,HOST先發(fā)送一個IN的令牌包,USB芯片接收到該令牌包后會中斷MCU,MCU如果有數(shù)據(jù)發(fā)回HOST,則將數(shù)據(jù)寫入USB芯片內(nèi)對應(yīng)斷點的緩存,然后USB芯片會自動將數(shù)據(jù)發(fā)送至USB總線。并等待接收來自HOST的握手包。對于BLUK、Interrupt以及同步傳輸,傳輸過程都類似,整個傳輸過程由令牌包、數(shù)據(jù)包以及握手包組成。對于控制傳輸,一次傳輸由三個階段組成,即Setup階段、可選的數(shù)據(jù)階段以及狀態(tài)階段.其中Setup階段為一次OUT型的傳輸,HOST將8個字節(jié)的SETUP數(shù)據(jù)包發(fā)送給設(shè)備。這8個字節(jié)指定了這次控制傳輸?shù)恼埱箢愋?Device會根據(jù)這8個字節(jié)做出相應(yīng)的Action。第二個階段為數(shù)據(jù)階段,有些控制傳輸沒有這個階段,如SetAddress請求。數(shù)據(jù)階段,HOST將數(shù)據(jù)通過OUT型傳輸發(fā)送給Device,或者通過IN型傳輸向Device請求數(shù)據(jù)。第三個階段為狀態(tài)階段,即得到這次控制傳輸?shù)臓顟B(tài),確認(rèn)這次傳輸是否正常完成。HOST或者Device以一個長度為0的空數(shù)據(jù)包表示肯定的應(yīng)答。USBFirmware中大部分程序都在處理控制傳輸,具體來說是11種標(biāo)準(zhǔn)請求以及針對具體設(shè)備的類請求,如MassStorage類的請求,還有些廠商自定義的請求。USBFirmware的設(shè)計和調(diào)試首先應(yīng)從一次基本的傳輸開始。要能正常的完成一次傳輸,尤其是控制傳輸,否則連設(shè)備的枚舉都不能完成,也就是說設(shè)備不能被計算機(jī)正確識別。USBFirmware的流程(二)Bytopone發(fā)表于2008-7—2120:59:00USB設(shè)備上電以后,固件程序就開始運(yùn)行,首先要做的第一件事情自然是初始化,包括設(shè)備自身邏輯的初始化和USB芯片的初始化。一般來說,USB固件均被設(shè)計成為前后臺的方式,前臺程序為一個大的死循環(huán),后臺則為中斷處理函數(shù).當(dāng)USB芯片產(chǎn)生中斷信號時,微處理器進(jìn)入到中斷處理程序,并讀取USB芯片的中斷標(biāo)記,判斷中斷的類型(如傳輸錯誤、收到Setup包、收到令牌包、傳輸完成等),然后設(shè)置相應(yīng)的標(biāo)志位。存儲該標(biāo)志位的變量應(yīng)該是一個全局變量。前臺程序中,固件不斷的檢測標(biāo)志位,判斷是否有中斷事件發(fā)生,如果有的話則進(jìn)入到相應(yīng)的時間處理函數(shù)中。前面已經(jīng)說過,USB固件程序大部分都是在處理來自HOST的請求,也就是HOST發(fā)來的SETUP數(shù)據(jù)包。當(dāng)前臺程序檢測到SETUP事件時,會先從USB芯片的緩存中讀回8個字節(jié)的SETUP包,然后根據(jù)USB規(guī)范中定義的結(jié)構(gòu),對數(shù)據(jù)包盡心解析,然后進(jìn)行到相應(yīng)的請求處理函數(shù)?;究梢钥偨Y(jié)成為如下的結(jié)構(gòu)。========后臺=========================前臺==================中斷處理函數(shù)(ISR)循環(huán){讀USB芯片的中斷寄存器【設(shè)備事務(wù)】清USB芯片中斷如果有USB中斷標(biāo)志被置位判斷中斷類型{中斷事件處理置中斷標(biāo)志讀SETUP包=======================解析SETUP包調(diào)用相應(yīng)的請求處理函數(shù)}}===================================在請求函數(shù)處理函數(shù)中,固件程序或?qū)⑾鄳?yīng)的描述符寫入到USB芯片的斷點緩沖,然后發(fā)送到HOST,或者通過從USB芯片的斷點緩存中讀回HOST發(fā)來的數(shù)據(jù)。下面來說明一次典型的getdescriptor請求。HOST發(fā)送SETUP令牌包-—--—---—〉引起USB芯片中斷MCU,中斷事件為SETUP,MCU被中斷,并設(shè)置中斷標(biāo)志HOST發(fā)送SETUP數(shù)據(jù)包-——————--〉USB芯片接收數(shù)據(jù)包,并存放在斷點緩存中,并自動以ACK響應(yīng)主機(jī)固件中,MCU檢測到中斷事件,且類型為SETUP事件,進(jìn)入到SETUP事件處理函數(shù),讀回SETUP數(shù)據(jù)包,并解析之,將設(shè)備描述符填入到USB芯片的緩存,等待數(shù)據(jù)發(fā)送完成。HOST發(fā)送IN令牌包——--—---—-—-——--—>如果此時MCU已經(jīng)完成數(shù)據(jù)的填充,則USB芯片將數(shù)據(jù)發(fā)回HOST,否則以NAK響應(yīng)。循環(huán)上一步驟,直至數(shù)據(jù)被發(fā)送完成。HOST收到描述符,并以ACK響應(yīng)USB設(shè)備—--—-——〉此時USB芯片中斷MCU,MCU將從此中斷得知傳輸完成。MCU設(shè)置USB芯片,在收到下一個IN令牌包時自動回復(fù)一個長度為0的數(shù)據(jù)包。HOST發(fā)送IN令牌包--—--——----—--——〉USB芯片自動回復(fù)一個長度為0的數(shù)據(jù)包。HOST收到數(shù)據(jù)包,并回ACK?!?———————————->USB請

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論