原创 USB3.0芯片终于出来了_LZ3014 USB3.0开发板24(cyfxbulklpauto例程分析)

2011-12-27 13:46 2660 8 8 分类: MCU/ 嵌入式

  这个帖子是测试例程cyfxbulklpauto的,工程在C:\Cypress\FX3 SDK\firmware\basic_examples\cyfxbulklpauto下,见下图。(这个例子是我详细分析的第三个例程,也是最后一个例程。主要目的是通过详细的编绎、下载、调试等过程,让广大网友对CYUSB3014的开发有一个直观的认识,走进USB3.0开发的大世界。第四个例程就不会这么详细了,有些基础的内容会一笔带过。)

cyfxbulklpauto例程分析1.jpg

  用ECLIPSE开发环境导入cyfxbulklpauto例程,编绎生成IMG文件,请查看以前的帖子。
  用控制面板将前一个过程生成的IMG文件,下载到CYUSB3014的RAM中,也请查看以前的帖子。

一、先看程序测试。
1、发送数据过程
  用控制面板下载IMG文件后,按下图进行操作,

 

cyfxbulklpauto例程分析2.jpg

  第1步是选择块输出端点;第2步是输入要发送的字符,这里输入1;第3步是单击发送按钮“Transfer”;第4是显示信息如下:
    BULK OUT transfer
    0000 31
    BULK OUT transfer completed
  提示数据发送成功。重复同样的操作,只是第2步输入的字符不同,依次是2,再是3,,,最好一次是8,共计发送8个字符,发送完8个字符后,所有信息如上个图片中的标记4。


2、接收数据过程
  用控制面板操作如下,

cyfxbulklpauto例程分析3.jpg

第1步是选择块输入端点;第2步是单击“Transfer Data-IN”按钮接收数据,第3步就是察看接收到的数据。以上过程可以重复8次,这与上一个过程共发送8个数据相对应。当然,你也可以发送小于8批数据,每批数据最多可以是1024个,具体可以在程序分析里面得到证据。

二、程序分析
  这是一个块循环传输数据的例子,就是常见的Bulkloop,用的是自动(AUTO)传输的方式,CPU在传输过程中,并不参与数据的读取,因此,自动传输方式能获得较高的传输率。
  关于固件程序的框架结构,这里不作分析,可以查看我以前的帖子。
  程序主要部分是创建一个自动传输的DMA通道,主要的程序代码如下,
            /* Create a DMA Auto Channel between two sockets of the U port */
            /* DMA size is set above based on the USB Bus Speed */
            dmaBulkLpConfig.count = CY_FX_BULKLP_DMA_BUF_COUNT;
            dmaBulkLpConfig.prodSckId = (CyU3PDmaSocketId_t)(CY_U3P_UIB_SOCKET_PROD_0 |      CY_FX_EP_PRODUCER_SOCKET);
            dmaBulkLpConfig.consSckId = (CyU3PDmaSocketId_t)(CY_U3P_UIB_SOCKET_CONS_0 |      CY_FX_EP_CONSUMER_SOCKET);
            dmaBulkLpConfig.dmaMode = CY_U3P_DMA_MODE_BYTE;
            dmaBulkLpConfig.notification = 0;
            dmaBulkLpConfig.cb = NULL;
            dmaBulkLpConfig.prodHeader = 0;
            dmaBulkLpConfig.prodFooter = 0;
            dmaBulkLpConfig.consHeader = 0;
            dmaBulkLpConfig.prodAvailCount = 0;

            /* Create the channel */
            apiRetStatus = CyU3PDmaChannelCreate (&glChHandleBulkLp,
                                                  CY_U3P_DMA_TYPE_AUTO,
                                                  &dmaBulkLpConfig);
  其中dmaBulkLpConfig是一个CyU3PDmaChannelConfig_t类型的结构体,关于CyU3PDmaChannelConfig_t类型的定义只可以到文件cyu3dma.h中看个仔细,作用就是配置DMA通道的各种相关信息,如DMA通道的缓冲区的大小、缓冲区的数量、The producer socket ID、The consumer socket ID等作息。
  其中CY_U3P_UIB_SOCKET_PROD_0代表U-port input socket number 0;
  其中CY_U3P_UIB_SOCKET_CONS_0代表U-port output socket number 0。上面两项也就是说数据从USB口输入,马上又传输给USB口,完成了Bulkloop功能。


    这个例子使用的USB3.0开发板是LZ3014 USB3.0开发板,是官方的第一代开发板,官方的第二代开发板正在生产中,年前就应该能够调试完毕,有兴趣的朋友可以查看我的淘宝。 

 

 

更多文章请访问:

我的博客1:http://bbs.ednchina.com/BLOG_liangziusb_440752.HTM

我的博客2:   http://www.eefocus.com/liangziusb/blog/

EDN小组http://group.ednchina.com/GROUP_GRO_14600_3466.HTM

LZ3684 USB2.0开发板(CY7C68013A), 请访问我的淘宝http://shop64171919.taobao.com

LZ3014 USB3.0开发板(CYUSB3014),请访问我的淘宝http://shop64171919.taobao.com

实体店铺:北京新中发电子市场2557号

 

良子.2011年

沈阳市东陵区白塔街龙盛家园

欢迎交流:liangziusb@163.com

QQ:2687652834

文章评论0条评论)

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