图4 同步Slave FIFO写序列
图5 同步ZLP写循环时序
同步Slave FIFO读序列描述
执行来自同步Slave FIFO接口的写序列如下: 1. FIFO地址稳定且SLCS#信号有效。 2. 外部主/外围输出数据到数据总线上。 3. SLWR#有效。
4. 当SLWR#有效,数据在PCLK的上升沿写到FIFO中,FIFO指针增长。
5. 在来自时钟上升沿的tCFLG延时后FIFO标志更新。 突发模式同样如此。
注:对于突发模式,在整个突发写模式期间,SLWR#和SLCS#保持有效。在突发写模式内,当SLWR#有效后,在每个PCLK的上升沿,数据总线上的值被写如FIFO。在PCLK的上升沿,FIFO指针增加。
短包:通过使用PKTEND#信号,短包能被传递到USB主机中。外部设备和处理器应该被设计来宣布PKTEND#信号随着最后一个字节的数据和SLWR#信号脉冲对应的最后一个字节。在PKTEND#有效期间,FIFOADDR线必须保持恒定。在PKTEND#和SLWR#有效期间,GPIF II状态机解释包为短包并将其传送到USB接口。如果协议不需要任何短包传送,PKTEND#信号可能被拉高。
注:在读方向中,没有特别的信号表明一个短包来自USB。为了决定何时所以的数据被读取,空的FLAG标志必须被外部主机监控。
零长度包:通过宣布PKTEND#有效,外部设备或处理器能发出一个ZLP信号,无需SLWR#信号。SLCS#和地址必须按照图5中被驱动。
标志使用:对于流控制,标志信号被外部处理器监控。标志信号是来自EZ-USB FX3的输出,对于一个专门线程或正在被寻址的当前线程,EZ-USB FX3可以被配置成空/满/局部状态。
表3 同步Slave FIFO时间参数
截止目前,该应用笔记已经描述了Slave FIFO接口的固件细节,包括引脚映射和接口时序。下面的部分描述能用GPIF II设计器和EZ-USB FX3 SDK完成的FLAG信号的配置。 进程和套接字
该部分简明扼要的解释了进程和套接字的概念,这对理解如何配置FLAGs很重要。
EZ-USB FX3 FIFOs和套接字相关联。GPIF II部分的套接字和USB接口的端点相似。
对于GPIF II上的数据传输,EZ-USB FX3提供四个物理固件进程。每一次,任何一个套接字被映射到一个物理进程中。缺省情况下,PIB套接字0被映射到进程0,PIB套接字1被映射到进程1,PIB套接字2被映射到进程2,PIB套接字3被映射到进程3。
注意,接口中的地址信号A1:A0表明被访问的进程。FX3的DMA组织将数据路由到映射至进程的套接字。因此,当A1:A0=0时,进程0被访问,任何通过进程0传输的数据被路由至套接字0,同理,当A1:A0=1时,数据由套接字1输入输出。
注意:该应用笔记中描述的Slave FIFO接口只有两位地址线,因此最多只有四个套接字被访问。
当访问超过四个套接字时,应该使用拥有五位地址线的Slave FIFO接口。可以参考应用笔记“AN68829-Slave FIFO Interface EZ-USB FX3:5-Bit Address Mode”。
指定的套接字访问必须配置一个DMA通道。 DMA通道配置
固件必须配置必要的生产者消费者DMA通道。
注意,如果数据从Slave FIFO接口传递到USB接口时,P-port是生产者,USB是消费者,反之亦然。
如果数据在Slave FIFO接口的两个方向传输,应该配置两个DMA通道,一个P-port作为生产者,另一个作为消费者。
P-port生产者套接字时外部设备写数据到Slave FIFO接口,同理消费者套接字时外部设备从Slave FIFO读数据。
注意,DMA通道中的P-port套接字号应该是A1:A0上被编址的套接字号。
当配置通道时,多个输入缓冲区可以被分配到一个特别的DMA通道。注意,FLAGs将表明每个缓冲区上的空/满。(每个缓冲区的最大缓存空间是64KB)
例如,两个1024字节的缓冲区被分配到一个DMA通道中,当1024字节已经被写入第一个缓冲区时,满FLAG将表明满。在DMA通道装换到第二个缓存区前,满标志不变。DMA通道转换到下一个缓冲区所话费的时间不确定,虽然只是几毫秒。外部的主控必须监控FLAG来决定何时装换完成,下一个缓存可以进行数据访问。
下面的部分描述如何配置FLAG来表明不同的进程状态。 标志配置
标志位可以被配置成空,满,局部空,局部满信号。这些不是由GPIF II状态机控制的,而是由EZ-USB FX3的内部DMA硬件控制。标志位和特定的进程或当前被编址的进程有关,因而,表明了映射到进程的套接字的状态。
标志的空与满取决于套接字的方向(套接字初始化时配置)。因此,如果数据正在被从套接字中读出时,标志位表明空或不空;数据写入套接字时,指明满或不满。
能被使用的不同类型的套接字: 1. 专用线程标志(空/满或局部空/满) 2. 当前线程标志(空/满或局部空/满)
这些不同类型的标志在下面有所介绍。不同的FLAG配置导致不同的延时,表4中有所总结。 专用线程标志
一个标志能够被配置用以表明特定的线程状态。在这种情况下,只有对于那些进程以及表明映射至特定进程的套接字,标志是专用的。不考虑进程被在地址总线上编址。
在这种情况下,外部处理器或设备必须保持专用线程的标志位状态并在每一次进程被编址时,监控正确的标志位。
例如,如果FLAGA是进程0的专用标志,FLAGB是进程1的专用标志,当外部处理器执行访问进程0的操作时,必须监控FLAGA;执行进程1操作时,监控FLAGB。
对于每一个即将被访问的进程而言,标志位可能是专用的。如果应用软件需要四个访问进程,则有相应的四个标志。
注意,当执行写转换时,在转换的末尾,标志位经常出现3个周期的延时。3个周期的延时来自写周期,起因于缓存变满,标志位边低的时刻。在第四个时钟边缘,外部主机采样低标志。这在表4中有所说明。
当执行读操作时,在每次转换的末端,两个周期的延时发生。两个时钟周期的延时来自引起缓存空标志位变低时刻的读循环。在第三个时钟边缘,外部主机采样标志低信号,表3中有所说明。 当前进程标志
配置标志来表明当前被寻址的进程状态。在这种情况下,GPIF II状态机采样地址总线上的地址,更新标志来表明进程状态。这种配置需要更少的引脚,因为一个单个的“当前进程”标志能被用来表明四个进程的状态。然而,当当前进程标志被拥有同步Slave FIFO接口时,两个时钟周期的延时发生,因为GPIF II首先必须采样地址,然后更新标志。当一个有效的地址出现在接口上时,两个时钟周期开始发生。在这之后的第三个时钟边缘,新编址的进程的有效的FLAG状态被采样。(注:Slave FIFO描述符包括在使用“当前进程”标志配置SDK中)
图6 当使用当前进程标志时,传输开始,额外的延时发生
局部标志
配置标志位以表明套接字的局部空满状态。必须选择一个水印值,当读或写的字小于或等于32位时,标志有效。
注意,局部标志的延时取决于局部标志规定的水印值。
下面的表总结了当使用不同标志配置时发生的延迟。表4也展示了对于一个特定的FLAG设置,GPIF II设计器必须选择。对于FLAGs,在标志配置部分能发现GPIF II设计器设置的例子和截图。