基于USB接口1553B總線設備檢測系統設計
3 軟件設計
1553B設備測試軟件首先要實現USB接口與PC之間的通信,然后,再對設備進行性能檢測。因此,需要對USB芯片進行固件、PC驅動程序和測試程序設計。
3.1 USB固件設計
AT89C52中的固化程序可采用C51 設計,主要功能是:控制PDIUSBDl2接受USB驅動程序的請求;控制PDIUSBDl2接受應用程序的控制指令;通過PDIUSBDl2存儲數據并實時上傳PC機。PDIUSBDl2的固件設計成完全的中斷驅動,當CPU處理前臺任務時USB的傳輸可在后臺進行,確保了最佳的傳輸速率和更好的軟件結構,簡化了編程和調試。單片機通過PDIUSBDl2與主機通信的過程簡述如下::當PDIUSBDl2接收到主機發來的令牌包后就給單片機發中斷,單片機進入中斷服務程序。它將數據從PDIUSBD12的內部FIFO取回到CPU存儲器并根據中斷寄存器判斷USB令牌包的類型從而建立正確的事件標志以通知主循環程序進行處理,主循環檢查事件標志并進入對應的子程序進行進一步的處理,固件程序流程如圖2所示。系統上電后,先檢測PDIUSBD12,如檢測不成功則報錯,要使用者重插USB接口,再次檢測。檢測成功則根據PDIUSBD12的中斷類型設定中斷標志位的值,再根據中斷位的值調用相應的功能子程序[3]。
圖2 固件框架流程圖
在本設計中,功能子程序主要包括兩部分:
1)通過AT89C52的P0端口從FPGA接收1553B設備數據,重新打包,再經過P0端口寫入PC機;
2) 通過P0端口接收PC數據,重新打包,通過AT89C52的P0端口從FPGA寫入1553B設備。
3.2 驅動程序
完成驅動程序設計的方法一般有三種:基于DDK開發、基于Windrive開發和基于DriveStudio開發。由于Windrive和DriveStudio開發對DDK中的函數進行了一定程度的封裝,它們開發的難度比直接用DDK開發要小,但開發的靈活性不如DDK。本設計使用的驅動是DriveStudio與DDK配合進行開發,開發驅動程序的效率較高。
在驅動程序開發平臺搭建成功后,我們利用驅動程序生成向導Driver Wizard,根據硬件設置生成USB設備驅動程序的大體框架。設置如下:①選擇 WDM的驅動程序類型和Windows 2000運行平臺。②選擇 USB總線類型,填寫它的VID(供應商ID)和PID(設備ID),這些信息由芯片的供應商提供。③增加端點 1和端點2,它們分別具有IN 和OUT屬性。④根據需要選擇對設備的操作有:Read、Write、Device Control和CleanUp。⑤選擇給端點2產生 BULK Read和Write的代碼, 向導會自動產生一套對端點2進行讀、寫的代碼。⑥設置驅動程序的屬性,采用WDM接口;在選取讀寫方式時應遵循一條原則:需要快速傳送大量數據時,用 Direct I/O,反之用 Buffer I/O,本設計數據量不大,故選用Buffer I/O;由于無特殊的電源需求,故選用系統默認的Manage Power For This Device。⑦增加IOCTL接口,在其生成的代碼框架中加入自己的操作,以實現一個完整的USB 設備驅動程序。最后就生成了一個 WDM 型的 USB 設備驅動程序框架和一個測試該驅動程序的測試程序大體框架。然后在其中添加需要的功能代碼。
評論