1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

    <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
    <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
  2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
    現在位置:范文先生網>理工論文>電子通信論文>基于USB2.0總線的高速數據采集系統設計

    基于USB2.0總線的高速數據采集系統設計

    時間:2023-02-21 00:04:09 電子通信論文 我要投稿
    • 相關推薦

    基于USB2.0總線的高速數據采集系統設計

    摘要:本文主要介紹支持USB2.0高速傳輸的EZ-USB FX2單片機CY7C68013,并詳細說明用此芯片實現高速數據采集系統和相應的Windows驅動程序及底層固件程序的開發過程。

    關鍵詞:CY7C68013  USB2.0  數據采集  固件

    1    引言

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

    通用串行總線USB是1995年康柏、微軟、IBM、DEC等公司為解決傳統總線不足而推廣的一種新型的通信標準。該總線接口具有安裝方便、高帶寬、易于擴展等優點,已逐漸成為現代數據傳輸的發展趨勢。基于USB的高速數據采集卡充分利用USB總線的上述優點,有效解決了傳統高速數據采集卡的缺陷。

    2    硬件設計

    2.1支持USB2.0高速傳輸的CY7C68013

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

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

    2.1.1 端點緩沖區

    FX2包含3個64字節端點緩沖區和4K可配置成不同方式的緩沖,其中3

    個64字節的緩沖區為EP0、EP1IN和EP1OUT。EP0作為控制端點用,它是一個雙向端點,既可為IN也可為OUT。當需要控制傳輸數據時,FX2固件讀寫EP0緩沖區,但是8個

    SETUP字節數據不會出現在這64字節EP0端點緩沖區中。EP1IN和EP1OUT使用獨立的64字節緩沖區,FX2固件可配置這些端點為BULK、INTERRUPT或ISOCHRONOUS傳輸方式,這兩個端點和EP0

    一樣只能被固件訪問。這一點與大端點緩沖區EP2、EP4、EP6和EP8不同,這四個端點緩沖區主要用來和片上或片外進行高帶寬數據傳輸而無需固件的參與。EP2、EP4、EP6和EP8是高帶寬、大緩沖區。它們可被配置成不同的方式來適應帶寬的需求。

    2.1.2 接口信號

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

    IFCLK(雙向時鐘信號):IFCLK是一個參考時鐘,可以配置成輸入或輸出。當配置為輸出時,IFCLKFX2驅動為

    30MHz48MHz;當配置為輸入時,時鐘范圍為548MHz

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

    FD[15:0](雙向):這是USB主機通過FX2和外部設備進行數據傳輸的數據線,它可配置成8位或16位。當16位時,FD[7:0]代表端點FIFO

    中的第一個字節,FD[15:8]代表第二個字節。

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

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

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

     

    2.2   AD9238

    AD9238是一個雙通道的12位

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

     

    2.3   數據采集系統

    該數據采集系統整個框圖如圖3所示,該系統由以下幾部份組成:USB控制器、FIFOCPLDAD9238以及數據采集前端電路。

    圖3 數據采集系統框圖

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

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

    圖4  AD8138典型應用電路

    3   

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

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

    圖5 GPIF Designer

    在TD_Init()中主要完成GPIF相應寄存器的初始化,如下:
    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
     &

    nbsp;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狀態的檢測和數據的傳輸,主要程序部分如下:
    void TD_Poll(void)
    {
        if ( GPIFTRIG & 0x80 )                  // if GPIF interface IDLE
        

    【基于USB2.0總線的高速數據采集系統設計】相關文章:

    基于USB總線的高速數據采集系統08-06

    基于USB2.0的高速同步數據采集系統設計08-06

    基于USB2.0的同步高速數據采集器的設計08-06

    基于USB總線的實時數據采集系統設計與實現08-06

    焊縫檢測系統中PCI總線高速數據采集卡的設計08-06

    USB2.0接口和DSP構成的高速數據采集系統08-06

    基于USB接口的數據采集系統設計08-06

    具有USB2.0接口的高速數據采集卡設計08-06

    基于Verilog HDL設計的自動數據采集系統04-12

    国产福利萌白酱精品tv一区_日韩亚洲中字无码一区二区三区_亚洲欧洲高清无码在线_全黄无码免费一级毛片
    1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

      <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
      <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
    2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
      亚洲无线国产观看原创 | 日韩国产二三区精品视频 | 在线日本妇人成熟免费a√ 亚洲乱码精品不卡 | 亚洲国产午夜福利在线视频 | 亚洲美女国产精品久久久久 | 最新69国产精品视频免费 |