2024年2月28日发(作者:不语柳)
USB CPLD开发板同步传输
目录
第一章FX2特性介绍……………………………………………………………….3
1.1介绍………………………………………………………………………..3
1.2结构………………………………………………………………………..3
1.3特征………………………………………………………………………..4
第二章Slave FIFO传输…………………………………………………………….5
2.1概述………………………………………………………………………..5
2.2硬件连接…………………………………………………………………..5
2.3 Slave FIFO的几种传输方式…………………………………………….6
2.3.1 同步Slave FIFO写…………………………………………….6
2.3.2 同步Slave FIFO读…………………………………………….9
2.3.3异步Slave FIFO写…………………………………………….11
2.3.4异步Slave FIFO读…………………………………………….12
第三章 寄存器设置…………………………………………………………..…….15
3.1 IFCONFIG………………………………………………………….……15
3.2 PINFLAGSAB/CD………………………………………………….…...16
3.3 FIFORESET……………………………………………………….…….17
3.4 FIFOPINPOLAR………………………………………………….…….18
3.5 EPxCFG………………………………………………………….………18
3.6 EPxFIFOCFG……………………………………………………….…..19
3.7 EPxAUTOINLENH/L…………………………………………………..20
3.8 EPxFIFOPFH/L………………………………………………………....21
3.9 INPKTEND……………………………………………………………...22
3.10 OUTPKTEND………………………………………………………….22
3.11 EPxFIFOIE和EPxFIFOIRQ………………………………………...22
3.12PORTACFG………………………………………………………….....23
3.13 EPxFIFOBCH EPxFIFOBCL………………………………………...23
3.14 EP2468FIFOFLAG……………………………………………………24
1
3.15其它通用寄存器………………………………………………………..25
第四章 同步slave fifo测试操作指南……………………………………….…….26
4.1安装软件包……………………………………………………………....26
4.2同步写FIFO测试……………………………………………………….26
4.3同步读FIFO测试……………………………………………………….30
4.4同步读写FIFO测试…………………………………………………….31
第五章 艾曼FPGA工作室开发板USB2CPLD软件设计…………………….….…….33
5.1 68013固件程序设计…………………………………………………….33
5.2 FPGA源代码设计………………………………………………………35
第六章 USB2FPGA硬件原理图…………………………………………..……...37
第七章 改板后注意的问题……………………………………………….……..…37
2
一.FX2特性介绍
1.1介绍
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等提供了简单和无缝连接接口。
1.2结构
CY7C68013结构图如图1所示。它有三种封装形式:56SSOP,100TQFP和128TQFP。
1.3特征:
★ 内嵌480MBit/s的收发器,锁相环PLL,串行接口引擎SIE——集成了整个USB 2.0
3
协议的物理层。
★ 为适应USB 2.0的480MBit/s的速率,FIFO端点可配置成2,3,4个缓冲区。
★ 内嵌可工作在48MHz的增强型8051,它具有以下特征:
- 具有256Byte的寄存器空间,两个串口,三个定时器,两个数据指针。
- 四个机器周期(工作在48MHz下时为83.3ns)即组成一个指令周期。
- 特殊功能寄存器(包括I/O口控制寄存器)可高速访问。
- 应用USB向量中断,具有极短的ISR响应时间。
- 只用作USB事务管理,控制,不参与数据传输,较好地解决了USB高速模式的带宽问题。
★ “软配置”——USB固件可由USB总线下载,片上不需集成ROM。
★ 拥有四个FIFO接口,可工作在内部或外部时钟下。端点和FIFO接口的应用使外部逻辑和USB总线可高速连接。
★ 内嵌通用可编程接口GPIF,它是一个状态机,可充当主控制器,提供外部逻辑和USB总线的“无胶粘贴”。
★ 一种单片USB 2.0外设解决方案,不需要外部的协议物理层,FX2把所有的功能集成在一个芯片上。
4
二、Slave FIFO传输
2.1概述
当有一个与FX2芯片相连的外部逻辑只需要利用FX2做为一个USB 2.0接口而实现与主机的高速通讯,而它本身又能够提供满足Slave FIFO要求的传输时序,可以做为Slave
FIFO主控制器时,即可考虑用此传输方式。
Slave FIFO传输的示意图如下:
主机
收发器和SIE
FIFO端点缓冲区
SlaveFIFO从控制器
8051固件
外部逻
辑
在这种方式下,FX2内嵌的8051固件的功能只是配置Slave FIFO相关的寄存器以及控制FX2何时工作在Slave FIFO模式下。一旦8051固件将相关的寄存器配置完毕,且使自身工作在Slave FIFO模式下后,外部逻辑(如FPGA)即可按照Slave FIFO的传输时序,高速与主机进行通讯,而在通讯过程中不需要8051固件的参与。
2.2硬件连接(标准)
在Slave FIFO方式下,外部逻辑与FX2的连接信号图如下:
5
IFCLK:FX2输出的时钟,可做为通讯的同步时钟;
FLAGA,FLAGB,FLAGC,FLAGD:FX2输出的FIFO状态信息,如满,空等;
SLCS:FIFO的片选信号,外部逻辑控制,当SLCS输出高时,不可进行数据传输;
SLOE:FIFO输出使能,外部逻辑控制,当SLOE无效时,数据线不输出有效数据;
SLRD:FIFO读信号,外部逻辑控制,同步读时,FIFO指针在SLRD有效时的每个IFCLK的上升沿递增,异步读时,FIFO读指针在SLRD的每个有效—无效的跳变沿时递增;
SLWR:FIFO写信号,外部逻辑控制,同步写时,在SLWR有效时的每个IFCLK的上升沿时数据被写入,FIFO指针递增,异步写时,在SLWR的每个有效—无效的跳变沿时数据被写入,FIFO写指针递增;
PKTEND:包结束信号,外部逻辑控制,在正常情况下,外部逻辑向FX2的FIFO中写数,当写入FIFO端点的字节数等于FX2固件设定的包大小时,数据将自动被打成一包进行传输,但有时外部逻辑可能需要传输一个字节数小于FX2固件设定的包大小的包,这时,它只需在写入一定数目的字节后,声明此信号,此时FX2硬件不管外部逻辑写入了多少字节,都自动将之打成一包进行传输;
FD[15:0]:数据线;
FIFOADR[1:0]:选择四个FIFO端点的地址线,外部逻辑控制。
2.3 Slave FIFO的几种传输方式
6
2.3.1 同步Slave FIFO写
同步Slave FIFO写的标准连接图如下:
同步Slave FIFO写的标准时序如下:
IDLE:当写事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向IN FIFO,进状态2;
状态2:如FIFO满,在本状态等待,否则进状态3;
状态3:驱动数据到数据线上,使SLWR有效,持续一个IFCLK周期,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLWR,PKTEND均假定低有效):
7
图示FIFO中本来没有数据,外部逻辑写入第一个数据时的情况。
图示假定FX2设定包大小为512字节,外部逻辑向FIFO端点中写入的数据达512字节时的情况。此时FX2硬件自动将已写入的512字节打成一包准备进行传输,这个动作就和在普通传输中,FX2固件向FIFO端点中写入512字节后,把512这个数写入EPxBC中一样,只不过这个过程是由硬件自动完成的。在这里可以看出“FX2固件不参与数据传输过程”的含义了。外部逻辑只须按上面的时序图所示的时序向FIFO端点中一个一个字节(或字)地写数,写到一定数量,FX2硬件自动将数据打包传输,这一切均不需固件的参与,由此实
8
现高速数据传输。
图示的是FIFO端点被写满时的情况。
2.3.2 同步Slave FIFO读:
同步Slave FIFO读的标准连接图如下:
同步Slave FIFO读的标准时序如下:
IDLE:当读事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2;
状态2:使SLOE有效,如FIFO空,在本状态等待,否则进状态3;
9
状态3:从数据线上读数,使SLRD有效,持续一个IFCLK周期,以递增FIFO读指针,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE均假定低有效):
图示正常情况时的时序。
10
图示FIFO被读空时的情况。
2.3.3 异步Slave FIFO写:
异步Slave FIFO写的标准连接图如下:
异步Slave FIFO写的标准时序如下:
IDLE:当写事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向IN FIFO,进状态2;
状态2:如FIFO满,在本状态等待,否则进状态3;
状态3:驱动数据到数据线上,使SLWR有效,再无效,以使FIFO写指针递增,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
11
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLWR,PKTEND均假定低有效):
图示FIFO中本来没有数据,外部逻辑写入第一个数据时的情况。
2.3.4 异步Slave FIFO读:
异步Slave FIFO读的标准连接图如下:
12
异步Slave FIFO读的标准时序如下:
IDLE:当读事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2;
状态2:如FIFO空,在本状态等待,否则进状态3;
状态3:使SLOE有效,使SLRD有效,从数据线上读数,再使SLRD无效,,以递增FIFO读指针,再使SLOE无效,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE均假定低有效):
13
图示正常情况时的时序。
14
三、寄存器设置
slave fifo模式下常用寄存器
IFCONFIG
PINFLAGAB
PINFLAGCK
FIFORESET
FIFOPINPOLAR
EPxCFG
EPxFIFOCFG
EPxAUTOINLENH:L
EPxFIFOPFH/L
PORTACFG
INPKTEND
EPxFLAGIE
EPxFLAGIRQ
EPxFIFOBCH:L
EPxFLAGS
EPxBUF
3.1 IFCONFIG(E601):接口配置寄存器
IFCLKSRC:FIFO时钟内部/外部时钟源选择,0外部时钟源,1内部时钟源。
3048MHZ:如选择内部时钟,30MHz/48MHz频率选择,0 IFCLK时钟30M,1 IFCLK时钟48M。
IFCLKOE:IFCLK时钟输出使能,0关闭,1打开。
IFCLKPOL:IFCLK输出反转使能,0不反转,1反转。
ASYNC:Slave FIFO同步/异步工作方式选择,0同步,1异步。
GSTATE:选择是否将GSTATE[2:0]在PORTE[2:0]输出,0关闭,1使能。
IFCFG1:0:FX2 I/O端口模式选择,也既是上面所说的FX2与外部逻辑传输方式的选择。00:I/O方式;01:reserved;10:Slave FIFO方式;11:GPIF方式。
15
3.2 PINFLAGSAB/CD(E602:E603):FLAGx引脚配置寄存器
FLAGA,FLAGB,FLAGC,FLAGD反映FIFO状态选择。每个脚有编址/固定两种模式:如设为编址模式,则它们都反映FIFOADR[1:0]脚当前所指端点的状态,其中,FLAGA反映“可编程极限”,FLAGB反映“满”标志,FLAGC反映“空”标志,FLAGD不存在;如设为固定模式,它们均可任意设置成反映任意端点的任意标志,而不受限于FIFOADR[1:0]脚当前所指端点的状态。
Slave fifo模式中,用引脚FLAGA~FLAGD来定义用端点FIFO的状态,并可灵活编程来实现FLAGx设置,见表3.2
16
说明:
1. PF表示FIFO编程状态,EF表示FIFO已空,FF表示FIFO已满
2. 0000为索引模式,其它为固定模式
3.3 FIFORESET(E604):端点缓冲区复位寄存器
将FIFO复位到初始状态。具体过程是,写0x80到此寄存器,NAK所有主机请求;写
17
0x02,0x04,0x06,0x08分别复位各个端点;写0x00,结束复位过程。
一般,在每一次开始进行slave FIFO或GPIF传输之前,先复位端点,再清空端点,然后即可进行数据传输。。
NAKALL-0关闭NAK功能,1用NAK响应主控器请求,例如在复位端点FIFO时,为了保证复位正常,防止主控器请求的干扰,先写入0x80,然后复位端点,最后写入0x00,使能请求响应。
EP3~EP0,1复位对应的端点缓冲区,其中EP3~EP0分别对应端点EP8,EP6,EP4,EP2。
3.4 FIFOPINPOLAR(E609):控制引脚极性设置寄存器
Slave FIFO引脚极性设置:0低有效,1高有效。
提示:PF极性没有提供寄存器设置,为高有效。
3.5 EPxCFG(E610:E615):端点2,4,6,8配置
18
VALID-0端点无效,1端点有效
DIR-端点方向,0=OUT方向,1=IN方向,默认端点2,4为IN,端点6,8为OUT
TYPE1,TYPE0-端点类型,见表3.4
SIZE-缓冲区大小(仅端点2和端点),0=512字节,1=1024字节
BUF1,BUF0-端点缓冲区个数(仅端点2和端点6),见表3.5
19
3. 6 EPxFIFOCFG(E618:E61B):端点FIFO配置寄存器
INFM1:FIFO状态标志是否提前一个字节有效选择,IN端点满减1,1使能,0非使能。
OEP1:FIFO状态标志是否提前一个字节有效选择,OUT端点空加1,1使能,0非使能。
AUTOOUT:在前面,我们说Slave FIFO方式下的数据传输过程不需要FX2固件的参与,实际上是不确切的,应该说,FX2固件可以不参与数据传输过程,也可以参与。AUTOOUT即可设置。如果设置AUTOOUT为1,则就如上面所说的,FX2固件只需要完成初始化工作,真正的数据传输是不需要FX2固件的参与的,具体的说,当FX2从主机收到一包数据时,外部逻辑即可看到FIFO端点缓冲区状态的改变,然后从中取数。如果设置AUTOOUT为0,则数据传输过程就需要FX2参与了,此时当FX2从主机收到一包数据时,FIFO端点缓冲区状态的改变并不会立刻在端口显现,而是固件先看到FIFO端点状态的改变,此时,FX2固件可以做三件事情:
a.向OUTPKTEND中的SKIP位写0,使FIFO端点状态的改变在端口显现,从而使外部逻辑可以从FIFO端点中读取数据;
b.向OUTPKTEND中的SKIP位写1,丢掉这包数据,这样就相当于主机从来就没有发送这一包数据,外部逻辑当然也不能从FIFO端点中读到这一包数据了;
c.从新编辑这一包数据,设置完全重写整个包的数据,再写EPxBC寄存器,把数据传给外部逻辑。
在FX2复位之后,如果其OUT端点缓冲区内有一包数据未处理,这包数据并不会自动传给外部逻辑。所以,为保证OUT端点缓冲区内没有未处理数据,在reset FX2后,要清空一下OUT端点缓冲区,具体做法就是向SKIP位写1(OUT端点缓冲区有几个缓冲区就写几次)。
AUTOIN:Auto IN和Auto OUT有一点不同,在Auto OUT里,包的大小只能是512
20
或1024,而在Auto IN里,包的大小可以任意设定,甚至可以是0字节,这可以通过EPxAUTOINLENTH/L设置。
和AUTOOUT类似,当设置AUTOIN = 0时,FX2固件可以传输,丢弃,修改外部逻辑传过来的数据,这通过向INPTKEND寄存器的SKIP写不同的值实现。
ZEROLENIN:是否允许传输0字节,1使能,0非使能。
WORDWIDE:8 Bit,16 Bit选择。当选择8 Bit模式时,Port B将是FD[7:0];当选择16 Bit模式时,Port D将是FD[15:8],1则为16位,0则为8位。
3.7 EPxAUTOINLENH/L(E620:E627):端点2,4,6,8AUTOIN长度设置(仅IN端点有效)
设置AUTOIN时自动传输的包大小(注意,不能大于IN端点的缓冲区的大小)。
说明:PL10仅端点2和6有效
3.8 EPxFIFOPFH/L(E630:E637):FIFO可编程PF状态长度设置
21
DECIS-0小于等于门限值PF有效,1大于等于门限值PF有效
PKSTAT-
1. OUT端点FIFO:门限值为PFC12:0设置,当FIFO长度小于等于门限值(DECIS=0),或者FIFO长度大于等于门限值(DECIS=1),则PF有效。
2.
3.
IN端点FIFO,且PKTSTAT=1:门限值为PFC9:0
IN端点FIFO,且PKTSTAT=0:门限值由两部分组成:PKTS2:0(数据包)再加上PFC9:0(当前数据长度)。
解释:
对于OUT包,极限存储在PFC[12:0]中,在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。
对于IN包,当PKTSTAT=1时,极限存储在两部分:PKTS[2:0]存储极限包数(已
22
经交给SIE但未传给主机的包数),PFC[9:0]存储极限字节数(正在编辑的包里的字节数)。在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。
3.9 INPKTEND(E648):结束IN传输
SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个IN缓冲区,1表示将跳过一个IN缓冲区
EP3,EP2,EP1,EP0-代替PKTEND引脚功能,软件强行结束IN端点8,6,4,2 IN数据传输,传输短包。
3.10 OUTPKTEND(E649):强行结束OUT传输寄存器
SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个OUT缓冲区,1表示将跳过一个OUT缓冲区
EP3,EP2,EP1,EP0-代替EPxBLH.7=1引脚功能,软件强行结束OUT端点8,6,4,2数据传输。
3.11 EPxFIFOIE和EPxFIFOIRQ(E652:E657):端点FIFO中断(INT4)使能和请求
EDGPF-PF中断触发沿,0上升沿触发,1下降沿触发
23
PF-1使能端点FIFO PF中断,0非使能
EF-1使能端点FIFO EF中断,0非使能
FF-1使能端点FIFO FF中断,0非使能
PF-0无PF中断,1有PF中断
EF-0无EF中断,1有EF中断
PF-0无FF中断,1有FF中断
3.12PORTACFG:端口A配置
置1使能端口A复用引脚,虽然SLCS出现在PORTACFG.6的位置上,当IFCFG1:0=11时,PORTA.7复用为SLCS,FLAGD也出现在PORTA.7引脚上,当PORTACFG.7置位时,PORTA.7复用为FLAGD输出,当PORTACFG.6和PORTACFG.7均为1,则PORTA.7复用为FLAGD。所以PORTACFG7:6=01时,PORTA.7复用为SLCS。
3.13 EPxFIFOBCH EPxFIFOBCL(E6AB:E6B2):端点FIFO计数
24
当前端点缓冲区中已有的数据数目。
说明:
端点2最大缓冲区计数BC[12:0],为4096字节。
端点6最大缓冲区计数BC[11:0],为2048字节。
端点4和8最大缓冲区计数BC[10:0],为1024字节。
3.14 EP2468FIFOFLAG(SFR AB:SFR AC)和EPxFIFOFLGS(E6A7:E6AA):端点FIFO状态标志寄存器
3.15其它通用寄存器
CPUCS(E600):
PORTCSTB:128脚或100脚的RD,WR输出使能。
CLKSPD1,CLKSPD0:CPU频率选择,00:12MHz(默认);01:24MHz;10:48MHz;11:Reserved。
CLKINV:CLKOUT反转选择。
CLKOE:CLKOUT输出使能。
REVCTL(E608):
正常情况下,简单地设置DYN_OUT和ENH_PKT位为1即可。
25
四、同步slave fifo测试操作指南
4.1安装软件包
第一次使用时,首先要安装CYPRESS开发包,安装完毕后,在目录“windowssystem32drivers”中有一个文件,用驱动程序目录下的将其
26
代替,两个驱动程序文件的区别是,后者将缓冲区的大小扩展为6M字节,详见驱动代码。
图4.1
4.2同步写FIFO测试
插上开发板后,系统默认采用USB接口供电,PC上安装好下载线,并将下载线与开发板FPGA/CPLD的AS下载口或者JTAG下载连接好,下载采用AS方式,将FPGA程序下载到配置芯片中,打开ALTERA的编译软件Quartus 5.0,将“相应目录/写FIFO”下的wr_项目文件打开,界面见图4.2,点击“change file”,在弹出界面中选择下载文件,将wr_下载到FPGA中。(也可以选择JTAG方式下载到FPGA中,当然这时也可以选择的文件类型有.sof文件格式)
27
图4.2
接着打开CYPRESS EZUSB控制面板,见图4.3,将“相应目录/固件源代码/fw”目录下的固件程序,通过USB接口下载到FX2中,下载成功后,提示slave fifo设备安装成功。
28
图4.3
下载完FPGA程序与固件程序后,就可以通过应用程序进行USB传输测试,同步写FIFO测试中,FPGA程序内部生成一个16位递增计数器,写入FX2 FIFO中,并通过FX2发送给PC,如果FX2内部FIFO满,则计数器停止计数,非满则计数并写入FX2的FIFO中。
应用程序位于“相应目录/SYN同步方式/写FIFO/Apptest/Release”目录下.,打开应用程序界面如图4.4,打开应用程序后,首先在下面文本显示框中,出现“打开设备成功”的提示,接下来点击界面上启动读线程,在文本框中开始显示测试结果(包括测试速度,传输字节与花费时间),并在上面显示通过的包数与出现的错误情况。点击“读测试”可以在当前目录下保存读到到的测试数据,并且可以在Ultraedit编辑软件下打开.bin数据文件,查看16位计数器计数数据是否完整,从而测试数据传输中是否有数据丢失,如图4.5。
29
图4.4
30
图4.5
根据主机主板不同,测试速度也不一样,一般数据传输可以在40MB/S左右。
注意:
1、 USB测试在USB2.0主板上进行。
2、 如果主机USB口通过PCI卡扩展出来的,将影响测试速度。
五、开发板USB2FPGA软件设计
5.1 68013固件程序设计
void TD_Init( void )部分代码注释
//时钟设置
//CPUCS = 0x02; //12MHZ CLKOUT ENALBE
//CPUCS = 0x0a; //24MHZ CLKOUT ENALBE
CPUCS = 0x12; //48MHZ CLKOUT ENALBE
IFCONFIG =0x43;//使用外部时钟,IFCLK输入不反向
31
SYNCDELAY;
EP2CFG=0xA0; //需要设定为四缓冲,每个缓冲区大小为512字节
SYNCDELAY;
EP4CFG=0x00;
SYNCDELAY;
EP6CFG=0xE0;
SYNCDELAY;
EP8CFG=0x00;
SYNCDELAY;
FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x02;
SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x00;
SYNCDELAY;
PINFLAGSAB = 0xE6;
SYNCDELAY;
PINFLAGSCD = 0xf8;
SYNCDELAY;
PORTACFG |= 0x00; //0x40;
SYNCDELAY;
FIFOPINPOLAR = 0x00;
SYNCDELAY;
// activate NAK-ALL to avoid race conditions
// see TRM section 15.14
// reset, FIFO 2
//
// reset, FIFO 6
//
// deactivate NAK-ALL
// FLAGA - fixed EP6PF, FLAGB - fixed EP6FF
// FLAGC - fixed EP2EF, FLAGD - reserved
// SLCS, set alt. func. of PA7 pin
// all signals active low,
32
OEA|=0x0F;
//小于64字节有效
//EP6FIFOPFH=0x00; //DEIS PKSTAT PK2 PK1 PK0 0 PFC9 PFC8
//EP6FIFOPFL=0x40; //PFC7 PFC6 PFC5 PFC4 PFC3 PFC2 PFC1 PFC0
// handle the case where we were already in
EP2FIFOCFG = 0x01; // AUTOOUT=0, WORDWIDE=1
SYNCDELAY;
EP2FIFOCFG = 0x11; // AUTOOUT=1, WORDWIDE=1
SYNCDELAY;
EP6FIFOCFG = 0x09; // AUTOIN=1, ZEROLENIN=0, WORDWIDE=1
SYNCDELAY;
六、USB2FPGA硬件原理图
在此不再列出硬件原理图,请参见光盘里面电路图和相关说明文档。
33
34
2024年2月28日发(作者:不语柳)
USB CPLD开发板同步传输
目录
第一章FX2特性介绍……………………………………………………………….3
1.1介绍………………………………………………………………………..3
1.2结构………………………………………………………………………..3
1.3特征………………………………………………………………………..4
第二章Slave FIFO传输…………………………………………………………….5
2.1概述………………………………………………………………………..5
2.2硬件连接…………………………………………………………………..5
2.3 Slave FIFO的几种传输方式…………………………………………….6
2.3.1 同步Slave FIFO写…………………………………………….6
2.3.2 同步Slave FIFO读…………………………………………….9
2.3.3异步Slave FIFO写…………………………………………….11
2.3.4异步Slave FIFO读…………………………………………….12
第三章 寄存器设置…………………………………………………………..…….15
3.1 IFCONFIG………………………………………………………….……15
3.2 PINFLAGSAB/CD………………………………………………….…...16
3.3 FIFORESET……………………………………………………….…….17
3.4 FIFOPINPOLAR………………………………………………….…….18
3.5 EPxCFG………………………………………………………….………18
3.6 EPxFIFOCFG……………………………………………………….…..19
3.7 EPxAUTOINLENH/L…………………………………………………..20
3.8 EPxFIFOPFH/L………………………………………………………....21
3.9 INPKTEND……………………………………………………………...22
3.10 OUTPKTEND………………………………………………………….22
3.11 EPxFIFOIE和EPxFIFOIRQ………………………………………...22
3.12PORTACFG………………………………………………………….....23
3.13 EPxFIFOBCH EPxFIFOBCL………………………………………...23
3.14 EP2468FIFOFLAG……………………………………………………24
1
3.15其它通用寄存器………………………………………………………..25
第四章 同步slave fifo测试操作指南……………………………………….…….26
4.1安装软件包……………………………………………………………....26
4.2同步写FIFO测试……………………………………………………….26
4.3同步读FIFO测试……………………………………………………….30
4.4同步读写FIFO测试…………………………………………………….31
第五章 艾曼FPGA工作室开发板USB2CPLD软件设计…………………….….…….33
5.1 68013固件程序设计…………………………………………………….33
5.2 FPGA源代码设计………………………………………………………35
第六章 USB2FPGA硬件原理图…………………………………………..……...37
第七章 改板后注意的问题……………………………………………….……..…37
2
一.FX2特性介绍
1.1介绍
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等提供了简单和无缝连接接口。
1.2结构
CY7C68013结构图如图1所示。它有三种封装形式:56SSOP,100TQFP和128TQFP。
1.3特征:
★ 内嵌480MBit/s的收发器,锁相环PLL,串行接口引擎SIE——集成了整个USB 2.0
3
协议的物理层。
★ 为适应USB 2.0的480MBit/s的速率,FIFO端点可配置成2,3,4个缓冲区。
★ 内嵌可工作在48MHz的增强型8051,它具有以下特征:
- 具有256Byte的寄存器空间,两个串口,三个定时器,两个数据指针。
- 四个机器周期(工作在48MHz下时为83.3ns)即组成一个指令周期。
- 特殊功能寄存器(包括I/O口控制寄存器)可高速访问。
- 应用USB向量中断,具有极短的ISR响应时间。
- 只用作USB事务管理,控制,不参与数据传输,较好地解决了USB高速模式的带宽问题。
★ “软配置”——USB固件可由USB总线下载,片上不需集成ROM。
★ 拥有四个FIFO接口,可工作在内部或外部时钟下。端点和FIFO接口的应用使外部逻辑和USB总线可高速连接。
★ 内嵌通用可编程接口GPIF,它是一个状态机,可充当主控制器,提供外部逻辑和USB总线的“无胶粘贴”。
★ 一种单片USB 2.0外设解决方案,不需要外部的协议物理层,FX2把所有的功能集成在一个芯片上。
4
二、Slave FIFO传输
2.1概述
当有一个与FX2芯片相连的外部逻辑只需要利用FX2做为一个USB 2.0接口而实现与主机的高速通讯,而它本身又能够提供满足Slave FIFO要求的传输时序,可以做为Slave
FIFO主控制器时,即可考虑用此传输方式。
Slave FIFO传输的示意图如下:
主机
收发器和SIE
FIFO端点缓冲区
SlaveFIFO从控制器
8051固件
外部逻
辑
在这种方式下,FX2内嵌的8051固件的功能只是配置Slave FIFO相关的寄存器以及控制FX2何时工作在Slave FIFO模式下。一旦8051固件将相关的寄存器配置完毕,且使自身工作在Slave FIFO模式下后,外部逻辑(如FPGA)即可按照Slave FIFO的传输时序,高速与主机进行通讯,而在通讯过程中不需要8051固件的参与。
2.2硬件连接(标准)
在Slave FIFO方式下,外部逻辑与FX2的连接信号图如下:
5
IFCLK:FX2输出的时钟,可做为通讯的同步时钟;
FLAGA,FLAGB,FLAGC,FLAGD:FX2输出的FIFO状态信息,如满,空等;
SLCS:FIFO的片选信号,外部逻辑控制,当SLCS输出高时,不可进行数据传输;
SLOE:FIFO输出使能,外部逻辑控制,当SLOE无效时,数据线不输出有效数据;
SLRD:FIFO读信号,外部逻辑控制,同步读时,FIFO指针在SLRD有效时的每个IFCLK的上升沿递增,异步读时,FIFO读指针在SLRD的每个有效—无效的跳变沿时递增;
SLWR:FIFO写信号,外部逻辑控制,同步写时,在SLWR有效时的每个IFCLK的上升沿时数据被写入,FIFO指针递增,异步写时,在SLWR的每个有效—无效的跳变沿时数据被写入,FIFO写指针递增;
PKTEND:包结束信号,外部逻辑控制,在正常情况下,外部逻辑向FX2的FIFO中写数,当写入FIFO端点的字节数等于FX2固件设定的包大小时,数据将自动被打成一包进行传输,但有时外部逻辑可能需要传输一个字节数小于FX2固件设定的包大小的包,这时,它只需在写入一定数目的字节后,声明此信号,此时FX2硬件不管外部逻辑写入了多少字节,都自动将之打成一包进行传输;
FD[15:0]:数据线;
FIFOADR[1:0]:选择四个FIFO端点的地址线,外部逻辑控制。
2.3 Slave FIFO的几种传输方式
6
2.3.1 同步Slave FIFO写
同步Slave FIFO写的标准连接图如下:
同步Slave FIFO写的标准时序如下:
IDLE:当写事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向IN FIFO,进状态2;
状态2:如FIFO满,在本状态等待,否则进状态3;
状态3:驱动数据到数据线上,使SLWR有效,持续一个IFCLK周期,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLWR,PKTEND均假定低有效):
7
图示FIFO中本来没有数据,外部逻辑写入第一个数据时的情况。
图示假定FX2设定包大小为512字节,外部逻辑向FIFO端点中写入的数据达512字节时的情况。此时FX2硬件自动将已写入的512字节打成一包准备进行传输,这个动作就和在普通传输中,FX2固件向FIFO端点中写入512字节后,把512这个数写入EPxBC中一样,只不过这个过程是由硬件自动完成的。在这里可以看出“FX2固件不参与数据传输过程”的含义了。外部逻辑只须按上面的时序图所示的时序向FIFO端点中一个一个字节(或字)地写数,写到一定数量,FX2硬件自动将数据打包传输,这一切均不需固件的参与,由此实
8
现高速数据传输。
图示的是FIFO端点被写满时的情况。
2.3.2 同步Slave FIFO读:
同步Slave FIFO读的标准连接图如下:
同步Slave FIFO读的标准时序如下:
IDLE:当读事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2;
状态2:使SLOE有效,如FIFO空,在本状态等待,否则进状态3;
9
状态3:从数据线上读数,使SLRD有效,持续一个IFCLK周期,以递增FIFO读指针,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE均假定低有效):
图示正常情况时的时序。
10
图示FIFO被读空时的情况。
2.3.3 异步Slave FIFO写:
异步Slave FIFO写的标准连接图如下:
异步Slave FIFO写的标准时序如下:
IDLE:当写事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向IN FIFO,进状态2;
状态2:如FIFO满,在本状态等待,否则进状态3;
状态3:驱动数据到数据线上,使SLWR有效,再无效,以使FIFO写指针递增,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
11
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLWR,PKTEND均假定低有效):
图示FIFO中本来没有数据,外部逻辑写入第一个数据时的情况。
2.3.4 异步Slave FIFO读:
异步Slave FIFO读的标准连接图如下:
12
异步Slave FIFO读的标准时序如下:
IDLE:当读事件发生时,进状态1;
状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2;
状态2:如FIFO空,在本状态等待,否则进状态3;
状态3:使SLOE有效,使SLRD有效,从数据线上读数,再使SLRD无效,,以递增FIFO读指针,再使SLOE无效,进状态4;
状态4:如需传输更多的数,进状态2,否则进状态IDLE。
状态跳转示意图如下:
几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE均假定低有效):
13
图示正常情况时的时序。
14
三、寄存器设置
slave fifo模式下常用寄存器
IFCONFIG
PINFLAGAB
PINFLAGCK
FIFORESET
FIFOPINPOLAR
EPxCFG
EPxFIFOCFG
EPxAUTOINLENH:L
EPxFIFOPFH/L
PORTACFG
INPKTEND
EPxFLAGIE
EPxFLAGIRQ
EPxFIFOBCH:L
EPxFLAGS
EPxBUF
3.1 IFCONFIG(E601):接口配置寄存器
IFCLKSRC:FIFO时钟内部/外部时钟源选择,0外部时钟源,1内部时钟源。
3048MHZ:如选择内部时钟,30MHz/48MHz频率选择,0 IFCLK时钟30M,1 IFCLK时钟48M。
IFCLKOE:IFCLK时钟输出使能,0关闭,1打开。
IFCLKPOL:IFCLK输出反转使能,0不反转,1反转。
ASYNC:Slave FIFO同步/异步工作方式选择,0同步,1异步。
GSTATE:选择是否将GSTATE[2:0]在PORTE[2:0]输出,0关闭,1使能。
IFCFG1:0:FX2 I/O端口模式选择,也既是上面所说的FX2与外部逻辑传输方式的选择。00:I/O方式;01:reserved;10:Slave FIFO方式;11:GPIF方式。
15
3.2 PINFLAGSAB/CD(E602:E603):FLAGx引脚配置寄存器
FLAGA,FLAGB,FLAGC,FLAGD反映FIFO状态选择。每个脚有编址/固定两种模式:如设为编址模式,则它们都反映FIFOADR[1:0]脚当前所指端点的状态,其中,FLAGA反映“可编程极限”,FLAGB反映“满”标志,FLAGC反映“空”标志,FLAGD不存在;如设为固定模式,它们均可任意设置成反映任意端点的任意标志,而不受限于FIFOADR[1:0]脚当前所指端点的状态。
Slave fifo模式中,用引脚FLAGA~FLAGD来定义用端点FIFO的状态,并可灵活编程来实现FLAGx设置,见表3.2
16
说明:
1. PF表示FIFO编程状态,EF表示FIFO已空,FF表示FIFO已满
2. 0000为索引模式,其它为固定模式
3.3 FIFORESET(E604):端点缓冲区复位寄存器
将FIFO复位到初始状态。具体过程是,写0x80到此寄存器,NAK所有主机请求;写
17
0x02,0x04,0x06,0x08分别复位各个端点;写0x00,结束复位过程。
一般,在每一次开始进行slave FIFO或GPIF传输之前,先复位端点,再清空端点,然后即可进行数据传输。。
NAKALL-0关闭NAK功能,1用NAK响应主控器请求,例如在复位端点FIFO时,为了保证复位正常,防止主控器请求的干扰,先写入0x80,然后复位端点,最后写入0x00,使能请求响应。
EP3~EP0,1复位对应的端点缓冲区,其中EP3~EP0分别对应端点EP8,EP6,EP4,EP2。
3.4 FIFOPINPOLAR(E609):控制引脚极性设置寄存器
Slave FIFO引脚极性设置:0低有效,1高有效。
提示:PF极性没有提供寄存器设置,为高有效。
3.5 EPxCFG(E610:E615):端点2,4,6,8配置
18
VALID-0端点无效,1端点有效
DIR-端点方向,0=OUT方向,1=IN方向,默认端点2,4为IN,端点6,8为OUT
TYPE1,TYPE0-端点类型,见表3.4
SIZE-缓冲区大小(仅端点2和端点),0=512字节,1=1024字节
BUF1,BUF0-端点缓冲区个数(仅端点2和端点6),见表3.5
19
3. 6 EPxFIFOCFG(E618:E61B):端点FIFO配置寄存器
INFM1:FIFO状态标志是否提前一个字节有效选择,IN端点满减1,1使能,0非使能。
OEP1:FIFO状态标志是否提前一个字节有效选择,OUT端点空加1,1使能,0非使能。
AUTOOUT:在前面,我们说Slave FIFO方式下的数据传输过程不需要FX2固件的参与,实际上是不确切的,应该说,FX2固件可以不参与数据传输过程,也可以参与。AUTOOUT即可设置。如果设置AUTOOUT为1,则就如上面所说的,FX2固件只需要完成初始化工作,真正的数据传输是不需要FX2固件的参与的,具体的说,当FX2从主机收到一包数据时,外部逻辑即可看到FIFO端点缓冲区状态的改变,然后从中取数。如果设置AUTOOUT为0,则数据传输过程就需要FX2参与了,此时当FX2从主机收到一包数据时,FIFO端点缓冲区状态的改变并不会立刻在端口显现,而是固件先看到FIFO端点状态的改变,此时,FX2固件可以做三件事情:
a.向OUTPKTEND中的SKIP位写0,使FIFO端点状态的改变在端口显现,从而使外部逻辑可以从FIFO端点中读取数据;
b.向OUTPKTEND中的SKIP位写1,丢掉这包数据,这样就相当于主机从来就没有发送这一包数据,外部逻辑当然也不能从FIFO端点中读到这一包数据了;
c.从新编辑这一包数据,设置完全重写整个包的数据,再写EPxBC寄存器,把数据传给外部逻辑。
在FX2复位之后,如果其OUT端点缓冲区内有一包数据未处理,这包数据并不会自动传给外部逻辑。所以,为保证OUT端点缓冲区内没有未处理数据,在reset FX2后,要清空一下OUT端点缓冲区,具体做法就是向SKIP位写1(OUT端点缓冲区有几个缓冲区就写几次)。
AUTOIN:Auto IN和Auto OUT有一点不同,在Auto OUT里,包的大小只能是512
20
或1024,而在Auto IN里,包的大小可以任意设定,甚至可以是0字节,这可以通过EPxAUTOINLENTH/L设置。
和AUTOOUT类似,当设置AUTOIN = 0时,FX2固件可以传输,丢弃,修改外部逻辑传过来的数据,这通过向INPTKEND寄存器的SKIP写不同的值实现。
ZEROLENIN:是否允许传输0字节,1使能,0非使能。
WORDWIDE:8 Bit,16 Bit选择。当选择8 Bit模式时,Port B将是FD[7:0];当选择16 Bit模式时,Port D将是FD[15:8],1则为16位,0则为8位。
3.7 EPxAUTOINLENH/L(E620:E627):端点2,4,6,8AUTOIN长度设置(仅IN端点有效)
设置AUTOIN时自动传输的包大小(注意,不能大于IN端点的缓冲区的大小)。
说明:PL10仅端点2和6有效
3.8 EPxFIFOPFH/L(E630:E637):FIFO可编程PF状态长度设置
21
DECIS-0小于等于门限值PF有效,1大于等于门限值PF有效
PKSTAT-
1. OUT端点FIFO:门限值为PFC12:0设置,当FIFO长度小于等于门限值(DECIS=0),或者FIFO长度大于等于门限值(DECIS=1),则PF有效。
2.
3.
IN端点FIFO,且PKTSTAT=1:门限值为PFC9:0
IN端点FIFO,且PKTSTAT=0:门限值由两部分组成:PKTS2:0(数据包)再加上PFC9:0(当前数据长度)。
解释:
对于OUT包,极限存储在PFC[12:0]中,在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。
对于IN包,当PKTSTAT=1时,极限存储在两部分:PKTS[2:0]存储极限包数(已
22
经交给SIE但未传给主机的包数),PFC[9:0]存储极限字节数(正在编辑的包里的字节数)。在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。
3.9 INPKTEND(E648):结束IN传输
SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个IN缓冲区,1表示将跳过一个IN缓冲区
EP3,EP2,EP1,EP0-代替PKTEND引脚功能,软件强行结束IN端点8,6,4,2 IN数据传输,传输短包。
3.10 OUTPKTEND(E649):强行结束OUT传输寄存器
SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个OUT缓冲区,1表示将跳过一个OUT缓冲区
EP3,EP2,EP1,EP0-代替EPxBLH.7=1引脚功能,软件强行结束OUT端点8,6,4,2数据传输。
3.11 EPxFIFOIE和EPxFIFOIRQ(E652:E657):端点FIFO中断(INT4)使能和请求
EDGPF-PF中断触发沿,0上升沿触发,1下降沿触发
23
PF-1使能端点FIFO PF中断,0非使能
EF-1使能端点FIFO EF中断,0非使能
FF-1使能端点FIFO FF中断,0非使能
PF-0无PF中断,1有PF中断
EF-0无EF中断,1有EF中断
PF-0无FF中断,1有FF中断
3.12PORTACFG:端口A配置
置1使能端口A复用引脚,虽然SLCS出现在PORTACFG.6的位置上,当IFCFG1:0=11时,PORTA.7复用为SLCS,FLAGD也出现在PORTA.7引脚上,当PORTACFG.7置位时,PORTA.7复用为FLAGD输出,当PORTACFG.6和PORTACFG.7均为1,则PORTA.7复用为FLAGD。所以PORTACFG7:6=01时,PORTA.7复用为SLCS。
3.13 EPxFIFOBCH EPxFIFOBCL(E6AB:E6B2):端点FIFO计数
24
当前端点缓冲区中已有的数据数目。
说明:
端点2最大缓冲区计数BC[12:0],为4096字节。
端点6最大缓冲区计数BC[11:0],为2048字节。
端点4和8最大缓冲区计数BC[10:0],为1024字节。
3.14 EP2468FIFOFLAG(SFR AB:SFR AC)和EPxFIFOFLGS(E6A7:E6AA):端点FIFO状态标志寄存器
3.15其它通用寄存器
CPUCS(E600):
PORTCSTB:128脚或100脚的RD,WR输出使能。
CLKSPD1,CLKSPD0:CPU频率选择,00:12MHz(默认);01:24MHz;10:48MHz;11:Reserved。
CLKINV:CLKOUT反转选择。
CLKOE:CLKOUT输出使能。
REVCTL(E608):
正常情况下,简单地设置DYN_OUT和ENH_PKT位为1即可。
25
四、同步slave fifo测试操作指南
4.1安装软件包
第一次使用时,首先要安装CYPRESS开发包,安装完毕后,在目录“windowssystem32drivers”中有一个文件,用驱动程序目录下的将其
26
代替,两个驱动程序文件的区别是,后者将缓冲区的大小扩展为6M字节,详见驱动代码。
图4.1
4.2同步写FIFO测试
插上开发板后,系统默认采用USB接口供电,PC上安装好下载线,并将下载线与开发板FPGA/CPLD的AS下载口或者JTAG下载连接好,下载采用AS方式,将FPGA程序下载到配置芯片中,打开ALTERA的编译软件Quartus 5.0,将“相应目录/写FIFO”下的wr_项目文件打开,界面见图4.2,点击“change file”,在弹出界面中选择下载文件,将wr_下载到FPGA中。(也可以选择JTAG方式下载到FPGA中,当然这时也可以选择的文件类型有.sof文件格式)
27
图4.2
接着打开CYPRESS EZUSB控制面板,见图4.3,将“相应目录/固件源代码/fw”目录下的固件程序,通过USB接口下载到FX2中,下载成功后,提示slave fifo设备安装成功。
28
图4.3
下载完FPGA程序与固件程序后,就可以通过应用程序进行USB传输测试,同步写FIFO测试中,FPGA程序内部生成一个16位递增计数器,写入FX2 FIFO中,并通过FX2发送给PC,如果FX2内部FIFO满,则计数器停止计数,非满则计数并写入FX2的FIFO中。
应用程序位于“相应目录/SYN同步方式/写FIFO/Apptest/Release”目录下.,打开应用程序界面如图4.4,打开应用程序后,首先在下面文本显示框中,出现“打开设备成功”的提示,接下来点击界面上启动读线程,在文本框中开始显示测试结果(包括测试速度,传输字节与花费时间),并在上面显示通过的包数与出现的错误情况。点击“读测试”可以在当前目录下保存读到到的测试数据,并且可以在Ultraedit编辑软件下打开.bin数据文件,查看16位计数器计数数据是否完整,从而测试数据传输中是否有数据丢失,如图4.5。
29
图4.4
30
图4.5
根据主机主板不同,测试速度也不一样,一般数据传输可以在40MB/S左右。
注意:
1、 USB测试在USB2.0主板上进行。
2、 如果主机USB口通过PCI卡扩展出来的,将影响测试速度。
五、开发板USB2FPGA软件设计
5.1 68013固件程序设计
void TD_Init( void )部分代码注释
//时钟设置
//CPUCS = 0x02; //12MHZ CLKOUT ENALBE
//CPUCS = 0x0a; //24MHZ CLKOUT ENALBE
CPUCS = 0x12; //48MHZ CLKOUT ENALBE
IFCONFIG =0x43;//使用外部时钟,IFCLK输入不反向
31
SYNCDELAY;
EP2CFG=0xA0; //需要设定为四缓冲,每个缓冲区大小为512字节
SYNCDELAY;
EP4CFG=0x00;
SYNCDELAY;
EP6CFG=0xE0;
SYNCDELAY;
EP8CFG=0x00;
SYNCDELAY;
FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x02;
SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x00;
SYNCDELAY;
PINFLAGSAB = 0xE6;
SYNCDELAY;
PINFLAGSCD = 0xf8;
SYNCDELAY;
PORTACFG |= 0x00; //0x40;
SYNCDELAY;
FIFOPINPOLAR = 0x00;
SYNCDELAY;
// activate NAK-ALL to avoid race conditions
// see TRM section 15.14
// reset, FIFO 2
//
// reset, FIFO 6
//
// deactivate NAK-ALL
// FLAGA - fixed EP6PF, FLAGB - fixed EP6FF
// FLAGC - fixed EP2EF, FLAGD - reserved
// SLCS, set alt. func. of PA7 pin
// all signals active low,
32
OEA|=0x0F;
//小于64字节有效
//EP6FIFOPFH=0x00; //DEIS PKSTAT PK2 PK1 PK0 0 PFC9 PFC8
//EP6FIFOPFL=0x40; //PFC7 PFC6 PFC5 PFC4 PFC3 PFC2 PFC1 PFC0
// handle the case where we were already in
EP2FIFOCFG = 0x01; // AUTOOUT=0, WORDWIDE=1
SYNCDELAY;
EP2FIFOCFG = 0x11; // AUTOOUT=1, WORDWIDE=1
SYNCDELAY;
EP6FIFOCFG = 0x09; // AUTOIN=1, ZEROLENIN=0, WORDWIDE=1
SYNCDELAY;
六、USB2FPGA硬件原理图
在此不再列出硬件原理图,请参见光盘里面电路图和相关说明文档。
33
34