原创 14

2009-1-4 15:40 3174 6 6 分类: 处理器与DSP

给USB开发者的一点建议


给开发USB的网友一点建议,如果你想开发USB,建议你使用Cypress的Cy7c68013,USB的开发我大约在4年前就开始了,最先使用的NS的USBN9602,后来使用Philips的PDIUSBD12,现在使用Cypress的Cy7c68013。

  总的来说开发USB是一件不容易的事情,你至少需要具备三个方面的知识:
  1、Windows底层WDM驱动程序的原理及编写;
  2、VC编程;
  3、熟练单片机编程;

  我推荐Cy7c68013有一下原因:
  1、 Cy7c68013内部集成8051单片机用于运行Firmware,用于处理复杂的USB底层协议,同时集成的8051可以通过USB接口下载代码。其他两款芯片只是一个USB的转接器,必须通过外部的“HOST”CPU来运行USB的Firmware,开发难度很大。
  2、Cy7c68013开发板自带通用WDM驱动,你无需熟练掌握WDM驱动程序的编写,只需要了解。其他两款芯片需要编写驱动。
  3、Cy7c68013集成了一个4KB的大容量FIFO,这对批量数据传输非常有利。其他两款芯片内部只有很小的FIFO。
  4、 Cy7c68013是USB2.0接口,同时兼容USB1.1,最高数据传输速率480MBps,大约48MB/S,且可以通过FIFO与外部实现透明数据传输,即用户程序发送什么数据,直接从FIFO里就可以读取这些数据,或者说提供一个“透明”的高速数据通道。其他两款芯片都是USB1.1接口,只有 12MBps速率,而且需要复杂的Firmware程序,用24M的51单片机最高只能达到400~600KB/S的数据传输速度。

芯片的USB接口固件设计


 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所示。


22a.jpg


    工作流程可分为两个部分:芯片初始化部分和数据传输部分。


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所示。


22b.jpg


    这里需要说明的有如下几点:


    ①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所示。


22c.jpg


(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所示。


22d.jpg22e.jpg


(3)中断产生时GPIF数据传输


    在程序中实现每当缓存区数据达到l024字节或为最后一包数据时,自动进行数据传输。下面的程序是EP2将数据发送到DSP端的程序:


22f.jpg


EP6将从DSP收到的数据传给主控端的程序如下:


22g.jpg


22h.jpg


4 总 结


    本文以CY7C68013和DSP HPI接口为例描述了USB芯片的固件程序流程和设计思想。通过采用GPIF模拟了HPI接口的读/写时序,实现了DSP与USB的无缝连接。


文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条