基于層次模型的USB2.0接口芯片IP核固件的設(shè)計
該固件涉及到對4個主要中斷的處理,即 Com mand端點0的In 中斷和Out中斷、Bulk-In端點中斷和Bulk-Out端點中斷。其中端點0主要用于設(shè)備枚舉過程中主機與設(shè)備的交互,Bulk端點則用于枚舉成功后主機與設(shè)備的交互。
3.2 設(shè)備枚舉層流程
圖3所示為USB設(shè)備的枚舉流程。設(shè)備從接入 USB電纜開始,依次經(jīng)過Attached、Powered、Default和Addressed幾個狀態(tài),最終進入Configured態(tài)成為可用設(shè)備。
枚舉過程中所需的各種描述符表可由用戶設(shè)置后存放在指定存儲單元。
3.3 Bulk-Only傳輸控制層流程
設(shè)備枚舉成功后Bulk端點開始工作。設(shè)備端 Bulk-Only工作流程如下:
1.主機通過Bulk-Out端點發(fā)出命令包CBW;
2.設(shè)備接收CBW,解析其中包含的SCSI命令;
3.設(shè)備執(zhí)行SCSI命令,如需要,通過Bulk端點完成Data交換;
4.設(shè)備根據(jù)SCSI命令執(zhí)行情況通過Bulk-In端點返回命令狀態(tài)包CSW給主機;
5.設(shè)備等待主機的下一個CBW。
圖4所示為Bulk-In和Bulk-Out中斷服務(wù)流程。其中涉及到USB設(shè)備的幾種工作狀態(tài)有:
(1)命令接收態(tài):本次命令處理完(已返回 CSW),設(shè)備等待下一次主機命令。在該狀態(tài)下,設(shè)備將等待Bulk-Out中斷,試圖從Bulk-Out端點接收一個有效的CBW。
(2)狀態(tài)發(fā)送態(tài):本次命令已執(zhí)行完畢,等待主機索要CSW。在該狀態(tài)下,設(shè)備將等待Bulk-In中斷,試圖從Bulk-In端點發(fā)送一個有效的CSW 給主機。
(3)數(shù)據(jù)接收態(tài):設(shè)備通過解析主機命令得知主機將發(fā)送數(shù)據(jù),于是設(shè)備等待接收數(shù)據(jù)。在該狀態(tài)下,設(shè)備將等待Bulk-Out中斷,試圖從Bulk-Out端點接收一個或一批數(shù)據(jù)。數(shù)據(jù)接收完后設(shè)備將根據(jù)具體情況確定命令執(zhí)行結(jié)果狀態(tài)。
(4)數(shù)據(jù)發(fā)送態(tài):設(shè)備通過解析主機命令得知主機將索要數(shù)據(jù),于是設(shè)備準備發(fā)送數(shù)據(jù)。在該狀態(tài)下,設(shè)備將等待Bulk-In中斷,試圖從Bulk- In端點發(fā)送一個或一批數(shù)據(jù)。數(shù)據(jù)發(fā)送完設(shè)備將根據(jù)具體情況確定命令執(zhí)行結(jié)果狀態(tài)。
(5)異常狀態(tài):當發(fā)生某些不可預(yù)知的錯誤時,設(shè)備進入異常態(tài),并將根據(jù)不同錯誤類型采取不同措施試圖從錯誤中恢復。
3.4 SCSI命令解析(層)流程
對某種特定的大容量存儲設(shè)備來說,一些無意義的SCSI命令可以不必處理(實際上主機也不會使用這些命令)。設(shè)備在接收到有效的SCSI命令后,將根據(jù)命令的不同要求為數(shù)據(jù)的發(fā)送或接收做好準備,并切換到下一個有效的工作狀態(tài),如圖5 所示。
3.5 對存儲介質(zhì)的讀寫操作及優(yōu)化
設(shè)備固件在正確分析主機送來的SCSI命令后,可能會對存儲介質(zhì)進行讀、寫、擦除等操作。為進一步提高存儲介質(zhì)的讀寫速度,本固件方案還對存儲介質(zhì)操作進行了有效的優(yōu)化:
(1)大批量數(shù)據(jù)讀寫時采用了DMA方式;
(2)對寫操作需時較長的存儲介質(zhì)(如 FLASH)采用了中間緩沖,以減少寫操作次數(shù)或?qū)懖僮饕浦梁笈_進行;
(3)對存儲介質(zhì)上的磁盤碎片定期進行優(yōu)化整理。
合理地組合應(yīng)用這些方法可以有效地改進介質(zhì)訪問的效率。
4結(jié)論
上述大容量存儲設(shè)備的IP核固件已成功實現(xiàn),其硬件基礎(chǔ)是具有自主版權(quán)的、含MCU51核的USB設(shè)備接口IP核,固件采用Keil51C語言和51匯編語言混合完成。該固件采用分層設(shè)計,可以較容易地根據(jù)具體應(yīng)用環(huán)境替換其中某些層次的代碼模塊,具有較強的移植性和實用性。為保證IP核固件具有一定的"健壯性",實現(xiàn)過程中還需要注意仔細設(shè)計其中的錯誤檢測和錯誤恢復機制,包括如何合理安排眾多的中斷源、如何充分考慮協(xié)議中規(guī)定的操作時間限制、如何處理Watch Dog溢出等等。
本文討論的USB2.0設(shè)備固件方案不僅有效改進和提高了USB設(shè)備的設(shè)計開發(fā)水平,還可廣泛應(yīng)用于USB2.0設(shè)備接口的實際應(yīng)用設(shè)計,具有良好的理論和應(yīng)用價值。
評論