當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]摘要:本文主要介紹支持USB2.0高速傳輸?shù)腅Z-USB FX2單片機CY7C68013,并詳細(xì)說明用此芯片實現(xiàn)高速數(shù)據(jù)采集系統(tǒng)和相應(yīng)的Windows驅(qū)動程序及底層固件程序的開發(fā)過程。

作者Email: cai_yang@etang.com

摘要:本文主要介紹支持USB2.0高速傳輸?shù)腅Z-USB FX2單片機CY7C68013,并詳細(xì)說明用此芯片實現(xiàn)高速數(shù)據(jù)采集系統(tǒng)和相應(yīng)的Windows驅(qū)動程序及底層固件程序的開發(fā)過程。

關(guān)鍵詞:CY7C68013  USB2.0  數(shù)據(jù)采集  固件

1    引言

現(xiàn)代工業(yè)生產(chǎn)和科學(xué)研究對數(shù)據(jù)采集的要求日益提高,在瞬態(tài)信號測量、圖像處理等一些高速、高精度的測量中,需要進行高速數(shù)據(jù)采集。現(xiàn)在通用的高速數(shù)據(jù)采集卡一般多是PCI卡或ISA卡,存在以下缺點:安裝麻煩、價格昂貴;受計算機插槽數(shù)量、地址、中斷資源限制,可擴展性差;在一些電磁干擾性強的測試現(xiàn)場,無法專門對其做電磁屏蔽,導(dǎo)致采集的數(shù)據(jù)失真。

通用串行總線USB是1995年康柏、微軟、IBM、DEC等公司為解決傳統(tǒng)總線不足而推廣的一種新型的通信標(biāo)準(zhǔn)。該總線接口具有安裝方便、高帶寬、易于擴展等優(yōu)點,已逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢?;赨SB的高速數(shù)據(jù)采集卡充分利用USB總線的上述優(yōu)點,有效解決了傳統(tǒng)高速數(shù)據(jù)采集卡的缺陷。

2    硬件設(shè)計

2.1支持USB2.0高速傳輸?shù)腃Y7C68013

Cypress Semiconductor公司的EZ-USB FX2是世界上第一款集成USB2.0的微處理器,它集成了USB2.0收發(fā)器、SIE(串行接口引擎)、增強的8051微控制器和可編程的外圍接口。FX2這種獨創(chuàng)性結(jié)構(gòu)可使數(shù)據(jù)傳輸率達到56Mbytes/s,即USB2.0允許的最大帶寬。在FX2中,智能SIE可以硬件處理許多USB1.1和USB2.0協(xié)議,從而減少了開發(fā)時間和確保了USB的兼容性。GPIF(General Programmable Interface)和主/從端點FIFO(8位或16位數(shù)據(jù)總線)為ATA、UTOPIA、EPP、PCMCIA和DSP等提供了簡單和無縫連接接口。

CY7C68013的GPIF引擎具有自動傳輸數(shù)據(jù)結(jié)構(gòu)的特性,這種特性使得外圍設(shè)備和主機通過CY7C68013可以無縫的、高速的傳輸數(shù)據(jù)。為了實現(xiàn)高速的數(shù)據(jù)傳輸,CY7C68013CPU不會直接參與數(shù)據(jù)的傳輸,而是直接利用GPIF的自動傳輸數(shù)據(jù)模式。圖1和圖2說明了主機IN和OUT數(shù)據(jù)傳輸過程。

2.1.1 端點緩沖區(qū)

FX2包含364字節(jié)端點緩沖區(qū)和4K可配置成不同方式的緩沖,其中364字節(jié)的緩沖區(qū)為EP0EP1INEP1OUTEP0作為控制端點用,它是一個雙向端點,既可為IN也可為OUT。當(dāng)需要控制傳輸數(shù)據(jù)時,FX2固件讀寫EP0緩沖區(qū),但是8SETUP字節(jié)數(shù)據(jù)不會出現(xiàn)在這64字節(jié)EP0端點緩沖區(qū)中。EP1INEP1OUT使用獨立的64字節(jié)緩沖區(qū),FX2固件可配置這些端點為BULKINTERRUPTISOCHRONOUS傳輸方式,這兩個端點和EP0一樣只能被固件訪問。這一點與大端點緩沖區(qū)EP2、EP4、EP6EP8不同,這四個端點緩沖區(qū)主要用來和片上或片外進行高帶寬數(shù)據(jù)傳輸而無需固件的參與。EP2EP4、EP6EP8是高帶寬、大緩沖區(qū)。它們可被配置成不同的方式來適應(yīng)帶寬的需求。

2.1.2 接口信號

在利用GPIF進行高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計時,GPIF waveforms的編輯是非常重要的,它控制著整個數(shù)據(jù)傳輸過程的讀寫時序。此時CPU的作用已經(jīng)非常小了,它只起著下載代碼到內(nèi)部RAM以及在固件中如何觸發(fā)GPIF waveforms的作用。FX2專門為GPIF提供了外圍接口信號,如8位或16位的數(shù)據(jù)線、控制信號、Ready信號以及地址線。

IFCLK(雙向時鐘信號):IFCLK是一個參考時鐘,可以配置成輸入或輸出。當(dāng)配置為輸出時,IFCLKFX2驅(qū)動為30MHz48MHz;當(dāng)配置為輸入時,時鐘范圍為548MHz

GPIFADR[8:0](輸出):GPIF使用GPIFADR信號為外部設(shè)備提供地址線,在總線上地址值是自增的。

FD[15:0](雙向):這是USB主機通過FX2和外部設(shè)備進行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)線,它可配置成8位或16位。當(dāng)16位時,FD[7:0]代表端點FIFO中的第一個字節(jié),FD[15:8]代表第二個字節(jié)。

CTL[5:0](輸出):FX2為外部設(shè)備提供了幾個控制信號,如讀寫選通、使能等。

RDY[5:0](輸入):FX2提供了幾個狀態(tài)檢測信號,它可以檢測外部設(shè)備的狀態(tài),如FIFO的空、滿、半滿等。

GSTATE[2:0](輸出):這是調(diào)試信號,表示GPIF波形執(zhí)行的狀態(tài),通常連接到邏輯分析儀上。

 

2.2   AD9238

AD9238是一個雙通道的12位A/D轉(zhuǎn)換器,采用單3V供電,速度可以是20MSPS、40MSPS和65MSPS;低功耗,工作在20MSPS時,功耗為180mW,40MSPS時,功耗為330mW,65MSPS時,功耗為600mW;具有500MHz 3dB帶寬的差分輸入;片上參考源及SHA;靈活的模擬輸入范圍:1Vp-p~2Vp-p;適用于:超聲波設(shè)備,射頻通訊,電池電源儀器,低價示波器等。本系統(tǒng)采用20MSPS的AD9238,可充分發(fā)揮USB在高速傳輸模式下的數(shù)據(jù)傳輸優(yōu)勢。

 

2.3   數(shù)據(jù)采集系統(tǒng)

該數(shù)據(jù)采集系統(tǒng)整個框圖如圖3所示,該系統(tǒng)由以下幾部份組成:USB控制器、FIFO、CPLDAD9238以及數(shù)據(jù)采集前端電路。

圖3 數(shù)據(jù)采集系統(tǒng)框圖

CPLD主要是控制時序,時鐘分頻等。FIFO主要是起著高速數(shù)據(jù)緩沖作用,當(dāng)FIFO半滿時,數(shù)據(jù)開始向USB主機發(fā)送。我們采用的是同步FIFO,時鐘信號接IFCLK,當(dāng)FIFO的/RD信號和/OE信號有效時,每個IFCLK上升沿就輸出一個數(shù)據(jù);當(dāng)FIFO的/WR信號有效時,IFCLK上升沿就讀進一個數(shù)據(jù)。AD9238的20MHz時鐘信號是通過CPLD分頻所得。當(dāng)程序使能AD9238的/OEB_A和/OEB_B信號時,AD9238雙通道開始進行數(shù)據(jù)采集并向FIFO寫數(shù)據(jù)。

系統(tǒng)前端的調(diào)理電路采用的是AD公司的AD8138,該放大器具有較寬的模擬帶寬(320MHz,-3dB,增益1),而且可以實現(xiàn)將單端輸入變成差分輸出的功能。此項功能在現(xiàn)代高速模數(shù)變換電路中非常有用,因為幾乎所有的高速A/D芯片都要求模擬信號為差分輸入,雖然部分芯片的手冊中提到對于單端輸入信號也可使用,但這樣一來會使A/D轉(zhuǎn)換結(jié)果的二次諧波增大,降低信噪比(SNR)。AD8138很好的解決了這個問題,用戶可以很容易的將單端信號轉(zhuǎn)換成差分輸出而不必使用變壓器,并且它的輸入阻抗高達6MΩ,可以直接與輸入信號相連而省略隔離放大器,大大精簡了電路結(jié)構(gòu)。圖4為AD8138的典型應(yīng)用電路。

圖4  AD8138典型應(yīng)用電路

3    軟件設(shè)計
3.1 Windows驅(qū)動程序設(shè)計
USB設(shè)備驅(qū)動程序基于WDM。WDM型驅(qū)動程序是內(nèi)核程序,與標(biāo)準(zhǔn)的Win32用戶態(tài)程序不同。采用了分層處理的方法。通過它,用戶不需要直接與硬件打它道(在USB驅(qū)動程序中尤為明顯),只需通過下層驅(qū)動程序提供的接口號訪問硬件。因此,USB設(shè)備驅(qū)動程序不必具體對硬件編程,所有的USB命令、讀寫操作通過總線驅(qū)動程序轉(zhuǎn)給USB設(shè)備。但是,USB設(shè)備驅(qū)動程序必須定義與外部設(shè)備的通訊接口和通訊的數(shù)據(jù)格式,也必須定義與應(yīng)用程序的接口。
Cypress公司提供了完整的CY7C68013驅(qū)動程序源碼、控制面板程序及固件的框架,這大大提高了用戶開發(fā)的進度。用戶只需稍加修改或不需任何修改即可使用所帶驅(qū)動程序,軟件開發(fā)者大量的時間主要集中在應(yīng)用程序和固件的開發(fā)。本文所述的數(shù)據(jù)采集系統(tǒng)驅(qū)動程序就在原來的基礎(chǔ)上進行了簡單的修改來滿足我們的需要。根據(jù)我們自己的需求,一般只需修改DeviceIoControl例程,如我們主要增加了控制數(shù)據(jù)傳輸函數(shù)、啟動和停止AD、復(fù)位FIFO等,即IOCTL_START_AD、IOCTL_STOP_AD、IOCTL_RESET_FIFO。

3.2 底層固件設(shè)計
要實現(xiàn)USB2.0的高帶寬數(shù)據(jù)傳輸,必須使用它特有的GPIF特性,在開發(fā)固件前,首先必須根據(jù)實際需要對GPIF waveform進行編輯。CY7C68013開發(fā)工具中帶有一個GPIF Designer,如圖5所示,編輯完waveform后,選擇Tools->Export to GPIF.c File來輸出GPIF.c文件,然后將該文件加入keil c工程進行編譯。
由于CY7C68013的EP2、EP4、EP6、EP8四個端點共享4K FIFO緩沖區(qū),所以在該系統(tǒng)中,我們將EP2配置成4K的緩沖區(qū),并設(shè)置為IN。用EP1OUT作為AD的控制參數(shù)傳遞,如啟動和停止AD數(shù)據(jù)輸出、復(fù)位FIFO等。在固件程序中,最重要的就是TD_Init()和TD_Poll()兩個函數(shù)。

圖5 GPIF Designer

在TD_Init()中主要完成GPIF相應(yīng)寄存器的初始化,如下:
void TD_Init(void)             // Called once at startup
{
// set the CPU clock to 48MHz
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
  SYNCDELAY; 

  EP2CFG = 0XE8;     // EP2IN, bulk, size 1024, 4x buffered
  SYNCDELAY;                         
  EP4CFG = 0x00;     // EP4 not valid
  SYNCDELAY;              
  EP6CFG = 0x00;     // EP6 not valid     
  SYNCDELAY;
  EP8CFG = 0x00;     // EP8 not valid
  SYNCDELAY;
  
  
  FIFORESET = 0x80;  // set NAKALL bit to NAK all transfers from host
  SYNCDELAY;
  FIFORESET = 0x02;  // reset EP2 FIFO
  SYNCDELAY;
  FIFORESET = 0x00;  // clear NAKALL bit to resume normal operation
  SYNCDELAY;

  EP2FIFOCFG = 0x01; // allow core to see zero to one transition of auto out bit
  SYNCDELAY;
  EP2FIFOCFG = 0x11; // auto out mode, disable PKTEND zero length send, word ops
  SYNCDELAY;
  EP6FIFOCFG = 0x09; // auto in mode, disable PKTEND zero length send, word ops
  SYNCDELAY; 
  
  GpifInit (); // initialize GPIF registers
  
  SYNCDELAY;
  EP2GPIFFLGSEL = 0x02; // For EP2IN, GPIF uses FF flag
  SYNCDELAY;
  
  // global flowstate register initializations

FLOWLOGIC = FlowStates[19];      // 0011 0110b - LFUNC[1:0] = 00 (A AND B), //TERMA/B[2:0]=110 (FIFO Flag)
  SYNCDELAY;
  FLOWSTB = FlowStates[23];        // 0000 0100b - MSTB[2:0] = 100 (CTL4), not //used as strobe
  SYNCDELAY;
  GPIFHOLDAMOUNT = FlowStates[26]; // hold data for one half clock (10ns) assuming //48MHz IFCLK
  SYNCDELAY;
  FLOWSTBEDGE = FlowStates[24];    // move data on both edges of clock
  SYNCDELAY;
  FLOWSTBHPERIOD = FlowStates[25]; // 20.83ns half period
  SYNCDELAY;  

  // reset the external FIFO
  OEA |= 0x07;     // turn on PA0、 PA1、 PA2 as output pin
  IOA |= 0x07;     // pull PA0、 PA1、 PA2 high initially
  IOA &= 0xFB;     // bring PA2 low
  EZUSB_Delay (1); // keep PA2 low for ~1ms, more than enough time
  IOA |= 0x04;     // bring PA2 high and exit reset
IOA &= 0xFC;     // bring PA0、 PA1 low and enable AD
  
}
在TD_Poll()中主要完成外部FIFO狀態(tài)的檢測和數(shù)據(jù)的傳輸,主要程序部分如下:
void TD_Poll(void)
{
    if ( GPIFTRIG & 0x80 )                  // if GPIF interface IDLE
    { 
      if ( EXTFIFONOTEMPTY )                // if external FIFO is not empty
      {
        if ( !( EP24FIFOFLGS & 0x01 ) )     // if EP2 FIFO is not full
        {      
          if(enum_high_speed)
          {
            SYNCDELAY;    
            GPIFTCB1 = 0x02;                // setup transaction count (1024 //bytes/2 for word wide -> 0x0100)
            SYNCDELAY;
            GPIFTCB0 = 0x00;
            SYNCDELAY;
          }
          else
          {
            SYNCDELAY;
            GPIFTCB1 = 0x00;                // setup transaction count (64 bytes/2 
// for word wide -> 0x20)
            SYNCDELAY;
            GPIFTCB0 = 0x20;
            SYNCDELAY;
          }
  
          Setup_FLOWSTATE_Read();           // setup FLOWSTATE registers for 
// FIFO Read operation
          SYNCDELAY;
          GPIFTRIG = GPIFTRIGRD | GPIF_EP2; // launch GPIF FIFO READ 
//Transaction to EP2 FIFO
          SYNCDELAY;

          while( !( GPIFTRIG & 0x80 ) )     // poll GPIFTRIG.7 GPIF Done bit
          {
            ;
          }
    
          SYNCDELAY;
        }
      }
    }
}

4    結(jié)束語
筆者通過對該高速數(shù)據(jù)采集系統(tǒng)軟硬件的設(shè)計,實現(xiàn)了雙通道AD采集,采集速度可以達到20MSPS,但在此基礎(chǔ)上還可以提高AD采集速度。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉