wildluo
驱动牛犊
驱动牛犊
  • 注册日期2003-07-10
  • 最后登录2003-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1543回复:2

USB开发中遇到的一些问题

楼主#
更多 发布于:2003-09-14 19:51
问题1:
硬件环境为TI5402 DSP(16位)+PDIUSBD12。D12有两个端点,分别设定为中断传输和批传输。
驱动程序是用DRIVERWORKS自动生成的,添加了端点1端点2,属性指定与下面的描述符一致。
下面是我的所有描述符,其中双字节的数据由于处理器的原因拆成了两个独立的单字节数据。
code USB_DEVICE_DESCRIPTOR DeviceDescr =
{
sizeof(USB_DEVICE_DESCRIPTOR), // 描述表大小 (18 bytes)
    USB_DEVICE_DESCRIPTOR_TYPE, // 设备描述表类型01    //SWAP(0x0100),
    0x0,0x01,// 兼容设备版本号(BCD码)    
    USB_CLASS_CODE_TEST_CLASS_DEVICE,//设备类码0xdc
    0, // 子类码
    0,// 协议码
EP0_PACKET_SIZE,//端点0最大包大小16
//SWAP(0x0471),
0x71,0x04,//厂商ID
//SWAP(0x0222),
0x22,0x02,// 产品ID
//SWAP(0x0100),
0x0,0x01,// 设备发行号(BCD码)
    0, //厂商信息字符串索引
    0, // 产品信息字符串索引
    0,// 设备序列号字符串索引(不支持设为0)
    1 // 配置数
};
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    sizeof(USB_CONFIGURATION_DESCRIPTOR),// 配置描述表长度46
    USB_CONFIGURATION_DESCRIPTOR_TYPE,// 配置描述表类型02
    //SWAP(CONFIG_DESCRIPTOR_LENGTH),
    // 配置描述表及附带表长度
    CONFIG_DESCRIPTOR_LENGTH&0xFF,(CONFIG_DESCRIPTOR_LENGTH>>8)&0xFF,
    //42,0,
1,// 接口配置数
1,// 配置描述表标识
    0,// 配置描述表字符串描述表索引
0xa0,// 配置属性,原来是0x60
0x64// 总线供电最大值(*2mA),原值为0x1
};
code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),// 接口描述表长度(9)
    USB_INTERFACE_DESCRIPTOR_TYPE,// 接口描述表类型04
    0,// 接口数(0)
    0,// 轮寻设置(0 号端点)
NUM_ENDPOINTS,// 端点数 (4)
//2,
USB_CLASS_CODE_TEST_CLASS_DEVICE,// 接口类属0xdc
USB_SUBCLASS_CODE_TEST_CLASS_D12,// 子类码0xa0
USB_PROTOCOL_CODE_TEST_CLASS_D12,// 协议码0xb0
0// 接口字符串描述表索引(不支持)
};
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR),// 端点描述表长度(7)
USB_ENDPOINT_DESCRIPTOR_TYPE,// 端点描述表类型05
0x81,// IN 端点(1)
USB_ENDPOINT_TYPE_INTERRUPT,// 传输模式3(0 控制、1 同步、2 批、3 中断传输)
//SWAP(EP1_PACKET_SIZE),
EP1_PACKET_SIZE&0xff,(EP1_PACKET_SIZE>>8)&0xff,// 最大包大小(16)
//EP1_PACKET_SIZE,
//0x10,
0x64// 轮寻时间,
};

code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x1,
USB_ENDPOINT_TYPE_INTERRUPT,
//SWAP(EP1_PACKET_SIZE),
EP1_PACKET_SIZE&0xff,(EP1_PACKET_SIZE>>8)&0xff,
//0x10,
//EP1_PACKET_SIZE,
0x64//
};

code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x82,
USB_ENDPOINT_TYPE_BULK,
//SWAP(EP2_PACKET_SIZE),
EP2_PACKET_SIZE&0xff,(EP2_PACKET_SIZE>>8)&0xff,
//0x10,
//EP2_PACKET_SIZE,
0x64//
};

code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x2,
USB_ENDPOINT_TYPE_BULK,
//SWAP(EP2_PACKET_SIZE),
EP2_PACKET_SIZE&0xff,(EP2_PACKET_SIZE>>8)&0xff,
//0x10,
//EP2_PACKET_SIZE,
0x64
};
我收到的主机的标准请求如下:(请求数据的后三个值是高低位颠倒的)
80 6 100 0 40
Suspend change!
Request Type = Standard, Request = GET_DESCRIPTOR.
Bus reset!
Bus reset!
0 5 2 0 0
Request Type = Standard, Request = SET_ADDRESS.
80 6 100 0 12
Request Type = Standard, Request = GET_DESCRIPTOR.
80 6 200 0 9
Request Type = Standard, Request = GET_DESCRIPTOR.
80 6 200 0 ff
Request Type = Standard, Request = GET_DESCRIPTOR.
80 6 100 0 12
Request Type = Standard, Request = GET_DESCRIPTOR.
80 6 200 0 400
Request Type = Standard, Request = GET_DESCRIPTOR.
0 9 1 0 0
Request Type = Standard, Request = SET_CONFIGURATION.
configure device done
Suspend change!
(据别人的经验,好像不会有第6和7个请求,为何我的会出现这两个请求,是不是驱动程序发出的?)
问题1:
枚举的时候经常出现“超出了USB控制器带宽”的错误
但这种情况并不是每次都出现。
出现这种情况后,一般在“拔出或弹出硬件”工具中先停止设备。
然后再拔出USB设备,再重新连接一次,就不会有这个错了。

问题2:
当没有出现问题1提到的错误时,我用USBVIEW看到端点描述符中最大包大小一项全为0,
而其他项都与上面的设定相同。
我怀疑是USBVIEW的问题(USBVIEW.exe是通过DDK中的例程编译得到的),我的怀疑是否有根据呢?

问题3:
我的驱动程序实际上是按“10分钟生成USB驱动“那篇文章做的。
可是执行驱程测试程序test_XXX.exe r 5或test_XXX.exe w 5时都会蓝屏DUMP
而测试IOCONTROL函数,即test_XXX.exe i n时,则不会DUMP,但好像也不正确。
请问各位,执行OICONTROL函数时,设备固件程序应该有什么反应?
是不是会收到一个与标准请求类似的8字节的数据包。
驱程执行读写操作时固件又该如何反应?是不是进入主端点(端点2)的接收发送处理函数。

暂时先问这些,谢谢各位的解答。
致礼!

最新喜欢:

abei11abei11
wildluo
驱动牛犊
驱动牛犊
  • 注册日期2003-07-10
  • 最后登录2003-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-14 21:54
哪位好心人帮忙看看吧
usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-16 16:10
D12就没有学明白
驱网是你们的,也是我们的,归根结底还是大家的!
游客

返回顶部