USB接口(Universal Serial Bus)是一种通用的高速串行接口。它最主要的特点是高速传输特性,可以很好地解决海量数据在嵌入式系统与PC机之间的互传问题;同时USB接口还具有热插拔、速度快(具有3种数据传输模式,即低速、全速、高速;最快可达480 Mbps)和扩展性好(最多可以连接127个USB设备)等特点,从而使得USB接口得到了广泛的应用。
1 USB芯片CY7C68013介绍
CY7C68013属于Cypress公司的FX2系列产品,是Cypress公司生产的第一款USB2.0芯片。
CYTC68013是一个带增强型MCS51内核和USB接口的单片机,完全遵从USB2.O协议,可提供高达480 Mbps的传输率;内部集成PLL(锁相环),最高可使5l内核工作在48MHz;对外提供两个串口,可以方便地与外部通信;片内拥有8 KB的RAM,可完全满足系统每次传输数据的需要,无需再外接RAM。由于芯片内部没有ROM,一旦USB设备断开与PC的连接,程序代码将无法保存,需要每次在PC机接入USB设备后,重新下载。另外,CY7C68013支持一种“E2PROM引导方式”,即先将固件下载到片外E2PROM中,当每次USB设备通电后,FX2自动将片外E2PROM中的程序读入芯片中。
CY7C68013与外设有主/从两种接口方式:可编程接口GPIF和Slave FIFO。可编程接口GPIF是主机方式,可以通过软件编写读/写控制时序,灵活方便,几乎可以与所有8/16位接口的控制器、存储器和总线实现无缝连接。Slave FTFO是从机方式,外部控制器可以像对待普通FIFO一样对芯片内的多个缓冲区进行读/写;S1ave FIFO方式也可以灵活配置,以适应不同的需要。
2 硬件设计思想
USB数据传输流程如图l所示。
工作流程可分为两个部分:芯片初始化部分和数据传输部分。
2.1 芯片初始化部分
本部分是适用于任何USB传输过程中的芯片初始化部分。当USB接口接入PC后,首先进行PC的设备搜索,从USB端获得设备的VID/PID,以及USB芯片的工作方式;然后PC机通过得到的VID/PID获取设备的驱动,保证设备的工作。与此同时,USB芯片上电开始,MCU开始从E2PROM中获取MCU的工作状态、采用的工作模式、数据传输方式、所用到传输方式端点的大小以及传输方向,并对接口器件进行相应芯片寄存器的初始化。实现内容因具体芯片而异,因此确定接口器件后再说明寄存器初始化的方法。
2.2 数据传输部分
不同器件相接实现方式不同,在此以CY7C68013与DSP6416 HPI接口数据传输实现为例,介绍数据传输流程。
首先,简单地介绍一下DSP611 6 HPI接口。HPI是一个并行端口,通过HPI可以直接访问DSP的存储空间,也可以通过DMA/EDMA控制器实现对DSP存储空间的访问。HPI口可以提供16/32位的数据接口,通过主机或者CPU访问HPI控制寄存器(HPIC)来确定HPI接口的数据带宽。
确定了DSPHPI作为USB的接口器件,DSPHPI接口的初始化如下:对于DSP,为了满足数据的正常传输,需要对HPIC寄存器进行设置,即设置字长,初始化时假设DSP向主机发送中断和Ready信号。因为没有用到HPT的地址线,因此不需要设置HPIA寄存器。此时DSP已经做好了接收或发送数据的准备。
为了满足与HPI接口读/写时序的无缝连接,此处采用了GPIF传输模式。流程如下:
当数据PC端发送时,USB收发机将收到的信号发送给CY7C68013,USB芯片接收到数据后先存放在端点寄存器里,等到数据放满数据缓存区时,USB芯片启动GPIF,将数据送入DSP。当DSP接收到数据后会对HPIC控制器进行设置,发送给USB中断信号,提示收到数据包,即完成1次PC→DSP传输。
当数据从DSP端发送时,HPIC寄存器发送中断至USB芯片,USB芯片做好接收数据的准备;然后HPI将数据送入USB芯片,等数据缓存区放满l024字节后,将数据通过USB发送至PC机接收端。
3 硬件电路的设计与实现
如前所述,接口电路方面USB为了满足HPI接口的读/写时序采用GPIF方式。
3.1 CY7C68013与HPI接口电路
CY7C68013与HPT接口电路原理图如图2所示。
这里需要说明的有如下几点:
①HHWIL主要用来区分第1个/第2个Halfword的传输,且仅在半宁传输时出现。由于主机没有数据线和地址线复用的情况,因此在这里将HAS置高电平。
HDSl、HDS2作为数据选通信号,主要用于主机寻址HPI周期内控制数据传输,在本次工作中没有用到,而为了调试方便,保留了HDSl和HDS2,通过高低电平控制它们的变化。由于HDSl、HDS2和HCS在片内是组合为一个低有效的HSTROBE信号,其组成关系如下:
HSTROBE="NOT"(HDSl XOR HDS2)OR HCS所以HDSl置低电平,HDS2置高电平,利用HCS的信号变化控制HPI读/写初始化。
②HCNTL[1:O]主要用来控制当前访问的是HPI的哪个寄存器。在HP1初始化时完成HPIC寄存器的控制信息。HPID寄存器主要实现数据传输时数据的读取/写入。此处没有用到HPI的地址操作,因此HPIA作为地址寄存器不需要送入控制信息。
③HD[15:O]对应于PB[7:o]、PD[7:0]接口,由于为半字传输方式,因此在这里需要将HD5置低电平,以满足芯片复位时HD5为低电平。
3.2 固件调试部分
固件程序流程图如图3所示。
(1)初始化部分
该部分用来确定整个过程采用的方式,确定端点的传输方式、方向和缓存区的大小,设置HPI接口的HPIC寄存器以及设备的枚举。本设计采用的是GPIF传输方式,端点选择的是批量传输。采用的端点是EP2和EP6。EP2传输方向为OUT,缓存区大小为1024字节;EP6传输方向为IN,缓存区大小为l024字节;通过对HPIC的操作确定HPI的工作方式以及HPID的数据传输方式。编写GPIF数据中断函数和USB设备描述符。
(2)GPIF波形部分
GPIF波形采用Cypress公司提供的GPIF Designer来实现。GPIF Designer通过简单形象的界面解决了复杂程序表示的GPIF时序设计问题。与DSP HPI接口相符合的读、写时序如图4和图5所示。
(3)中断产生时GPIF数据传输
在程序中实现每当缓存区数据达到l024字节或为最后一包数据时,自动进行数据传输。下面的程序是EP2将数据发送到DSP端的程序:
EP6将从DSP收到的数据传给主控端的程序如下:
4 总 结
本文以CY7C68013和DSP HPI接口为例描述了USB芯片的固件程序流程和设计思想。通过采用GPIF模拟了HPI接口的读/写时序,实现了DSP与USB的无缝连接。
文章评论(0条评论)
登录后参与讨论