Cypress固件架构彻底解析及USB枚举

1. RAM的区别

56pin或者100pin的cy7c68013A,只有内部RAM,不支持外部RAM

128pin的cy7c68013A在pin脚EA=0时为内部RAM,pin脚EA=1时,为外部RAM

2. USB描述符

DESR.A51中放的是USB描述符表,包括:

1、设备描述符

2、设备限定描述符、

3、配置描述符

4、接口描述符

5、端点描述符

6、字符串描述符

3. FW.C文件的解析

1、TD_init()初始化自己的配置

2、判断设备描述符位于内部RAM区还是外部RAM区,如果位于外部RAM区,则移到内部RAM区中去

3、初始状态设置

4、进入主循环while(TRUE)

*****************************************************************

5、if(GotSUD)等待SETUP令牌数据的到来,令牌数据到来时,在中断中将GotSUD置位,中断函数为ISR_Sudav(void),GotSUD为令牌包标志

6、SetupCommand(),处理SETUP的事务全在里面,用户可以自定义

7、GotSUD = FALSE 处理完后清零Setup标志

*****************************************************************

8、if(Sleep),Sleep:USB的休眠标志,USB休眠后产生中断,在中断函数ISR_Susp(void)中将Sleep标志置位。

9、if(TD_Suspend()),在进入休眠之前加一个返回值为BOOL的函数,用户可以在此函数中进行相关操作

10、Sleep = FALSE 清Sleep标志

11、EZUSB_Susp();置处理器于空闲状态

12、while(!Rwuen && EZUSB_EXTWAKEUP());如果唤醒

13、EXUSB_Resume();从空闲状态恢复

14、TD_Resume();与9中的TD_Suspend()相呼应,在唤醒之后,用户可以在此函数中做相关操作

这里需要注意的是,在空闲模式中,处理器的时钟是没有的,有三种方法可以使处理器跳出空闲模式①WAKEUP pin;②USB总线唤醒;③WU2 pin

*****************************************************************

在此处插入了博主对《USB原理与工程实践》这本书的理解

详细介绍了从插入USB设备后的“枚举”以及“重枚举”过程,它们的动作如表 3-1所示

表 3-1 枚举和重枚举的对比

处理设备请求

Renum值

8051动作

枚举

EZUSB核心

Renum=0

置Renum=1

重枚举

8051

Renum=1

重置Renum=0

“EZUSB”的核心只能处理端点0的请求。即使加载了“8051”的程序,也可以设置Renum=0,这样让“EZUSB核心”处理端点0的设备请求,而让“8051”完成具体的USB数据传输,这样做会大大简化8051固件代码。

枚举和重枚举的过程是自动的。

#ifndef NO_RENUM

if(!(USBCS & bmRENUM))          //如果Renum位为0,则进行重枚举

{

EZUSB_Discon(TRUE);     //重枚举

}

#endif

4. USB固件架构彻底解析

1、开发工具解析

2、以例程bulkloop进行讲解

3、fw.c为USB的固件根本,USB的协议方面的通信在此完成,新手尽量不要在此改动

4、bulkloop.c为用户自己的代码书写文件,自己的代码在这里书写,Cypress已经搭好了框架

5、由于中断不够用,Cypress引入了自动向量的概念,软中断,扩展中断数量。

6、特别是对于接收数据,一般都在中断中完成相应处理。中断中不要进行复杂的操作,复杂操作可以放在TD_PULL()函数中进行。

7、中断的结尾要让中断复位,允许下一次中断。

8、dscr.a51是USB描述符文件,包括各种描述符,新手不要改动就对了^o^

9、几个文件的说明

fx2.h:预定于宏及函数声明

fx2regs.h:68013寄存器地址定义

syncdly.h:同步延时,经常调用的SYNCDELAY就是在这里定义

ntrins.h:C51一些数据类型及函数定义

USB小白学习之路(1) Cypress固件架构解析的更多相关文章

  1. USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)

    转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...

  2. USB小白学习之路(12) Cy7c68013A固件之Slave FIFO(转)

    Cy7c68013固件之Slave FIFO 转自:http://blog.csdn.net/zengshaoqing/article/details/53053539 选择SlaveFIFO传输方式 ...

  3. USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)

    此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...

  4. USB小白学习之路(11) Cy7c68013A驱动电路设计注意事项(转)

    Cy7c68013A驱动电路设计注意事项 转自:http://group.chinaaet.com/116/79029#0-tsina-1-71467-397232819ff9a47a7b7e80a4 ...

  5. USB小白学习之路(5) HID鼠标程序

    HID鼠标程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...

  6. USB小白学习之路(4)HID键盘程序

    HID键盘程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...

  7. USB小白学习之路(2)端点IN/OUT互换

    端点2(out)和端点6(in)的out_in互换 注:这里的out和in都是以host为标准说的,out是host的out,在设备(Cy7c68013)这里其实是输入端口:in是host的in,在设 ...

  8. USB小白学习之路(3) 通过自定义请求存取外部RAM

    通过自定义请求存取外部RAM 1. 实验简述 此实验是对自定义的供应商特殊命令(vendor specific command bRequest = 0xA3)进行解析,程序中的read me说明如下 ...

  9. USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

    注:这个TD_Init()只对EP6进行了配置,将其配置成为Bluk_In端口,而没有对EP2进行配置.这篇文章直接把寄存器的图片贴上来了,看起来比较杂.感兴趣的可以看下一篇文章,是转自CSDN,对E ...

随机推荐

  1. Java之异常的处理(throws)

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...

  2. [CTS2019]随机立方体(容斥+组合数学)

    这题七次方做法显然,但由于我太菜了,想了一会发现也就只会这么多,而且别的毫无头绪.发现直接做不行,那么,容斥! f[i]为至少i个极值的方案,然后这里需要一些辅助变量,a[i]表示选出i个三维坐标均不 ...

  3. iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码

    iOS精选源码 企业级开源项目,模仿艺龙旅行App 标签选择器--LeeTagView CSSegmentedControl常用的分段选择器,简单易用! 仿微信左滑删除 IOS左滑返回 输入框 iOS ...

  4. PAT甲级——1036 Boys vs Girls

    1036 Boys vs Girls This time you are asked to tell the difference between the lowest grade of all th ...

  5. springboot支付项目之springboot集成jpa

    springboot集成spring-jpa 本文主要内容: 1:spring boot怎么集成spring-jpa以及第一个jpa查询示例 如jpa几个常用注解.lombok注解使用 2:怎么设置i ...

  6. git的命令操作指南

    Git图形化界面我用的还可以,但是命令就不太会了,索性和大家一起学习下Git命令的用法...一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. fetch ...

  7. Centos-Apache服务(2)

    title date tags layout CentOS6.5 Apache的增值服务 2018-09-03 Centos6.5服务器搭建 post 1.更改Apache的监听端口号 [root@l ...

  8. xml字符串转json字符串

    XML字符串转JSON字符串网上的方法很多,这里主要推荐两种: 1.使用org.json包 jar地址:http://mvnrepository.com/artifact/org.json/json ...

  9. python学习笔记(1)python数据类型

    一.数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要 ...

  10. [LC] 7. Reverse Integer

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...