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 ...
随机推荐
- 脚手架搭建vue项目
1.安装安装node.js: 2.cnpm install vue-cli -g (全局安装,需要注意的是我这里是用淘宝镜像安装的,没有安装cnpm的需要先去安装一下) 3.vue --version ...
- JavaScript 的数据结构与算法
1数组 1.1方法列表 数组的常用方法如下: concat: 链接两个或者更多数据,并返回结果. every: 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true. fi ...
- echarts 实现柱状图重叠而不是相互增加
1.引入echart 所需要的js和css,这不再引入 总量的数据是包含分量且大于等于分量 先上效果图: 当我们查看总量时,显示的是将分量的也包含里面,这样就不是叠加的数量了 2.直接上代码 (可复制 ...
- CNN Mini-Fashion数据集以及Pytorch初体验
下载Fasion-MNIST数据集 Fashion-MNIST是一个替代原始的MNIST手写数字数据集的另一个图像数据集. 它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供.其涵盖了来 ...
- ASA5505升级license
1.准备工作 首先先看下目前的license # show activation-key Serial Number: JMX1J364741 Running Permanent Activation ...
- Django学习之路由层
Django请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校验或在请 ...
- android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码
Android精选源码 精练的范围选择器,范围和单位可以自定义 自定义View做的小鸟游戏 android popwindow选择商品规格颜色尺寸效果源码 实现Android带有锯齿背景的优惠样式源码 ...
- [LC] 426. Convert Binary Search Tree to Sorted Doubly Linked List
Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right pointers ...
- 82)PHP,基本框架类步骤
framework.class.php 基本代码展示: <?php /** * 框架初始化功能类 */ class Framework { /** * 入口 * 里面的static和self是一 ...
- TPO3-2 Depletion of Ogallala Aquifer
Estimates indicate that the aquifer contains enough water to fill Lake Huron, but unfortunately, und ...