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 ...
随机推荐
- LeetCode No.148,149,150
No.148 SortList 排序链表 题目 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 输入: 4->2->1->3 输出: 1->2 ...
- C# 使用 HttpPost 请求调用 WebService (转)
转自 https://www.cnblogs.com/Brambling/p/7266482.html 之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最 ...
- Qt 使用QGraphicsPixmapItem、QGraphicsScene、QMatrix 的QGraphicsView的显示,缩放
.h QGraphicsScene *scene; QGraphicsPixmapItem *theFrame; QMatrix matrix; .cpp MainWindow::MainWindow ...
- 统计学中比较重要的分布及python中使用方法
比较重要的四种分布:正态分布.卡方分布.F分布.t分布 卡方分布概率密度曲线 t分布概率密度曲线 F分布概率密度曲线 参考资料: 统计学中四个概率分布 重要抽样分布
- SaltStack schedule功能
1.确保计划中没有作业 salt.states.schedule.absent(name, **kwargs) 2.确保在计划中禁用的作业 salt.states.schedule.disabled( ...
- Java快速输入输出
一.StreamTokenizer实现快速输入 需要的jar包 import java.io.BufferedReader;import java.io.IOException;import java ...
- S5P4418开发板android源码下uboot和内核缺省文件的配置
uboot 需要配置缺省文件,进入解压的源码目录 android,然后进入 u-boot 目录,如下图所示.如上图所示,如果是 1G 核心板,则使用“cp nsih-1G16b-4418.txt ns ...
- django,模板继承常用标签和规则
一.定义基础模板 在html内容中定义多个block块,block由子模板引用同名block块,来决定是否替换这些部分{% block title %}一些内容,这里可不填{% endblock %} ...
- Linux基础篇四:常用命令
. 一个点表示是 当前目录 .. 两个点表示当前目录的上一层目录 . 与 .. 相对路径的一种表现形式 cd ~/test/ ~当前用户的家目录 绝对路径 注意: ...
- 1)PHP,数据库操作类网址
(1)脚本之家 http://www.jb51.net/article/94347.htm (2)一个博客 http://www.cnblogs.com/lvchenfeng/p/5003629.ht ...