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. IDEA中的常用插件安装以及使用的介绍

    IDEA中的lombok插件安装以及各注解的详细介绍 Grep Console 当你密密麻麻一大片的日志,去查看起来,很容易看花眼:这个工具正好解决了这个痛点,可以说它就是 IDEA 自带 Conso ...

  2. 14 微服务电商【黑马乐优商城】:day04-项目搭建(二)

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  3. 两种大小写比较|elif|

    name = ['alle','mike','tom','jerry','alice','hebe'] for i in name: if i == 'tom': print 'get!' #get! ...

  4. Flume(三) —— 断点续传 与 事务

    断点续传 # Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe / ...

  5. 【shell】概述

    功能简介 批量自动初始化系统(update,软件安装,时区设置,安全策略...) 批量自动部署软件(LAMP,LNMP,Nginx,LVS,Tomcat) 管理应用程序(KVM,集群管理扩容,MySQ ...

  6. python_4

    1.迭代器:通过iter()方法获得了list的迭代对象,然后就可以通过next()方法来访问list中的元素了,当容器中没有可访问元素时,会抛出StopIteration异常终止迭代器 data = ...

  7. 关于guava实现线程池

    private ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCac ...

  8. 0x06 - Nginx 负载均衡会话保持

    Nginx 负载均衡会话保持 背景 负载均衡时,如果APP需要保持特定状态的时候,就要保证同一用户的 session 会被分配到同一台服务器上. 实现方案 使用cookie 将用户的 session ...

  9. 一文带你了解BOM基本知识

    1.1. BOM和DOM的区别DOM就是一套操作HTML标签的API(接口/方法/属性) BOM就是一套操作浏览器的API(接口/方法/属性) 1.2. BOM中常见的对象window: 代表整个浏览 ...

  10. Oracle-PL/SQL语句

    1.PL/SQL 2.存储过程,函数 3.java中调用存储过程和函数 4.触发器 1 PL/SQL 1.1什么是PL/SQL? n  PL:Process Language n  PL/SQL是or ...