heshen
驱动老牛
驱动老牛
  • 注册日期2002-04-19
  • 最后登录2014-01-26
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2485回复:13

usb设备的地址和端口(help!)

楼主#
更多 发布于:2002-05-21 09:57
每一个usb设备都有唯一的地址,这个地址是如何分配的,存放在什么地方,主机要对设备操作时,如何指定这个设备?如何选择端口?在什么地方选择?在接受端有是如何识别端口数的?
迷惑中……

最新喜欢:

ytain37ytain3...
不要啊!
spin
驱动小牛
驱动小牛
  • 注册日期2001-04-17
  • 最后登录2015-10-27
  • 粉丝1
  • 关注0
  • 积分46分
  • 威望354点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-21 10:13
地址是由host controler分配的
cqzhl
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2007-03-21
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-21 10:57
可以按照以下步骤配置USB设备
1。读取设备描述符
2。读取配置描述符
3。读取接口描述符
每一个接口里都包含一组端点。从而可以得到每个端点的地址、传输类型、和最大长度
4。根据需要配置设备
可以看DDK里ISOUSB的例子
heshen
驱动老牛
驱动老牛
  • 注册日期2002-04-19
  • 最后登录2014-01-26
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-21 20:05
很感谢!但是我想知道主机从那里读去这些描述符的?
这些描述符存放在什么地方?
???
如果是设计从设备,那么在什么地方设置这些值?
不要啊!
cqzhl
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2007-03-21
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-23 19:37
配置信息在设备里。读取的具体步骤如下:


1。读取配置描述符

PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor= NULL; 配置描述符。
siz=sizeof(USB_DEVICE_DESCRIPTOR)+nByte;//读出的描述符放在ConfigurationDescriptor中,而紧跟其后则存放
接口信息。nByte 的娶值与该配置的接口数有关。在不知道接口数的情况下,可以给一个足够大的数,
具体处理办法可以参照ISOUSB的例子。

ConfigurationDescriptor = ExAllocatePool(NonPagedPool,siz);
UsbBuildGetDescriptorRequest(urb,
                             (USHORT) siz,
                             USB_CONFIGURATION_DESCRIPTOR,
                             0,
    0, //要读取的配置号
    ConfigurationDescriptor,NULL,siz, NULL);
生成读取配置描述符URB,urb为生成的指针。
soUsb_CallUSBD(DeviceObject, urb);  提交请求。

USB_CONFIGURATION_DESCRIPTOR主要有以下几个域:
UCHAR bNumInterfaces :该配置的接口数。
UCHAR iConfiguration :该配置的配置号。每个设备可以有几个不同的配置,配置数可以从设备描述符
中获得。


2。读取接口描述符:
urb = USBD_CreateConfigurationRequest(ConfigurationDescriptor, &siz);

此时,urb中的UrbSelectConfiguration域便有效了。
UrbSelectConfiguration 中的Interface为一个指针。指向了一个类型为USBD_INTERFACE_INFORMATION
的数组。该数组的长度可变,具体由接口数决定。

USBD_INTERFACE_INFORMATION主要有以下几个域:
NumberOfPipes 该接口的管道数
Pipes         该接口的管道描述符的头指针。指向一组可变长度的管道描述符。

每个管道描述符便包含了每个端点的地址,传输类型,和最大传输长度。

3。对设备进行配置
生成配置URB(比如按我们刚才读到的配置描述符进行配置)
UsbBuildSelectConfigurationRequest(urb,
                                  (USHORT) siz,
                                  ConfigurationDescriptor);
IsoUsb_CallUSBD(DeviceObject, urb);










如何把配置信息写入从设备,我也不知道,等你知道了,告诉我一声。希望度交流,共同提高。

[编辑 -  5/23/02 by  cqzhl]
dinolos
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2004-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-23 19:46
描述符应该是编写固件程序时写进固件里面的,固件程序检查上位机的请求发出相应的描述符,也就是说是你写的。设备地址由上位机送下来,再由单片机写进usb芯片。
菜鸟不怕大虾! 菜鸟也要做大虾!
hualr9623
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2002-06-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-23 20:58
dinolos 你能再详细一点吗,我现在要自己设计usb芯片,但苦于不知该如何使硬件能和主机通信,我的理解是描述符是放在usb芯片的一组寄存器中,而后发送给主机的一组寄存器,但发送到主机的哪里,是怎么决定的?
spin
驱动小牛
驱动小牛
  • 注册日期2001-04-17
  • 最后登录2015-10-27
  • 粉丝1
  • 关注0
  • 积分46分
  • 威望354点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-24 07:00
硬件是在甚麽时间和pc交互地址信息的 ?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-24 09:07
硬件是在甚麽时间和pc交互地址信息的 ?

是在USBD完成设备描述符读取之后,由驱动程序通过缺省管道配置的。在此之前,只有Endpoint 0可用。设备端应该在接到主机传送的
配置请求返回相应的数据,具体步骤如cqzhl所写。以下是设备固件的一个配置数据例子:
config_descriptor[] = {
                // Configuration descriptor
0x09, 0x02, 0x27, 0x00, 0x01, 0x01, 0x00, 0x80, 0xfa,
                                                      
0x09, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // interface 0, alt 0
0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x01, //bulk-in
0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x01, //bulk-out
0x07, 0x05, 0x83, 0x03, 0x08, 0x00, 0x01, //interrupt in
};
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
Levis75
驱动小牛
驱动小牛
  • 注册日期2001-08-06
  • 最后登录2006-06-28
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望7点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-24 09:38
一点补充,我刚写完一个usb device driver,the following is the sample code of dirver:
unsigned char DEV_DESC[] =
{            
     0x12,              /*length of this desc.          */
0x01,              /*DEVICE descriptor             */
0x00,0x01,         /*spec rev level(BCD)(0x100)    */
0x00,              /*device class                  */
0x00,              /*device subclass               */
0x00,              /*device protocol               */  
       0x08,              /*max packet size               */  
0x51,0x04,         /*National\'s vendor ID          */
0xC3,0x81,         /*National\'s product ID */  
0x00,0x01,         /*National\'s revision ID */  
0x01,              /*index of manuf. string */  
0x02,              /*index of prod.  string */  
0,                 /*index of ser. # string */  
0x01               /*number of configs. */
};        
在加上楼上的  config_descriptor[] 和
STR_DESC  
Host 通过contral pipe 来读取device\'s configurations.
hualr9623
驱动牛犊
驱动牛犊
  • 注册日期2002-04-02
  • 最后登录2002-06-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-25 15:18
请问硬件插上主机后,就由主机发送请求,而后设备只要发送设备描述符,其后的工作都由固件驱动程序完成吗?
谁有固件驱程ma?
麻烦寄给我,万分感谢!
e-mail:hualr9623@163.com
halley
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-27 09:07
很感谢!但是我想知道主机从那里读去这些描述符的?
这些描述符存放在什么地方?
???
如果是设计从设备,那么在什么地方设置这些值?


主机是从驱动程序里读取这些描述符的.

这些描述符是存放在usb设备中的!由驱动程序来读取.

我不清楚从设备方面的问题!真的不清楚!
Levis75
驱动小牛
驱动小牛
  • 注册日期2001-08-06
  • 最后登录2006-06-28
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望7点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-27 09:47
硬件插上主机后,主机发送请求,而后设备根据请求发送设备描述符(Device descripter,Configuration descripter and String descripter),配置完成后,开始传数据
michaelwangc
驱动牛犊
驱动牛犊
  • 注册日期2002-04-09
  • 最后登录2002-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-05-27 13:04
这位兄弟,俺也做usb固件方面的配置,希望我们多交流,若你有
固件的配置,请给我寄一份,谢谢!
E-mail:a-chao@sohu.com
游客

返回顶部