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 ...
随机推荐
- day57-mysql-五种约束和sql语句逻辑执行顺序
二.sql语句逻辑执行顺序 () SELECT () DISTINCT <select_list> 去重复 () FROM <left_table> () <join_t ...
- springmvc register过程
福建SEO:首先在AbstractHandlerMethodMapping中,在afterPropertiesSet这个钩子函数中,先初始化handlerMethods. 在detectHandler ...
- 遥测数据导出sql
SELECT (select codename from CD_BGStation where CodeValue=StationCode)as 监测点位,case when [DETECTIONST ...
- [ZJOI2019]Minimax搜索(线段树+动态DP+树剖)
为什么我怎么看都只会10pts?再看还是只会50~70?只会O(n2(R-L+1))/O(nlogn(R-L+1))……一眼看动态DP可还是不会做…… 根节点的答案是叶子传上来的,所以对于L=R的数据 ...
- Linux基础篇四:常用命令
. 一个点表示是 当前目录 .. 两个点表示当前目录的上一层目录 . 与 .. 相对路径的一种表现形式 cd ~/test/ ~当前用户的家目录 绝对路径 注意: ...
- javaScript 面向对象 触发夫级构造函数
class Person{ constructor(name,age){ //直接写属性 this.name=name; this.age=age; console.log('a'); } showN ...
- 新开通blog
从今天开始我有blog了,,以后要经常总结一些自己接触的东西,提升自己
- 003.前端开发知识,前端基础CSS(2020-01-07)
一.CSS初识 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体.大小.对齐方式等).图片的外形(宽高.边框样式.边距等)以及版面的布局等外观显示样式. ...
- 正则表达式awk学习(三)
awk:格式化文本输出 gawk - pattern scanning and processing language awk:gawk的符号链接 基本用法:gawk [options] 'progr ...
- nginx+php+扩展件安装实践版
一.安装各种软件包 yum -y install wget git vim lrzsz unzip zip gcc make gd-devel bzip2 bzip2-devel libcurl li ...