happlylife
驱动牛犊
驱动牛犊
  • 注册日期2007-11-09
  • 最后登录2008-02-03
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1141回复:1

关于D12 Endp1的问题

楼主#
更多 发布于:2008-01-29 23:34
      我做了一个USB键盘,现在枚举通过了,在XP上可以看到"USB 人体学输入输出设备",现在有个问题就是键盘不可以工作,经过我的观察发现,原来根本就产生不了IN中断。我用的是Endp1作为中断IN和中断OUT端点。
      我用BusHound附带的BusCommder工具,向设备发送命令,通过端点0 Control In/Out 发送获得设备描述符,配置描述符,字符串描述符命令都可以接收到设备返回的内容,我用端点1的OUT 端点发送数据到设备,也可以成功。但是我要是用端点1的IN 端点 想要让设备给主机发送数据,却不能通过,这时BusCommand就不可以使用了,像死了一样。并且Goodlink灯也没有动静,其他每次发送命令都可以看到灯有闪烁的现象。定点调试也反应了同样的问题,可以看到其他情况都可以进入对应的中断,就是IN不可以进入中断。我想知道为什么会出现IN端点不可以使用呢?
我把我的描述符发过来大家看看有没有问题。我用的是凌阳16位单片机,是小端模式,和51有点不一样。
const USB_DEVICE_DESCRIPTOR DeviceDescr =
{
    sizeof(USB_DEVICE_DESCRIPTOR),
    USB_DEVICE_DESCRIPTOR_TYPE,
    0x00010000,
    0,    //USB分配的类代码    (已更改用于HID设备)
    0,    //USB分配的子类代码
    0,    //USB分配的协议代码
    EP0_PACKET_SIZE,
    0x00040071,    //idVendor
    0x00060066,    //idProduct
    0x00010000,    //bcdDevce
    0,//1,            //iManufactor
    0,//2,            //iProduct
    0,//3,            //iSerialNumber
    1            //bNumConfigurations
};

// 配置描述符
const USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    sizeof(USB_CONFIGURATION_DESCRIPTOR),    //09
    USB_CONFIGURATION_DESCRIPTOR_TYPE,        //02
    CONFIG_DESCRIPTOR_LENGTH,                //29
    1,                                        //0x0001
    1,                                        //1
    0,                                        //0
    0xa0,    //总线供电,支持远程唤醒            //0xa0
    0xc8    //400mA                            //0xc8
};

// 接口描述符
const USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),        //09
    USB_INTERFACE_DESCRIPTOR_TYPE,            //04
    0,                                        //00
    0,                                        //00
    NUM_ENDPOINTS,                            //02
    0x03,//原来是USB_CLASS_CODE_TEST_CLASS_DEVICE,
    0x01,//原来是USB_SUBCLASS_CODE_TEST_CLASS_D12,
    0x01,//原来是USB_PROTOCOL_CODE_TEST_CLASS_D12,
    0
};
//HID描述符
const USB_HID_DESCRIPTOR HidDescr=
{
    sizeof(USB_HID_DESCRIPTOR),                //09
    0x21,        //HID描述符
    0x00010010,    //HID版本号
    0x21,        //国家代码
    0x01,        //随后的描述符数,这里只有一个报告描述符
    0x22,        //随后的描述符类型,这里为报表描述符
    (unsigned long int)sizeof(ReportDescr)        //报表描述符的长度
};
// 端点1输入描述符
const USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
    sizeof(USB_ENDPOINT_DESCRIPTOR),        //07
    USB_ENDPOINT_DESCRIPTOR_TYPE,            //05
    0x81,                    //输入端点
    USB_ENDPOINT_TYPE_INTERRUPT,            
    EP1_PACKET_SIZE,        //16字节
    0x0a        //中断扫描时间:10ms
};

// 端点1输出描述符
const USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
    sizeof(USB_ENDPOINT_DESCRIPTOR),
    USB_ENDPOINT_DESCRIPTOR_TYPE,
    0x01,                    //输出端点
    USB_ENDPOINT_TYPE_INTERRUPT,
    EP1_PACKET_SIZE,
    0x0a        //中断扫描时间:10ms
};
happlylife
驱动牛犊
驱动牛犊
  • 注册日期2007-11-09
  • 最后登录2008-02-03
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-30 10:52
那位朋友给我看看
游客

返回顶部