USB小白学习之路(3) 通过自定义请求存取外部RAM
通过自定义请求存取外部RAM
1. 实验简述
此实验是对自定义的供应商特殊命令(vendor specific command bRequest = 0xA3)进行解析,程序中的read me说明如下:
a3 load is 8051 firmware that can be used for uploading or downloading to EZ-USB RAM (internal or external). It implements the vendor specific command bRequest = 0xA3. The address to download/upload to/from is specified in the wValue field of the SETUP packet and the length of the transfer in the wLength field. The actual upload/download data is transferred during the DATA stage of the SETUP transfer. This firmware will function on all EZ-USB chips (EZ-USB, EZ-USB FX, FX2, FX2LP, FX1).
2. 实验操作
首先将a3load中的代码编译,下载到CY7C68013A中,在EZ_USB interface中的设置如图 1所示,其中Req处就是我们的自定义代码A3;Value处为要写入RAM的地址;Length处的8对应Hex Bytes中的数字的个数;

图 1 EZ_USB interface中的配置
点击图 1中的Vend Req后,就会向CY7C68013A中传输数据,传输的数据通过BUS Hound抓取如图 2所示:
从图 2中第一行的CTL(8 byte setup packet of a USB control transfer)可以看出,第二位a3即为我们自定义的代码;第一位的40代表host为输出(OUT);从第二行的OUT可以看出,这8位即为我们要写入RAM中的数据。
从图 3中第一行的CTL(8 byte setup packet of a USB control transfer)可以看出,第二位a3即为我们自定义的代码;第一位的C0代表host为输入(IN);从第二行的IN可以看出,这8位即为我们在上一步中写入RAM中的数据。

图 2 BUS Hound抓取数据传输(OUT)

图 3 BUS Hound抓取数据传输(IN)
如果我们把EZ_USB interface中的配置设为图 4所示,则得到的数据如图 5所示,这里不多解释,在后面的代码解析中会提到。

图 4 EZ_USB interface中的配置

图 5 BUS Hound抓取数据传输(IN)
3. 代码解析
令牌包使用的是端口0进行通信。
代码中的主要部分就是SetUpCommand_FX2() 函数,这个函数对上位机SetUp令牌包的数据解析,执行相应的操作。
函数中首先对控制传输的令牌包的第二位进行判断,如图 6中的①和图 7中的⑤所示,由图 8可以得出,图 6中的①判断CTL中的第二位是否为0xA3,图 7中的⑤判断CTL中的第二位是否为0xAC,然后进行相应的操作。
图 6中的②为获得上位机要写入RAM中的地址(CTL的第2位(L)和第3位(H))和数据长度(CTL的第6位(L)和第7位(H)),这里的这个“地址”和“数据长度”分别对应图 1中的“Value”和“Length”,
注意:Value中的要按照正常顺序书写,如果Value值为0x0001,则对应的地址为0x0001,上位机发送的时候,会自动调整顺序。
图 6中的③和图 7中的④表示SetUpCommand_FX2()函数检测host是输出(OUT)还是输入(IN),如果是输出(VR_DOWNLOAD),则将EP0BUF_FX2中的数据依次存入RAM中,如果是输入(VR_UPLOAD),则将RAM中的数据依次放入EP0BUF_FX2中,实现对RAM的读取。
图 7中的⑤是当检测到CTL中的第二位为0xAC时,需要作出的响应,这里是回一位数据1,这里的数据长度和数据值都可以由用户自己定义,实现自己的提示功能。读取时,按照图 4配置EZ_USB interface即可。

图 6 令牌包解析代码 a

图 7 令牌包解析代码 b

图 8 令牌包解析代码 c
USB小白学习之路(3) 通过自定义请求存取外部RAM的更多相关文章
- USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)
转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...
- USB小白学习之路(1) Cypress固件架构解析
Cypress固件架构彻底解析及USB枚举 1. RAM的区别 56pin或者100pin的cy7c68013A,只有内部RAM,不支持外部RAM 128pin的cy7c68013A在pin脚EA=0 ...
- 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小白学习之路(12) Cy7c68013A固件之Slave FIFO(转)
Cy7c68013固件之Slave FIFO 转自:http://blog.csdn.net/zengshaoqing/article/details/53053539 选择SlaveFIFO传输方式 ...
- USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析
注:这个TD_Init()只对EP6进行了配置,将其配置成为Bluk_In端口,而没有对EP2进行配置.这篇文章直接把寄存器的图片贴上来了,看起来比较杂.感兴趣的可以看下一篇文章,是转自CSDN,对E ...
随机推荐
- JQ和JS的等价代码
JQ与JS等价代码 选择器 //jquery var els = $(".el"); //原生方法 var els = document.querySelectorAll(&q ...
- Angular开发者指南(三)数据绑定
数据绑定 AngularJS应用程序中的数据绑定是模型和视图组件之间的数据的自动同步. AngularJS实现数据绑定的方式可以将模型视为应用程序中的单一来源. 视图是模型在任何时候的投影. 当模型更 ...
- flask 完成简单查询请求处理,及跨域
文章大纲 flask通用项目结构 flask 简介 主体代码逻辑 flask 跨域问题的处理 flask 日志 flask 微服务Flask-RESTful 启动服务命令 flask通用项目结构 | ...
- LeetCode No.121,122,123
No.121 MaxProfit 买卖股票的最佳时机 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你 ...
- linux系统用户管理(二)
5.组命令管理**组账户信息保存在/etc/group和/etc/gshadow两个文件中 /etc/group 组账户信息 [root@localhost ~]# head -2 /etc/grou ...
- Tript协议|伯尔尼公约|著作权|立法宗旨|自动保护|著作权集体管理|
知识产权 国际条约: Tript协议是国际性公约,<与贸易有关的知识产权协定>(英文:Agreement on Trade-Related Aspects of Intellectual ...
- 常用JS图片滚动(无缝、平滑、上下左右滚动)
常用JS图片滚动(无缝.平滑.上下左右滚动)代码大全 <head><-----></head><body> <!--向下滚动代码开始-->& ...
- java高并发之线程池
Java高并发之线程池详解 线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理. 例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对 ...
- 5-7 学生cpp成绩统计
完成“学生cpp成绩计算”之后,修改Person和Student类,各自增加两个无参构造函数. 仍以Person类为基础,建立一个派生类Teacher,增加以下成员数据: int ID;//教师工号 ...
- mysql操作命令梳理-grant授权和revoke回收权限
在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke:grant授权格式:grant 权限列表 o ...