關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于USB接口設(shè)備的固件程序設(shè)計

基于USB接口設(shè)備的固件程序設(shè)計

作者: 時間:2009-12-29 來源:網(wǎng)絡(luò) 收藏

硬件層:這是固件中最低的層,它完成向PDID12的硬件通道.當(dāng)固件轉(zhuǎn)向其他的CPU 平臺,這部分需要修改或增加內(nèi)容。
PDID12命令接口:為進一步簡化用PDID12編程,固件定義了一系列命令接口,它們壓縮了使用PDIUSBD12的所有功能。
中斷服務(wù)程序:這部分代碼處理由PDIUSBD12產(chǎn)生的中斷。它接收從PDIUSBD12內(nèi)部的FIFO區(qū)到CPU存儲器的數(shù)據(jù),并且建立合適的標(biāo)志以通知主程序處理。
主程序:主程序檢查事件的標(biāo)志,轉(zhuǎn)移到合適的子程序做進一步的處理。它也包含人機接口代碼,例如,發(fā)光二極管和鍵盤掃描。
協(xié)議層:協(xié)議層處理標(biāo)準USB設(shè)備請求,也處理具體的用戶請求諸如DMA和TWAIN。
2) 固件任務(wù)
在編寫固件程序的過程中,PDIUSBD12 作為接口芯片硬件為我們做了大量的工作,其中包括:
a.檢測新的進入事務(wù);翻譯從USB 總線上獲得的信息;b. 檢測事務(wù)的目的地址,以決定是否響應(yīng);e. 確定事務(wù)的類型;d. 從USB 總線上接收數(shù)據(jù)到FIFO;e. 從FIFO 中發(fā)送數(shù)據(jù)到USB 總線上;f. 計算校驗位,檢測并報告結(jié)果。
但還有相當(dāng)一部分的工作由固件程序來完成。這部分任務(wù)包括:
a.初始化PDIUSBD12并處理PDIUSBD12的中斷;b.響應(yīng)各種請求,至少要響應(yīng)標(biāo)準的11種請求;c.選擇適當(dāng)?shù)臄?shù)據(jù)寫入PDIUSBD12的FIFO;d.從PDIUSBD12的FIFO中讀取數(shù)據(jù);
3) PDIUSBD12 的初始化
與一般的接口芯片一樣,PDIUSBD12必須先初始化以后再使用,初始化的步驟如下:
a.用Set Address/Enable命令使能芯片功能,地址應(yīng)設(shè)為0;b.用Set Endpoint Enable命令使能芯片上除端點0、1外的所有端點;c.用Set Mode 命令斷開連接,延時1-2s;用Set Mode 命令連接;d. 用命令Read Interrupt Register清空中斷寄存器;
初始化完后,D12就可以接收USB 總線上的信息了。之后,主機通過端點0、1來讀取設(shè)備信息,配置設(shè)備、設(shè)置設(shè)備地址,完成設(shè)備列舉。
4) USB 設(shè)備的列舉
當(dāng)有一個USB 設(shè)備連接到主機上時,主機的USB總線驅(qū)動、根集線器驅(qū)動獲得設(shè)備連接的通知,開始列舉設(shè)備。在主機一端,列舉設(shè)備的過程是向設(shè)備發(fā)出一系列的標(biāo)準請求。在設(shè)備一端,則需要響應(yīng)主機發(fā)出的請求。其順序如下:
a響應(yīng)獲取設(shè)備描述符的請求。務(wù)必保證設(shè)備描述符的正確發(fā)送;b.響應(yīng)設(shè)置地址的請求,設(shè)備進入編址態(tài);c.連續(xù)三次響應(yīng)獲取設(shè)備描述符請求;d.響應(yīng)獲取配置描述符的的請求,務(wù)必保證配置描述符的正確發(fā)送;e.發(fā)送全部的配置描述符,同時發(fā)送所有的接口描述符、端點描述符;
如果以上步驟都正確,則主機會提示找到新設(shè)備,安裝驅(qū)動程序。否則,提示找到未知設(shè)備,設(shè)備不可用。
5) USB 設(shè)備固件框架的實現(xiàn)
從上面的討論發(fā)現(xiàn)編寫USB設(shè)備的固件實質(zhì)上是處理各種主機提出的請求。其中,標(biāo)準的11個請求是必須實現(xiàn)的,如果要求設(shè)備有其它的功能還必須加入自定義的請求。按照USB 2.0 中的定義,稱這些固件程序為USB設(shè)備的框架。下面介紹USB設(shè)備框架的實現(xiàn)。
3. 主程序的結(jié)構(gòu)
一旦加電,MCU就要初始化所有的端口,存儲器,定時器和中斷服務(wù)子程序。之后,MCU需要重新連接USB。這個程序很重要因為它保證了在MCU未準備好服務(wù)D12之前,D12不會動作。
在主循環(huán)程序里面,MCU會詢問鍵盤上的任何動作。如果任何一個具體的鍵被按下,處理鍵的命令就會執(zhí)行處理程序,之后返回主程序。這個程序僅是用來調(diào)試用。1ms定時是用來啟動檢查被按下鍵的子程序。
當(dāng)詢問到達檢查Setup包時,它需要先確定setup標(biāo)志是否建立。如果setup標(biāo)志已經(jīng)確立,它將發(fā)送設(shè)備請求到協(xié)議層進行處理。下面的流程圖顯示了主程序在前臺執(zhí)行的情況。
4. 中斷服務(wù)程序的實現(xiàn)
PDIUSBD12固件是完全中斷驅(qū)動的,因此中斷服務(wù)程序是整個固件編寫過程中非常重要的一環(huán)。在進入中斷服務(wù)程序后首先要發(fā)用命令Read Interrupt Register(控制字為F4H)讀取中斷寄存器,根據(jù)中斷寄存器的內(nèi)容判斷中斷源,然后跳轉(zhuǎn)到不同的服務(wù)程序中去處理中斷。
中斷服務(wù)程序(ISR)與主程序通信是通過事件標(biāo)志“EPPFLAG”和數(shù)據(jù)緩沖區(qū)“CONTROL-XFER”。


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉