USB小白学习之路(1) Cypress固件架构解析
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固件架构解析的更多相关文章
- USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)
转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...
- USB小白学习之路(12) Cy7c68013A固件之Slave FIFO(转)
Cy7c68013固件之Slave FIFO 转自:http://blog.csdn.net/zengshaoqing/article/details/53053539 选择SlaveFIFO传输方式 ...
- USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)
此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...
- USB小白学习之路(11) Cy7c68013A驱动电路设计注意事项(转)
Cy7c68013A驱动电路设计注意事项 转自:http://group.chinaaet.com/116/79029#0-tsina-1-71467-397232819ff9a47a7b7e80a4 ...
- USB小白学习之路(5) HID鼠标程序
HID鼠标程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...
- USB小白学习之路(4)HID键盘程序
HID键盘程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...
- USB小白学习之路(2)端点IN/OUT互换
端点2(out)和端点6(in)的out_in互换 注:这里的out和in都是以host为标准说的,out是host的out,在设备(Cy7c68013)这里其实是输入端口:in是host的in,在设 ...
- USB小白学习之路(3) 通过自定义请求存取外部RAM
通过自定义请求存取外部RAM 1. 实验简述 此实验是对自定义的供应商特殊命令(vendor specific command bRequest = 0xA3)进行解析,程序中的read me说明如下 ...
- USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析
注:这个TD_Init()只对EP6进行了配置,将其配置成为Bluk_In端口,而没有对EP2进行配置.这篇文章直接把寄存器的图片贴上来了,看起来比较杂.感兴趣的可以看下一篇文章,是转自CSDN,对E ...
随机推荐
- Java之异常的处理(throws)
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...
- [CTS2019]随机立方体(容斥+组合数学)
这题七次方做法显然,但由于我太菜了,想了一会发现也就只会这么多,而且别的毫无头绪.发现直接做不行,那么,容斥! f[i]为至少i个极值的方案,然后这里需要一些辅助变量,a[i]表示选出i个三维坐标均不 ...
- iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码
iOS精选源码 企业级开源项目,模仿艺龙旅行App 标签选择器--LeeTagView CSSegmentedControl常用的分段选择器,简单易用! 仿微信左滑删除 IOS左滑返回 输入框 iOS ...
- 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 ...
- springboot支付项目之springboot集成jpa
springboot集成spring-jpa 本文主要内容: 1:spring boot怎么集成spring-jpa以及第一个jpa查询示例 如jpa几个常用注解.lombok注解使用 2:怎么设置i ...
- git的命令操作指南
Git图形化界面我用的还可以,但是命令就不太会了,索性和大家一起学习下Git命令的用法...一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. fetch ...
- Centos-Apache服务(2)
title date tags layout CentOS6.5 Apache的增值服务 2018-09-03 Centos6.5服务器搭建 post 1.更改Apache的监听端口号 [root@l ...
- xml字符串转json字符串
XML字符串转JSON字符串网上的方法很多,这里主要推荐两种: 1.使用org.json包 jar地址:http://mvnrepository.com/artifact/org.json/json ...
- python学习笔记(1)python数据类型
一.数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要 ...
- [LC] 7. Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...