本篇博客主要講解EZ-USB一些重要寄存器的配置,首先對於本篇博客所講的內容,讀者應該到官網上去下載相關的手冊,其中包括《EZ-USB Technical Reference Manual》,《Dvk Users Guide》,《CY7C68013A中英文數據手冊》,此外還應去Cypress官網下載一個應用筆記,如下圖所示:
上面資料中《EZ-USB Technical Reference Manual》包含了需要配置的寄存器信息和一些配置信息,比較重要。《CY7C68013A中英文數據手冊》講解了CY7C68013的一些電氣特性以及一些參數信息比較重要。《Dvk Users Guide》介紹了官網提供的例程如何調試以及硬件如何被PC機識別等關鍵信息,比較重要。《AN61345》介紹了FPGA和FX2LP使用Slave FIFO模式下的配置和調試信息,比較重要。
有了上述手冊之后,我們首先打開《AN61345》里面所講的內容,這篇筆記里面介紹了使用USB CY7C68013的slave FIFO模式應該如何去配置。
上圖是典型的FX2LP和FPGA的通信示意圖,對於GPIF接口而言,是讓FX2LP芯片作為主設備,提供給外部設備所需要的驅動信號,而Slave FIFO模式是FX2LP作為從設備,負責數據的傳輸,而外部設備是主設備,負責傳感器的驅動以及數據的產生。所以我們采用的方案架構是Slave FIFO模式,讓FPGA作為主設備。
上面兩個圖是FPGA 和FX2LP芯片進行通信所需要的信號,之前筆者以及提及過了,這里不再贅述。
對於USB的傳輸方式,主要包括中斷(interrupt),塊傳輸(bulk),同步(Isochronous),控制(control),其中bulk傳輸比較重要,比較常用,所以必須要掌握。
打開 《Dvk Users Guide》后,在12頁給出了USB 主函數框架的示意圖,如上圖所示。首先上電之后,初始化各狀態變量,然后對各變量進行初始化賦值。再使能中斷。
那么對於上電復位之后,需要初始化一些寄存器,在《AN61345》中的第8頁已經給出了一些提示。
關於相關寄存器的具體說明,可以查看手冊《EZ-USB Technical Reference Manual》。所有寄存器的配置也是完成CY7C68013內部結構所需要的配置,如下圖所示。
1.8051內核工作寄存器 CPUCS(page338)
CPUCS = 0x12; //48MHZ CLKOUT ENALBE,時鍾不反向,CLKOUT PIN驅動,有時鍾輸出;
2.IFCLK引腳的相關配置 IFCONFIG(page339)
IFCONFIG =0x03; //選擇為外部時鍾,且時鍾頻率為30MHz,且為同步slaveFIFO模式,輸入IFCLK(5~48MHz)(0000_0011)。
3.FIFO深度控制及數量和方向選擇 EPXFG深度配置(page352)
選擇FIFO的數量以及FIFO的深度為512,位寬為8位;由於筆者設計的板卡中只用到了FIFO2,也就是EP2,深度為512 ,位寬為8位。其他FIFO暫時用不到。
EP2CFG = 0xE0; // disabled...
EP4CFG = 0x60; // disabled...
EP6CFG = 0x60; // disabled...
EP8CFG = 0x60; // disabled...
4.FIFO位寬設置 EPXFIFOCFG深度配置(page353)
RAW,Gray 模式的數據位輸出為8bit。
EP2FIFOCFG = 0x08; // autoin, 8 Bit Wide
5.USB終端輸出方式選擇EP1IN/OUTCFG終端配置(page350)
在設置USB的傳輸方式,選擇默認值bulk傳輸方式。
EP1OUTCFG = 0xA0; // default values
EP1INCFG = 0xA0; // default values
6.芯片版本控制 REVCTL(page348)
采用系統默認的值。
REVCTL = 0x03; //Cypress highly recommends setting both bits to 1
7.FIFO輸出狀態控制 PINFLAGAB/CD(page342)
PINFLAGSAB = 0x00;
PINFLAGSCD = 0x00;
由外部的FIFOADR[1:0]來決定使用哪一個FIFO。
8.FIFO復位 FIFORESET(page342)
//復位FIFO,先復位端點,再清空端點
延時;
FIFORESET = 0x80;// activate NAK-ALL to avoid race conditions
延時;
FIFORESET = 0x02;// reset, FIFO 2
延時;
FIFORESET = 0x04;// reset, FIFO 4
延時;
FIFORESET = 0x06;// reset, FIFO 6
延時;
FIFORESET = 0x08;// reset, FIFO 8
延時;
FIFORESET = 0x00;// deactivate NAK-AL
延時;
9.FIFO引腳極性判斷 FIFOPINPOLAR(page346)
在硬件設計中,將SLRD直接拉高處理;PKEND也直接拉高,不做包處理;
FIFOPINPOLAR = 0x04; //BIT[5:0] = {PKTEND, SLOE, SLRD, SLWR, EMPTY, FULL}
//Set SLWR High Valid; PKTEND,SLOE,SLRD EMPTY, FULL Low Active
10.引腳復用可選IO功能 PORTACFG(page382)
其中在A區的引腳復用了片選SLCS信號,所以要將其設置為1;
PORTACFG |= 0x40; //IFCOG[1:0] = 11(Slave FIFO Mode), Set PORTACFG[6] to USE PA7-SLCS
11.特殊功能寄存器 自動指針設置AUTOPTRSETUP (page332)
//Set Autopointer, enable dual autopointer
AUTOPTRSETUP |= 0x01;
12.設置自動報傳 EPXAUTOINLENH/L
//設置為Autoin時的自動傳輸包大小
EP2AUTOINLENH = 0x02; // EZ-USB automatically commits data in 512-byte chunks
// EP2AUTOINLENH = 0x04; // EZ-USB automatically commits data in 1024-byte chunks
EP2AUTOINLENL = 0x00;
筆者設計的USB部分如上圖所示,由於FPGA引腳有限,采用8bit數據總線傳輸,USB部分只做寫入功能,所以預留USB_WR引腳,同步時鍾USB_IFCLK,SLRD,PKEND直接拉高,SLCS拉低,FIFOADR[1:0] = 00,選擇FIFO中的EP2,增加USB觸發信號引腳,作為FPGA寫入使能信號,增加CMOS_VSYNC幀同步信號,作為CMOS視頻的同步信號。
















