摘要:本文介紹了PDIUSBD12芯片的工作性能與特點(diǎn),利用該芯片,經(jīng)過硬件設(shè)計(jì)和軟件調(diào)試,開發(fā)出了一種USB設(shè)備接口。該接口適用于虛擬儀器的開發(fā),其性能穩(wěn)定,可靠性高,具有廣闊的應(yīng)用前景。
關(guān)鍵詞:USB接口;PDIUSBD12;固件
USB接口是近年來應(yīng)用在PC領(lǐng)域的新型接口技術(shù),它基于單一的總線接口技術(shù)來滿足多種應(yīng)用領(lǐng)域的需求。它的即插即用、支持熱插拔、易于擴(kuò)展等特性極大的方便了用戶的使用,使其成為開發(fā)虛擬儀器接口的首選,具有極好的應(yīng)用前景。本文利用USB的接口芯片PDIUSBD12,經(jīng)過硬件設(shè)計(jì)和軟件調(diào)試,開發(fā)了一種USB接口設(shè)備。
1、芯片的選擇
在進(jìn)行任何USB設(shè)備開發(fā)之前,首先應(yīng)選擇適合的USB控制器芯片。目前市場上供應(yīng)的USB控制器主要有兩種:帶USB接口的單片機(jī)和純粹的USB接口芯片。帶USB接口的單片機(jī)從應(yīng)用上可分為兩類:一類是從底層設(shè)計(jì)專用于USB控制的單片機(jī);另一類是增加了USB接口的普通單片機(jī),選擇這類USB控制器的最大好處是開發(fā)者對系統(tǒng)結(jié)構(gòu)和指令集非常熟悉,開發(fā)工具簡單,但對于簡單或低成本系統(tǒng),價(jià)格高將會是最大的障礙。純粹的USB接口芯片僅處理USB通信,必須有個(gè)外部微處理器來進(jìn)行協(xié)議處理和數(shù)據(jù)交換。純粹的USB接口芯片主要特點(diǎn)是價(jià)格便宜、接口方便、可靠性強(qiáng),尤其適用于產(chǎn)品的改型設(shè)計(jì)。典型的產(chǎn)品有Philips公司的PDIUSBD11/12、NS公司的USBN9603/9604(并行接口)、NetChip公司的NET2888。這里選擇功能強(qiáng)大、支持總線供電和設(shè)備自供電兩種方式的PDIUSBD12作為接口芯片來設(shè)計(jì)USBS設(shè)備接口。
2、 PDIUSBD12芯片的性能與特點(diǎn)
PDIUSBD12是PHILIPS在USB1.1協(xié)議設(shè)備端使用最多的芯片之一,此芯片是帶有并行總線和局部DMA傳輸能力的全速USB接口器件。片內(nèi)集成了高性能的USB接口器件、SIE、FIFO存儲器以及電壓調(diào)整器等,可與任何外部微控制器/微處理器實(shí)現(xiàn)高速并行接口。
PDIUSBD12芯片的功能框圖如圖1所示
PDIUSBD12是一款性價(jià)比很高的USB器件,它采用28PIN腳模式,有SO28和TSSOP28封裝,SIE實(shí)現(xiàn)了全部的USB協(xié)議層,且完全由硬件實(shí)現(xiàn)而不需要固件的參與。其具體功能如下:同步方式識別、并/串轉(zhuǎn)換、比特填充/解填充、CRC校驗(yàn)/生成、PID確認(rèn)/生成、地址識別和握手信號的鑒定/生成、批處理數(shù)據(jù)傳輸可達(dá)1MB/s,3±0.3V雙極性輸入范圍,可接受4.5~5.5V工作電壓、工業(yè)級標(biāo)準(zhǔn)工作環(huán)境溫度范圍為-40~+85℃。利用該芯片可以高效地完成微控制器所送出的信號到USB規(guī)范的信號的轉(zhuǎn)換。
3、 USB設(shè)備接口的硬件設(shè)計(jì)
利用PDIUSBD12芯片來實(shí)現(xiàn)USB接口,允許設(shè)計(jì)者挑選一種適合的微控制器進(jìn)行開發(fā)。設(shè)計(jì)者可以根據(jù)需要和實(shí)際情況進(jìn)行合理選擇。這樣,不僅減少了開發(fā)成本,而且大大縮短了開發(fā)周期。本設(shè)計(jì)采用了80C51作為微控制器,由于80C51是應(yīng)用比較廣泛的一種單片機(jī)微控制器,具有比較成熟的軟件開發(fā)平臺,且大多數(shù)電子工程師對其指令操作比較熟悉。因此,使用者可以利用比較熟悉80C51進(jìn)行核心程序的設(shè)計(jì),即用80C51來實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)墓δ,而具體的數(shù)據(jù)信號的轉(zhuǎn)換則由PDIUSBD12來完成。
USB設(shè)備接口的硬件設(shè)計(jì)主要以PDIUSBD12為中心,設(shè)計(jì)它與USB物理接口及微控制器(80C51)之間的連接。這里采用總線供電方式設(shè)計(jì)全速USB設(shè)備接口,其接口電路如圖2所示:
圖2 USB設(shè)備接口電路
當(dāng)P27=1時(shí),80C51給PDIUSBD12發(fā)命令;當(dāng)P27=0時(shí),向PDIUSBD12寫數(shù)據(jù)或從PDIUSBD12讀數(shù)據(jù)。PDIUSBD12的GL_N接LED,對其工作狀態(tài)進(jìn)行監(jiān)控,LED在USB被連接時(shí)會發(fā)光,在進(jìn)行數(shù)據(jù)傳輸時(shí)會閃爍,LED常亮或一直不亮說明USB接口有問題。R1,R2是串聯(lián)終端電阻。L1,L2是磁珠,分別串聯(lián)在電源和地中,USB總線電源從L1引入。如果是設(shè)備自供電,可以不接L1。對于自供電設(shè)備的電源必須要與總線的電源進(jìn)行隔離,自供電電源與USB總線的電源之間只能共地,同時(shí)設(shè)備不能通過USB口向VBUS輸出電流。PDIUSBD12片內(nèi)集成了6MHZ—8MHZ時(shí)鐘乘法PLL,這樣就可以使用低成本的6MHZ晶振,EMI也隨之降低。同時(shí),PDIUSBD12的時(shí)鐘輸出可以作為微處理器的外部晶振輸入。
4、 USB設(shè)備接口的固件程序設(shè)計(jì)
USB設(shè)備接口固件的開發(fā)在整個(gè)USB接口設(shè)計(jì)中具有舉足輕重的地位。設(shè)備接口硬件需要軟件的協(xié)同來完成相應(yīng)的工作,然而固件的編制并不受具體微處理器種類的限制。對于開發(fā)者而言,接口硬件的工作是不可見的,可見的是接口固件在控制整個(gè)接口時(shí)所做的工作。
PDIUSBD12的固件設(shè)計(jì)成完全的中斷驅(qū)動(dòng),當(dāng)CPU處理前臺任務(wù)時(shí),USB的傳輸可在后臺進(jìn)行。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡化了編程和調(diào)試。后臺ISR(中斷服務(wù)程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志“EPPFLAGS”和Setup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”來實(shí)現(xiàn),其原理如圖3所示。
圖3 前后臺工作原理
對于這種結(jié)構(gòu),主循環(huán)不用考慮數(shù)據(jù)的來源,只要檢查循環(huán)緩沖區(qū)內(nèi)需要處理的新數(shù)據(jù)。這樣,主循環(huán)可以專注于數(shù)據(jù)的處理,而ISR能夠以最大可能的速度進(jìn)行數(shù)據(jù)的傳輸。
D12固件編寫成分層結(jié)構(gòu)簡潔且易于修改和測試,既增加了代碼的可讀性,又增加了程序的通用性。固件的積木式結(jié)構(gòu)如圖4所示。
圖4 固件結(jié)構(gòu)和數(shù)據(jù)流向
各模塊程序的分工如下:
硬件提取層:對單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作。
PDIUSBD12命令接口:對PDIUSBD12器件進(jìn)行操作的模塊子程序集。
中斷服務(wù)程序:當(dāng)PDIUSBD12向單片機(jī)發(fā)出中斷請求時(shí),讀取PDIUSBD12的中斷傳輸來的數(shù)據(jù),并設(shè)定事件標(biāo)志“EPPFLAGS”和Setup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”傳輸給主循環(huán)程序。
標(biāo)準(zhǔn)請求處理程序:對USB的標(biāo)準(zhǔn)設(shè)備請求進(jìn)行處理。
廠商請求處理程序:對用戶添加的廠商請求進(jìn)行處理。
主循環(huán)程序:發(fā)送USB請求、處理USB總線事件和用戶功能處理等。
下面是固件程序主循環(huán)的部分代碼:
#include<reg51.h>
#define D12_COMMAND (*(unsigned char xdata*)0xff01)
#define D12_DATA (*(unsigned char xdata*)0x7f02)
extern void D12_int();
sbit D12_suspend=P3^4;
sbit D12_int_n=P3^2;
void main(void)
{
unsigned char ist;
P3=0xff;
D12_COMMAND=0xf3;
D12_DATA=0x06;//設(shè)置模式0
D12_DATA=0x03;//初始化頻率
D12_COMMAND=0xd0;
D12_DATA=0x80;//設(shè)置地址0使能
D12_COMMAND=0xf3;//連接主機(jī)
D12_DATA=0x16;
While(1)
{ if(!D12_int_n)
{ D12_int(); }
}
}
5、 USB設(shè)備接口數(shù)據(jù)通信的兩個(gè)階段
USB設(shè)備接口的一系列狀態(tài)轉(zhuǎn)換和不同類型的數(shù)據(jù)傳輸共同構(gòu)成了USB數(shù)據(jù)通信的兩個(gè)階段,即列舉階段和應(yīng)用階段。列舉階段是指主機(jī)與設(shè)備在進(jìn)行實(shí)際數(shù)據(jù)交換之前,主機(jī)了解設(shè)備并根據(jù)設(shè)備要求進(jìn)行系統(tǒng)配置的階段。為了進(jìn)行列舉,所有設(shè)備的接口必須都支持控制傳輸、標(biāo)準(zhǔn)USB請求和端點(diǎn)0功能。
應(yīng)用階段是指主機(jī)和設(shè)備進(jìn)行實(shí)際數(shù)據(jù)交換的通信過程。經(jīng)過了列舉過程,應(yīng)用階段顯得相對簡單 。在主機(jī)一側(cè),應(yīng)用程序可以用標(biāo)準(zhǔn)的Windows API函數(shù)從指定的設(shè)備讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入設(shè)備。在設(shè)備一側(cè),主要工作是對配置過的端點(diǎn)進(jìn)行端點(diǎn)操作,同時(shí)對一些寄存器的狀態(tài)進(jìn)行實(shí)時(shí)處理。數(shù)據(jù)傳輸使用HID規(guī)定的控制、中斷兩種傳輸類型,每一種類型都有適合特殊用途的格式和協(xié)議。
6、 結(jié)束語
本文詳細(xì)介紹了基于PDIUSBD12的USB設(shè)備接口的設(shè)計(jì),從硬件設(shè)計(jì)及軟件調(diào)試兩方面討論了設(shè)備接口的設(shè)計(jì)方法。這種通用USB設(shè)備接口適用于基于USB總線的虛擬儀器,以及各種現(xiàn)場測試環(huán)境,使設(shè)備實(shí)現(xiàn)了真正意義上的即插即用,簡潔方便,可靠性高,具有廣闊的應(yīng)用前景。





