1、 引言
USB2.0規(guī)范的推出極大地刺激了包括各類計(jì)算機(jī)外設(shè)在內(nèi)的多種電子消費(fèi)產(chǎn)品的開發(fā)設(shè)計(jì), USB已成為微機(jī)和眾多電子設(shè)備的重要標(biāo)準(zhǔn)接口。目前國(guó)外一些大公司已陸續(xù)推出了符合USB2.0規(guī)范的接口芯片,但國(guó)內(nèi)對(duì)該領(lǐng)域的研究尚處于較初級(jí)的階段。本文對(duì)USB IP核設(shè)計(jì)方法,提出了一種USB2.0設(shè)備接口IP核固件的實(shí)現(xiàn)方案,該方案采用合理定義的層次模型并已被實(shí)現(xiàn),實(shí)驗(yàn)結(jié)果表明該方案具備良好穩(wěn)定性和可擴(kuò)展性的固件結(jié)構(gòu)。
2 、USB2.0設(shè)備接口IP核的設(shè)計(jì)
USB2.0設(shè)備接口芯片IP核分為硬件和固件兩大部分。其中硬件部分主要完成USB2.0協(xié)議中的鏈路層功能;而固件除協(xié)助硬件完成USB2.0協(xié)議外,還負(fù)責(zé)解釋設(shè)備子類協(xié)議,并實(shí)現(xiàn)對(duì)具體外部應(yīng)用系統(tǒng)(設(shè)備元件)的操作。
從硬件結(jié)構(gòu)分析,基于增強(qiáng)型8051MCU核的 USB2.0設(shè)備接口芯片(IP核)應(yīng)包括以下幾個(gè)模塊:
(1)USB2.0傳輸宏單元接口模塊UTMI(USB2.0 Trans ceiv er Macrocell Interface): USB2.0 IP核與USB總線之間的接口,負(fù)責(zé)接收USB2.0總線上的高速串行數(shù)據(jù);
(2)串行接口引擎模塊SIE(Serial In ter face Engine):一方面與UTM接口進(jìn)行USB總線上的包級(jí)處理和傳輸級(jí)處理;另一方面與內(nèi)部的端點(diǎn)緩沖及MCU進(jìn)行交互;
(3)端點(diǎn)緩沖模塊Endpoint_Buffer:存放與主機(jī)端交互的數(shù)據(jù);
(4)通用可編程接口及多總線模塊GPIO- &MultiBus:IP核與外部應(yīng)用系統(tǒng)(設(shè)備元件)之間的聯(lián)系通道,包括DMA控制模塊;
(5)微處理器模塊MCU及其接口模塊MCU_
Bus:MCU(8051核)中固件將配合其他各硬件模塊完成所需功能。
USB2.0設(shè)備接口IP核固件不僅要完成與主機(jī)的通信,還要實(shí)現(xiàn)對(duì)外部應(yīng)用系統(tǒng)(設(shè)備元件)操作,因此,IP核固件可分為以下三大模塊。
(1)USB傳輸處理模塊:接收并分析底層硬件送來的各種信號(hào)(如SIE送來的各種中斷請(qǐng)求),負(fù)責(zé)將Endpoint中接收到的主機(jī)命令/數(shù)據(jù)向上傳送到主機(jī)命令解析模塊,并在需要時(shí)向主機(jī)返回命令處理結(jié)果;
(2)主機(jī)命令解析模塊:分析處理USB傳輸處理模塊送來的主機(jī)命令,并負(fù)責(zé)將命令執(zhí)行結(jié)果返給USB傳輸處理模塊;
(3)設(shè)備應(yīng)用處理模塊:根據(jù)主機(jī)命令發(fā)送具體操作信號(hào)到外部應(yīng)用系統(tǒng)(設(shè)備元件),并返回外部器件的狀態(tài)/數(shù)據(jù)。
為使固件系統(tǒng)充分穩(wěn)定并具有良好的可擴(kuò)展性,我們將固件抽象為設(shè)備枚舉、傳輸控制、命令解析、外部應(yīng)用操作等幾個(gè)層次,如圖1所示。
3、 USB大容量存儲(chǔ)設(shè)備固件的設(shè)計(jì)與實(shí)現(xiàn)
本IP核固件采用的是Windows OS支持的Bulk-Only傳輸協(xié)議及SCSI命令集。
3.1 固件總流程
圖2所示為USB大容量存儲(chǔ)設(shè)備固件工作流程。
該固件涉及到對(duì)4個(gè)主要中斷的處理,即 Com mand端點(diǎn)0的In 中斷和Out中斷、Bulk-In端點(diǎn)中斷和Bulk-Out端點(diǎn)中斷。其中端點(diǎn)0主要用于設(shè)備枚舉過程中主機(jī)與設(shè)備的交互,Bulk端點(diǎn)則用于枚舉成功后主機(jī)與設(shè)備的交互。
3.2 設(shè)備枚舉層流程
圖3所示為USB設(shè)備的枚舉流程。設(shè)備從接入 USB電纜開始,依次經(jīng)過Attached、Powered、Default和Addressed幾個(gè)狀態(tài),最終進(jìn)入Configured態(tài)成為可用設(shè)備。
枚舉過程中所需的各種描述符表可由用戶設(shè)置后存放在指定存儲(chǔ)單元。
3.3 Bulk-Only傳輸控制層流程
設(shè)備枚舉成功后Bulk端點(diǎn)開始工作。設(shè)備端 Bulk-Only工作流程如下:
1.主機(jī)通過Bulk-Out端點(diǎn)發(fā)出命令包CBW;
2.設(shè)備接收CBW,解析其中包含的SCSI命令;
3.設(shè)備執(zhí)行SCSI命令,如需要,通過Bulk端點(diǎn)完成Data交換;
4.設(shè)備根據(jù)SCSI命令執(zhí)行情況通過Bulk-In端點(diǎn)返回命令狀態(tài)包CSW給主機(jī);
5.設(shè)備等待主機(jī)的下一個(gè)CBW。
圖4所示為Bulk-In和Bulk-Out中斷服務(wù)流程。其中涉及到USB設(shè)備的幾種工作狀態(tài)有:
(1)命令接收態(tài):本次命令處理完(已返回 CSW),設(shè)備等待下一次主機(jī)命令。在該狀態(tài)下,設(shè)備將等待Bulk-Out中斷,試圖從Bulk-Out端點(diǎn)接收一個(gè)有效的CBW。
(2)狀態(tài)發(fā)送態(tài):本次命令已執(zhí)行完畢,等待主機(jī)索要CSW。在該狀態(tài)下,設(shè)備將等待Bulk-In中斷,試圖從Bulk-In端點(diǎn)發(fā)送一個(gè)有效的CSW 給主機(jī)。
(3)數(shù)據(jù)接收態(tài):設(shè)備通過解析主機(jī)命令得知主機(jī)將發(fā)送數(shù)據(jù),于是設(shè)備等待接收數(shù)據(jù)。在該狀態(tài)下,設(shè)備將等待Bulk-Out中斷,試圖從Bulk-Out端點(diǎn)接收一個(gè)或一批數(shù)據(jù)。數(shù)據(jù)接收完后設(shè)備將根據(jù)具體情況確定命令執(zhí)行結(jié)果狀態(tài)。
(4)數(shù)據(jù)發(fā)送態(tài):設(shè)備通過解析主機(jī)命令得知主機(jī)將索要數(shù)據(jù),于是設(shè)備準(zhǔn)備發(fā)送數(shù)據(jù)。在該狀態(tài)下,設(shè)備將等待Bulk-In中斷,試圖從Bulk- In端點(diǎn)發(fā)送一個(gè)或一批數(shù)據(jù)。數(shù)據(jù)發(fā)送完設(shè)備將根據(jù)具體情況確定命令執(zhí)行結(jié)果狀態(tài)。
(5)異常狀態(tài):當(dāng)發(fā)生某些不可預(yù)知的錯(cuò)誤時(shí),設(shè)備進(jìn)入異常態(tài),并將根據(jù)不同錯(cuò)誤類型采取不同措施試圖從錯(cuò)誤中恢復(fù)。
3.4 SCSI命令解析(層)流程
對(duì)某種特定的大容量存儲(chǔ)設(shè)備來說,一些無意義的SCSI命令可以不必處理(實(shí)際上主機(jī)也不會(huì)使用這些命令)。設(shè)備在接收到有效的SCSI命令后,將根據(jù)命令的不同要求為數(shù)據(jù)的發(fā)送或接收做好準(zhǔn)備,并切換到下一個(gè)有效的工作狀態(tài),如圖5 所示。
3.5 對(duì)存儲(chǔ)介質(zhì)的讀寫操作及優(yōu)化
設(shè)備固件在正確分析主機(jī)送來的SCSI命令后,可能會(huì)對(duì)存儲(chǔ)介質(zhì)進(jìn)行讀、寫、擦除等操作。為進(jìn)一步提高存儲(chǔ)介質(zhì)的讀寫速度,本固件方案還對(duì)存儲(chǔ)介質(zhì)操作進(jìn)行了有效的優(yōu)化:
(1)大批量數(shù)據(jù)讀寫時(shí)采用了DMA方式;
(2)對(duì)寫操作需時(shí)較長(zhǎng)的存儲(chǔ)介質(zhì)(如 FLASH)采用了中間緩沖,以減少寫操作次數(shù)或?qū)懖僮饕浦梁笈_(tái)進(jìn)行;
(3)對(duì)存儲(chǔ)介質(zhì)上的磁盤碎片定期進(jìn)行優(yōu)化整理。
合理地組合應(yīng)用這些方法可以有效地改進(jìn)介質(zhì)訪問的效率。
4、結(jié)論
上述大容量存儲(chǔ)設(shè)備的IP核固件已成功實(shí)現(xiàn),其硬件基礎(chǔ)是具有自主版權(quán)的、含MCU51核的USB設(shè)備接口IP核,固件采用Keil51C語言和51匯編語言混合完成。該固件采用分層設(shè)計(jì),可以較容易地根據(jù)具體應(yīng)用環(huán)境替換其中某些層次的代碼模塊,具有較強(qiáng)的移植性和實(shí)用性。為保證IP核固件具有一定的“健壯性”,實(shí)現(xiàn)過程中還需要注意仔細(xì)設(shè)計(jì)其中的錯(cuò)誤檢測(cè)和錯(cuò)誤恢復(fù)機(jī)制,包括如何合理安排眾多的中斷源、如何充分考慮協(xié)議中規(guī)定的操作時(shí)間限制、如何處理Watch Dog溢出等等。
本文討論的USB2.0設(shè)備固件方案不僅有效改進(jìn)和提高了USB設(shè)備的設(shè)計(jì)開發(fā)水平,還可廣泛應(yīng)用于USB2.0設(shè)備接口的實(shí)際應(yīng)用設(shè)計(jì),具有良好的理論和應(yīng)用價(jià)值。
責(zé)任編輯:gt
評(píng)論
查看更多