阅读:1867回复:12
问一个D12的简单问题!!!(20分)
呵呵,问一个问题:在周×的《固件编程和驱动开发》一书P16页上表2。2中,在USB设备请求格式(8个字节,例如获取设备描述符80 06 00 01 00 00 40 00)中第五六个字节的意义是什么啊??书上说是索引(DEVICE_REQUEST->wIndex),还说该字段取值根据不同的请求,以字节为单位来定义,我看的一头雾水,举个实例:在Get Status中索引一栏中有设备,接口和端点三列,那么他们各自的索引值又是多少呢???
|
|
沙发#
发布于:2004-08-30 15:01
果真很简单。
那是根据usb协议来的。 |
|
板凳#
发布于:2004-08-30 16:42
楼上的兄弟,回答问题可不是这样的啊!!我问的是这个索引值到底是如何确定的,USB协议1。1中该字段取值根据不同的请求,以字节为单位来定义又作何理解呢??设备,接口和端点他们又是怎么一回事呢???
|
|
地板#
发布于:2004-08-30 16:54
例子程序:
endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS); if (ControlData.DeviceRequest.wIndex & (unsigned char) USB_ENDPOINT_DIRECTION_MASK) D12_SetEndpointStatus(endp*2 + 1, 0); else D12_SetEndpointStatus(endp*2, 0); 答案: INDEX2个字节中,高字节保留 低字节8个bit中 D7表示direction D6、D5、D4保留 D3、D2、D1、D0表示Endpoint Number 与上0x03是取出D1、D0位,得知要获得哪个端点的状态 我学习USB刚刚起步,这是我在网上查到的资料,不知道是不是正确,欢迎大家讨论!!qq:44948016 email:crazyqp@163.com |
|
地下室#
发布于:2004-09-02 13:10
wIndex 为两个字节,由于usb传输协议:高字节在前、低字节在后,送数据<0xff;高字节自然保留。
在11个标准请求中,常常为0或语言ID;另外有时是端点索引值如(SET FEATHER标准请求),位7=0:控制端点|输出端点;=1:输入端点,你的理解正确。 |
|
|
5楼#
发布于:2004-09-02 14:39
to gsp:
1:由于usb传输协议:高字节在前、低字节在后??? 这个是在usb协议的第几章啊!!我怎么记得是低字节在前,高字节在后,例如12 01 00 01 DC 00 00 10 71 04 66 06 00 01 00 00 ,这是第一次读取设备描述符设备返回值,其实主机只对前八个自己感兴趣,其中71 04就是PHILIP公司的设备ID,而他的真正数值是0x0471,实际传输时经过SWAP(0x0471)变化而得。 2:语言ID是什么东西啊!!能具体说明一下吗?? 3:#define MSB(x) (((x)>>8&0xFF) #define LSB(x) ((x)&0xFF) 上面这两个语句的作用到底是干吗??MSB,LSB?? 呵呵,先给10分,谢谢你的指正,希望再接再厉,答对我可以多给一些分,也请所有路过的大侠帮忙 |
|
6楼#
发布于:2004-09-04 15:05
啊!!没人回答啊!!我自己顶!!再问一个问题(20分)
我在论坛上看了关于多路地址/数据总线的许多讨论,但是看来看去还是没有明白,太过抽象,来个具体的吧!! 在周×的书上写道:#define D12_COMMAND 0xff02 #define D12_DATA 0xff03 我的问题是:上面的0xff02,0xff03是不是可以用0x0011等代替啊,是不是只要是偶数地址或奇数地址就可以了啊??那个多路是不是可以理解为有多个D12芯片同时与mcu相连啊??D12的数据线不是8位嘛,为什么这里的地址是16位的啊?? 各位看过帖子的虾兄虾姐们,请帮帮忙吧!!如果觉得分不够,我还可以另开帖子送分,这里先谢谢了!!! |
|
7楼#
发布于:2004-09-06 17:12
在多总线的情况下,d12的A0脚保持稳定的电平(ZLG的做法是通过电阻接地),ALE锁存地址,以奇数地址访问d12表示发命令,反之是数据操作,所以用0x0011代替0xff03是可以的(地址不要冲突就好)。跟sram等器件连接,不就要16位地址了吗/
|
|
8楼#
发布于:2004-09-06 21:23
#define MSB(x) (((x)>>8&0xFF)
#define LSB(x) ((x)&0xFF) MSB(x)应该是只取前八位的意思, LSB(x)是取后八位 。 |
|
9楼#
发布于:2004-09-06 21:52
USB协议第9章,自己看.
|
|
|
10楼#
发布于:2004-09-07 12:14
#define MSB(x) (((x)>>8&0xFF) 这个定义我是知道了,我想了解的是为什么要这样处理??有什么作用吗?? |
|
11楼#
发布于:2004-09-07 12:20
在多总线的情况下,d12的A0脚保持稳定的电平(ZLG的做法是通过电阻接地),ALE锁存地址,以奇数地址访问d12表示发命令,反之是数据操作,所以用0x0011代替0xff03是可以的(地址不要冲突就好)。跟sram等器件连接,不就要16位地址了吗/ 呵呵,谢谢这位兄弟,你能告诉我在单片机读写U盘时,那些地址已经被占用了,如果使用这些地址会引起冲突??或者可不可以告诉我具体参阅那些资料啊?? to metalwing 第九章的东西可不少啊!!能不能再具体指明一下在那一节啊,可能我看的时候错过了。谢谢先 |
|
12楼#
发布于:2004-09-07 14:21
9.3~9.7
|
|
|