天天看点

usb3.0开发

CYUSB 3014 开发板开发

开发环境:SDK开发工具,编辑器和编译器使用Eclipse,使用固件例程 slavefifo。测试数据使用 control center,测试速率使用 streamer,均在Cypress下。

相关文档在 : SDK默认安装路径/Cypress/EZ-USB FX3 SDK/1.3/doc 下。

本项目使用了EP0的in和out端点作为控制端点

EP1的in和out端点作为pc与fpga传输数据的端点

EP2的in端点in端点作为fpga到pc的命令的端点

cyusb3014主要功能是数据传输,它的数据传输有 1、DMA 通道的模式,2、寄存器模式

在官方提供的例程中,大多采用 DMA 通道模式,方法是调用回调函数来使用dma通道进行数据传输,
    在回调函数中可以调用固件 api :  CyU3PDmaChannelGetBuffer();来获得传输的数据。
           

本文使用的是slavefifo例程。

slavefifo例程的DMA 通道:

此例程实现数据传输需要创建两个DMA 通道:

— 一个是 PtoU DMA通道,其中 PIB_SOCKET_0 作为发送套接字,UIB_SOCKET_1 作为接收套接字。

— 另一个是 UtoP DMA通道,其中 PIB_SOCKET_3 作为发送接收套接字,UIB_SOCKET_1 作为发送套接字。

以上两个 DMA 通道的 DMA 缓存区大小为 512 还是 1024 取决于 SUB 连接是 USB2.0 还是USB3.0。DMA 缓存区的数量都是 2.

提供的slavefifo例程使用的 DMA 通道:

 对于回送传输、短数据包和 ZLP 传输,需要创建两个 DMA 通道:

  • 一个是 P2U 通道,其中 PIB_SOCKET_0 作为发送套接字,UIB_SOCKET_1 作为接收套接字。DMA 缓冲区大小为 512 还是 1024 取决于 USB 连接是 USB 2.0 还是 USB 3.0。DMA 缓冲区的数量为 2。
  • 另一个是 U2P 通道,其中 PIB_SOCKET_3 作为接收套接字,UIB_SOCKET_1 作为发送套接字。DMA 缓冲区大小为 512 还是 1024 取决于 USB 连接是 USB 2.0 还是 USB 3.0。DMA 缓冲区的数量为 2。
    UtoP 表示的是PC 到FPGA 的数据传输通道
       			PtoU 表示的是 FPGA 到PC 的数据传输通道
               

本文主要是实现

一、数据从 pc 到 fpga

1、pc 的数据通过EP1OUT端点 发送到usb控制器,控制器通过串口UART dma通道发送给 fpga,修改并使用了例程里的DMA 通道

二、数据从 fpga 到 pc

2、fpga 的数据1 通过 dma 通道发送给 pc, 本文使用自己创建的一个自动 dma 通道

3、fpga 的数据2 通过 gpif II 发送给控制器串口UART dma通道 发送给 pc,本文修改并使用了例程里的 UtoP dma通道

所以主要需要做的工作有:

1、修改UtoP通道相关内容,用来实现生产者(EP1 OUT)端点 到 消费者(串口TX) 的DMA通道(手动即可);并在上位机发送停止接收命令时,清除数据1 dma通道的缓存内容。

2、为数据1 创建 PtoU_1IN 自动dma通道

2、修改PtoU通道相关内容,用来实现数据2的传输 (生产者(串口RX)到 消费者(自己增加的端点EP2IN))

UtoP 表示的是PC 通过 EP1OUT 端点发送参数命令给控制器,控制器通过串口 TX 发给 FPGA 的数据传输通道
				PtoU——1IN 表示的是FPGA 数据1 到PC 的数据传输通道
				PtoU 表示的是FPGA 数据2 通过串口RX 发给PC的数据传输通道
           

注意点:

1、增加端点时,除了相关内容的增加(比如初始化,重置,销毁等),还特别注意描述符的更改,可以参考其他多端点的例程进行修改。

2、创建串口DMA 时,注意串口的初始化,相关的串口读写功能、dma要使能(流必须关闭),还要使例程使用的原串口功能失效。

3、如果修改了停止位,那么在调试的时候要注意在调试工具里停止位的修改。

4、dma 通道在手动和自动之间转换,只需要把dma通道的一些配置参数修改,并注意增减回调函数的配合使用即可。

继续阅读