代码之家  ›  专栏  ›  技术社区  ›  jcoder

USB HID协议问题

  •  5
  • jcoder  · 技术社区  · 16 年前

    我正在用一个 通用HID接口 . 我已经设置了HID概要文件配置,为输入和输出提供一个64字节的消息。

    现在基本上可以用了。设备在windows中注册正常。我可以在电脑上的程序中找到它,并可以向它发送和接收数据。但问题是,从PC到PIC的消息被截断为EP0端点缓冲区的大小。

    在我进一步调试之前,我想澄清一下我对USB协议的理解,并检查我是否正确。

    据我所知,PC端通过查看设备描述符中的最大数据包大小字段知道每个数据包的大小,并将相应地将消息分为多个数据包。

    如果我将接收缓冲区设置为PIC的64字节,那么我得到的消息的64字节就足够满足我的需要了,但是我不想不理解为什么小缓冲区不能工作,总有一天我可能会需要它们。

    欢迎提供任何建议或信息。

    1 回复  |  直到 16 年前
        1
  •  4
  •   qdot    15 年前

    有一种叫做Endpoint Descriptor的东西,它定义了wMaxPacketSize,这是主机控制器接口驱动程序用来将大型USB传输细分为较小数据包的东西。

    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    HID_EP | _EP_IN,            //EndpointAddress
    _INTERRUPT,                       //Attributes
    DESC_CONFIG_WORD(9),        //size
    0x01,                        //Interval
    
    /* Endpoint Descriptor */
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    HID_EP | _EP_OUT,            //EndpointAddress
    _INTERRUPT,                       //Attributes
    DESC_CONFIG_WORD(9),        //size
    0x01                        //Interval