DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1184|回复: 0
打印 上一主题 下一主题

[待整理] 利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:31:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        10.3  利用FPGA实现USB 2.0通信接口

        10.3.1  USB 2.0接口的实现方式

        利用FPGA来实现USB 2.0接口的方式一般有两种,一是借助外围的USB接口芯片,二是FPGA内部实现USB协议控制器,外部通过USB的PHY芯片来实现接口。
         
        对于第一种方式,FPGA不需要实现USB通信协议,开发的风险小,而且性能稳定,因此被大部分设计者所采用。而第二种方式需要购买USB的IP核,门槛较高。如果自己开发基于FPGA的USB协议栈,风险高,而且兼容性和稳定性很难保证。
         
        目前市场上的USB 2.0接口芯片厂家和型号比较多,其中Cypress Semiconductor公司的EZ-USB FX2(CY7C68013)是世界上第一款集成USB 2.0的微处理器,它集成了USB 2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。
         
        FX2这种独创性结构可使数据传输率达到56MByte/s,即USB 2.0允许的最大带宽。在FX2中,智能SIE可以硬件处理许多USB 1.1和USB 2.0协议,从而减少了开发时间、确保了USB的兼容性。
        GPIF(General Programmable Interface)和主/从端点FIFO(8位或16位数据总线)为ATA、UTOPIA、EPP、PCMCIA和DSP等提供了简单和无缝连接接口。
         
        CY7C68013结构图如图10.4所示。FPGA与CY7C68013的电路连接关系可以参考本书2.2.11小节的内容。
       

        图10.4  CY7C68013 FX2结构示意图

         
        10.3.2  FX2接口芯片的Slave FIFO传输模式

        当FPGA与FX2芯片相连时,只需要利用FX2作为一个USB 2.0数据通道来实现与主机的高速通信。FPGA能够提供满足Slave FIFO要求的传输时序,可以作为Slave FIFO主控制器。`
         
        Slave FIFO传输的示意图如图10.5所示。
       

        图10.5  Slave FIFO传输的示意图

        在这种方式下,FX2内嵌的8051固件的功能只是配置Slave FIFO相关的寄存器以及控制FX2何时工作在Slave FIFO模式下。一旦8051固件将相关的寄存器配置完毕,且使自身工作在Slave FIFO模式下后,FPGA就可按照Slave FIFO的传输时序,高速与主机进行通信,而在通信过程中不需要8051固件的参与。
         
        在Slave FIFO方式下,FPGA与FX2的连接信号图如图10.6所示。
       

        下面是信号线的说明。
        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]:选择4个FIFO端点的地址线,外部逻辑控制。
         
        10.3.3  Slave FIFO模式的典型操作时序

        1.同步Slave FIFO写操作

        同步Slave FIFO写的标准连接图如图10.7所示。
        同步Slave FIFO写的标准时序如下。
        ·  IDLE:当写事件发生时,进状态1。
        ·  状态1:使FIFOADR[1:0]指向IN FIFO,进状态2。
        ·  状态2:如FIFO满,在当前状态等待,否则进状态3。
        ·  状态3:驱动数据到数据线上,使SLWR有效,持续一个IFCLK周期,进状态4。
        ·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。
         
        状态跳转示意图如图10.8所示。
           

        图10.7  同步Slave FIFO写的标准连接图    图10.8  同步Slave FIFO写的标准时序

         

        假定FX2设定包大小为512字节,当FPGA向FIFO端点中写入的数据达512字节时,FX2硬件自动将已写入的512字节打成一包准备进行传输。这个动作就和在普通传输中,FX2固件向FIFO端点中写入512字节后,把512这个数写入EPxBC中一样,只不过这个过程是由硬件自动完成的。在这里可以看出“FX2固件不参与数据传输过程”的含义了。外部逻辑只需按上面的时序图所示的时序向FIFO端点中一个一个字节(或字)地写数,写到一定数量,FX2硬件自动将数据打包传输,这一切均不需固件的参与,由此实现高速数据传输。
         
        2.同步Slave FIFO读操作

        同步Slave FIFO读的标准连接图如图10.9所示。
       

         
        同步Slave FIFO读的标准时序如下。
        ·  IDLE:当读事件发生时,进状态1。
        ·  状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2。
        ·  状态2:使SLOE有效,如FIFO空,在当前状态等待,否则进状态3,
        ·  状态3:从数据线上读数,使SLRD有效,持续一个IFCLK周期,以递增FIFO读指针,进状态4。
        ·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。
        状态跳转示意图如图10.10所示。
         
        3.异步Slave FIFO写操作

        异步Slave FIFO写的标准连接图如图10.11所示。
                       

         图10.10  同步Slave FIFO读状态跳转示意图     图10.11  异步Slave FIFO写的标准连接图

         

        异步Slave FIFO写的标准时序如下。
        ·  IDLE:当写事件发生时,进状态1。
        ·  状态1:使FIFOADR[1:0]指向IN FIFO,进状态2。
        ·  状态2:如FIFO满,在当前状态等待,否则进状态3。
        ·  状态3:驱动数据到数据线上,使SLWR有效,再无效,以使FIFO写指针递增,进状态4。
        ·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。
        状态跳转示意图如图10.12所示。
         
        4.异步Slave FIFO读操作

        异步Slave FIFO读的标准连接如图10.13所示。
                                

        图10.12  异步Slave FIFO写状态跳转示意图         图10.13  异步Slave FIFO读的标准连接图

         

        异步Slave FIFO读的标准时序如下。
        ·  IDLE:当读事件发生时,进状态1。
        ·  状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2。
        ·  状态2:如FIFO空,在当前状态等待,否则进状态3。
       

         

        ·  状态3:使SLOE有效,使SLRD有效,从数据线上读数,再使SLRD无效,以递增FIFO读指针,再使SLOE无效,进状态4。
        ·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。
        状态跳转示意图如图10.14所示。
         
        10.3.4  FX2的固件程序设计

        在FX2芯片的固件程序设计中,最关键的就是系统初始化函数TD_Init(void),下面讲解这个函数的部分代码。
         
        //时钟设置
        CPUCS = 0x12;        // 48MHz CLKOUT 输出使能
        IFCONFIG =0x43;      // 使用外部时钟,IFCLK输入不反向
         
        SYNCDELAY;           // 同步延迟
        EP2CFG=0xA0;         // 需要设定为4缓冲,每个缓冲区大小为512字节
        SYNCDELAY;
        EP4CFG=0x00;
        SYNCDELAY;
        EP6CFG=0xE0;
        SYNCDELAY;
        EP8CFG=0x00;
         
        SYNCDELAY;
        FIFORESET = 0x80;   // 激活 NAK-ALL 避免竞争
        SYNCDELAY;
        FIFORESET = 0x02;   // 复位 FIFO 2
        SYNCDELAY;
        FIFORESET = 0x06;   // 复位 FIFO 6
        SYNCDELAY;            
        FIFORESET = 0x00;   // 取消激活 NAK-ALL
               
        SYNCDELAY;
        PINFLAGSAB = 0xE6;  // FLAGA 设定为 EP6PF, FLAGB 设定为 EP6FF
        SYNCDELAY;
        PINFLAGSCD = 0xf8;  // FLAGC 设定为 EP2EF, FLAGD 保留
        SYNCDELAY;
        PORTACFG |=  0x00;  // SLCS有效
        SYNCDELAY;
        FIFOPINPOLAR = 0x00; // 所有信号低电平有效
        SYNCDELAY;
         
        10.3.5  USB 2.0接口的典型应用

        由于USB 2.0接口的数据传输速度快,而且使用方便,因此被广泛应用于各种便携设备中。例如,基于USB 2.0接口的数据采集终端,可以将各种类型的数据采集到电脑主机中进行处理和结果显示,其典型的结构如图10.15所示。
       

        图10.15  基于USB 2.0接口的数据采集终端结构框图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-2 21:26 , 耗时 0.100384 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表