摘 要: 計算機總線技術制約著虛擬儀器的發展。USB通用串行總線的出現促進了儀器儀表的數字化。選用PHILIPS公司的PDIUSBD12作為接口芯片,用單片機C語言與匯編語言開發接口固件,完成基于USB的虛擬信號發生器接口程序設計。
關鍵詞:
中圖分類號: TP391.9 文獻標識碼: A 文章編號:2095-2163(2011)03-0077-03
The Interface Firmware Design of Virtual Instrument based on USB
ZHAO Junying1, SUN Ruifeng1,2, SUN Jian1
Abstract: Computer bus technology restricts the development of virtual instruments.Universal Serial Bus promotes the emergence of digital instrument. The paper adopts PDIUSBD12 interface chip of Philips Electronics Corporation, and uses C language and Assembly language to develop interface firmware, therefore completes interface program design of USB-based virtual signal generator .
Key words:
0 引言
USB設備接口固件的開發在整個虛擬信號發生器的設計過程中具有非常重要的作用,雖然設備接口硬件可以完成一部分的工作,但每一步都需要軟件協同處理;另外軟件還有一些必須處理的任務,例如對控制請求的處理。對開發者來說,接口硬件的工作是不可見的,可見的是接口固件在控制系統的每一步工作。
1 芯片的選擇
選擇微處理器主要從兩方面考慮,一方面控制USB接口芯片,另一方面控制信號的產生。接口芯片采用僅處理USB通信的PDIUSBD12,其主要特點是價格便宜、通用性強,可作為組件嵌入到不同的儀器儀表系統中。由于系統采用USB總線供電,其提供的電源功率有限,所以整個系統設計都要考慮選用低功耗的芯片和器件。功能模塊主要由D/A轉換功能部件組成,由于虛擬儀器的便攜特點,希望微處理器能具有兩個10位D/A轉換輸出通道,這樣就省去了D/A轉換芯片及其外圍電路的電源需要,也簡化了硬件電路。基于以上的考慮,選擇了臺灣凌陽公司的SPCE061A。因其集成度高、功耗低,能夠非常容易、快速地處理復雜的數字信號,而且性價比極高,非常適用于便攜式的儀器、儀表。
2 接口固件設計
開發接口固件采用模塊化和通用性的設計思想。使用單片機C語言和匯編語言完成接口固件的設計。匯編語言是可直接操作硬件的低級語言,C語言是通用的計算機程序設計語言,既有高級語言的特征又可以直接操作系統硬件,還可以進行結構化程序設計。接口固件設計采用分層結構。最底層是一些簡單、原始的功能子程序,這些子程序直接和硬件通信或者完成一些最基本的功能,例如向USB接口寫數據和讀取數據。通過調用這些子程序形成高層、更復雜的應用程序。接口固件模塊結構如圖1所示。程序按分層結構編寫,簡潔易懂,易于測試,不但增加了程序的通用性,又增加了代碼的可讀性。
SPCE061A控制程序由三部分組成:
(1)初始化芯片:SPCE061A、PDIUSBD12。在與設備進行數據交換之前,主機要了解設備的工作,根據設備的要求進行系統配置。在初始化過程中,主機調用總線枚舉進程,標識、管理設備狀態的改變。當主機發現有設備連入系統,就會向集線器發送命令,使連入設備進入復位狀態;此時設備把自己的地址暫時設成編號為0的特殊地址(為缺省狀態),通過此缺省地址端點0接受主機發送的命令,交由接口固件解釋并處理;再由主機統籌整個系統的狀況,為設備分配一個正式地址。此后主機跟設備通信都將以這個正式地址為基礎,通過一系列請求命令取得設備的用途和特性信息,為該設備選擇配置方式。
(2)主程序部分:主要任務是檢測標志位信號是否有改變,如果改變則執行相應的子程序,否則就會一直循環等待中斷。主機應用程序使用標準Windows API函數從連接設備讀取或寫入數據。由于主機和設備已交換完列舉信息,并且設備驅動程序已經分配和裝載,因此數據通道已經建立好了。設備主要工作是對配置端點進行端點操作,對相應寄存器的狀態位實時處理。
(3)中斷服務程序:主要完成接收、發送數據,設置相應的標志位的工作。首先主機發令牌包給PDIUSBD12,在PDIUSBD12接收到令牌包后會給單片機發送中斷請求;條件滿足時,單片機進入中斷服務程序。在此先讀PDIUSBD12的中斷服務寄存器,判斷 USB令牌包是哪種類型,然后再執行相應的操作。因此,單片機固件主要就是中斷服務程序的編寫。
在USB單片機編程中要完成對各種令牌包的響應,比較難處理的是Setup包,主要是對端點0的編程。主機負責建立Setup包的每個域的值,如表1所示。由設備固件程序負責解釋各個域的值,并根據其內容執行相應的操作。
USB設備的11種標準設備請求及用C語言編寫的執行請求的函數如表2所示。標準請求碼的范圍從00H到0CH。除了SET_address和SYNCH_frame請求之外,多數請求都成對出現。描述如下:
(1)清除特性是用來清除一個指定的特性。
(2)取得配置是返回當前設備的配置值,若返回0值表明設備沒有配置。
(3)取得描述符返回存在的描述符,包括設備、配置、接口、端點、類和字串描述符。
(4)取得接口主要用于支持多個接口配置的設備,主機請求當前的接口號。
(5)取得狀態返回設備、接口或端點的特性狀態,包括設備的供電形式、是否支持遠程喚醒等。
(6)設置地址請求指定設備以后通信的地址,完成此請求后,所有通信全都使用這個新地址。
(7)設置配置請求告訴設備使用選擇的配置,此配置必須是配置描述符中返回的設備所支持的。
(8)設置描述符請求主要用于更新或添加新的描述符,普通設備不支持這個請求。
(9)設置特性請求是用來使能一個設備、接口或端點。
(10)設置接口請求主要用于有多個接口配置的設備,主機可以為指定接口選擇一個配置。
系統初始化部分包括系統時鐘、 I/O口、中斷設置(開放外部中斷)、PDIUSBD12芯片軟件復位/初始化。其主流程核心部分是協議層的請求處理,關系到PC機枚舉USB設備是否成功。因此在調試單片機程序的過程中,要特別注意Windows對USB設備的枚舉順序。若枚舉成功,主機將會找到新的設備,提示安裝驅動程序;否則就會找到未知設備.