找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

范例 M451BSP\SampleCode\StdDriver\USBD_HID_Transfer\ 有矛盾

[复制链接]
跳转到指定楼层
楼主
    在...\M451BSP\SampleCode\StdDriver\USBD_HID_Transfer\范例中
文件 descriptors.c 的
70~79行如下,中文注释是我加的下同
    /* I/F descr: HID 接口描述符 */
    LEN_INTERFACE,  /* bLength 接口描述符的字节数大小 */
    DESC_INTERFACE, /* bDescriptorType 接口描述符的类型编号 */
    0x00,           /* bInterfaceNumber 该接口的编号 */
    0x00,           /* bAlternateSetting 备用的接口描述符编号 */
    0x02,           /* bNumEndpoints 该接口使用的端点数,不包括端点0 */
    0x03,           /* bInterfaceClass 接口类型 */
    0x00,           /* bInterfaceSubClass 接口子类型 */
    0x00,           /* bInterfaceProtocol 接口遵循的协议 */
    0x00,           /* iInterface 描述该接口的字符串索引值 */
注意这个接口只使用了2个端点
92~110行如下:
    /* EP Descriptor: interrupt in.端点描述符:中断输入 */
    LEN_ENDPOINT,   /* bLength 端点描述符字节数大小 7 */
    DESC_ENDPOINT,  /* bDescriptorType 端点描述符类型编号 0x05 */
    (INT_IN_EP_NUM | EP_INPUT), /* bEndpointAddress 端点地址及输入输出属性 0x01|0x80=0x81 */
    EP_INT,         /* bmAttributes 端点的传输类型属性 0x03 */
    /* wMaxPacketSize 端点收、发的最大包大小 64 */
    EP2_MAX_PKT_SIZE & 0x00FF,
    (EP2_MAX_PKT_SIZE & 0xFF00) >> 8,
    HID_DEFAULT_INT_IN_INTERVAL,        /* bInterval 主机查询端点的时间间隔 1ms */

    /* EP Descriptor: interrupt out. 端点描述符:中断输出 */
    LEN_ENDPOINT,   /* bLength 端点描述符字节数大小 */
    DESC_ENDPOINT,  /* bDescriptorType 端点描述符类型编号 */
    (INT_OUT_EP_NUM | EP_OUTPUT),   /* bEndpointAddress 端点地址及输入输出属性 0x02|0x00=0x02 */
    EP_INT,         /* bmAttributes 端点的传输类型属性 */
    /* wMaxPacketSize 端点收、发的最大包大小*/
    EP3_MAX_PKT_SIZE & 0x00FF,
    (EP3_MAX_PKT_SIZE & 0xFF00) >> 8,
    HID_DEFAULT_INT_IN_INTERVAL     /* bInterval 主机查询端点的时间间隔 */
注意:2个端点描述符定义了端点1是中断输入,端点2为中断输出
而在文件hid_transfer.c的端点事件处理中,详见88~144行 这里只抄3段
        if(u32IntSts & USBD_INTSTS_EP1)
        {
            /* Clear event flag */
            USBD_CLR_INT_FLAG(USBD_INTSTS_EP1);

            // control OUT
            USBD_CtrlOut();
        }

        if(u32IntSts & USBD_INTSTS_EP2)
        {
            /* Clear event flag */
            USBD_CLR_INT_FLAG(USBD_INTSTS_EP2);
            // Interrupt IN
            EP2_Handler();
        }

        if(u32IntSts & USBD_INTSTS_EP3)
        {
            /* Clear event flag */
            USBD_CLR_INT_FLAG(USBD_INTSTS_EP3);
            // Interrupt OUT
            EP3_Handler();
        }
显然是认为端点1是控制输出,端点2为中断输入,端点3为中断输出。
    这和描述符定义的有明显的矛盾。所以在此就教于明白人。   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
jamesliu 发表于 2018-5-28 09:34:09 | 只看该作者
descriptors.c中EP_NUM是USB host的,hid_transfer.c的端点是M451的
回复 支持 反对

使用道具 举报

板凳
jamesliu 发表于 2018-5-28 09:37:24 | 只看该作者
本帖最后由 jamesliu 于 2018-5-28 09:38 编辑



回复 支持 反对

使用道具 举报

地板
 楼主| hemingxian 发表于 2018-5-28 13:27:35 | 只看该作者
请教jamesliu,端点索引1即端点1由何处定义的功能?主机好像没有端点吧?
回复 支持 反对

使用道具 举报

5#
 楼主| hemingxian 发表于 2018-5-28 14:21:47 | 只看该作者

USB逻辑图

本帖最后由 hemingxian 于 2018-5-28 14:47 编辑

主机没有端点

USB逻辑.png (14.2 KB, 下载次数: 438)

USB逻辑.png
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU