This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMDSRM48HDK:USB BULK DEV:为什么不能像输入和输出那样使用 USB_EP_1

Guru**** 2481985 points
Other Parts Discussed in Thread: TMDSRM48HDK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/692859/ccs-tmdsrm48hdk-usb-bulk-dev-why-can-not-use-usb_ep_1-as-in-and-out

器件型号:TMDSRM48HDK

工具/软件:Code Composer Studio

我尝试使用 TMDSRM48HDK 中的 USB 作为 USB_bulk. 我将 示例 USB_DEV_BULK 从 Tiva C 修改为我的器件。

我将端点1用于输入和输出、然后尝试从我的应用发送数据(它将发送数据并接收数据)

结果

第1轮:

第2轮:

接下来、我将端点2更改为 IN、将端点1更改为 OUT、然后再次测试

结果

第1轮:

第2轮:

我很好奇、为什么我可以使用端点1作为输入和输出。

这里是我的代码

e2e.ti.com/.../3630.usb-bulk.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    端点0是双向的、所有其它端点是单向的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ Wang

    感谢您的回复!

    数据表中

    我认为它可以配置为输入和输出的方向、类型相同。

    例如:  

    endpoint1 ->输入

    endpoint1 ->输出

    我弄错了吗?

    /*****
     *
     *用于驱动程序中每个所需端点的端点。
     *
     (小部分 /
    #define DATA_IN_端 点       (USB_EP_1)
    #define DATA_OUT_端 点      (USB_EP_1)

    const uint8 g_pui8BulkInterface[BULKINTERFACE_SIZE]=

       /*
        *通信类数据接口描述符。
        *
       9、                         /*接口描述符的大小。 *
       USB_DTYPE_interface、       /*此描述符的类型。 *
       0、                         /*此接口的索引。 *
       0、                         /*此接口的备用设置。 *
       2、                         /*由此使用的端点数量
                                    *接口。 *
       USB_class_vend_specific、        /*由定义的接口类常量
                                    * USB-IF (规范5.1.3)。 *
       0、                         /*接口子类常量
                                    *由 USB-IF 定义(规范5.1.3)。 *
       0、                         /*子类的接口协议
                                    *在上面指定。 *
       4、                         /*此接口的字符串索引。 *

       /*
        *端点描述符
        *
       7、                             /*端点描述符的大小。 *
       USB_DTYPE_EndPoint、            /*描述符类型是一个端点。 *
       USB_EP_DESC_IN | USB_EP_TO_INDEX (DATA_IN_端 点)、
       USB_EP_ATTR_BULK、              /*端点是批量端点。 *
       /*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
       /*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
       /*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
       /*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
       USBShort (DATA_IN_EP_MAX_SIZE)、 /*最大数据包大小。 *
       0、                             /*此端点的轮询间隔。 *

       /*
        *端点描述符
        *
       7、                             /*端点描述符的大小。 *
       USB_DTYPE_EndPoint、            /*描述符类型是一个端点。 *
       USB_EP_DESC_OUT | USB_EP_TO_INDEX (DATA_OUT_终结 点)、
       USB_EP_ATTR_BULK、              /*端点是批量端点。 *
       /*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
       /*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
       /*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
       /*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
       USBShort (DATA_OUT_EP_MAX_SIZE)、/*最大数据包大小。 *
       0、                             /*此端点的轮询间隔。 *
    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我使用2个批量端点时、endpoint1用于 ins、endpoint1用于 outs。

    我从主机(PC)发出发送命令、然后是环回命令。

    调用函数 ProcessDataFromHost、并将命令返回主机(PC)

    但 未调用函数 ProcessDataToHost 将 TX 状态清除为空闲状态。

    返回 ulStatus 为0x00020000

    HandleEndpoints (void * pvBulkDevice、UINT32 ulStatus)

       const tUSBDBulkDevice * psBulkDevice;
       tBulkInstance * psInst;

       assert (pvBulkDevice!= 0);

       /*
        *确定串行设备是处于单模式还是复合模式是因为
        *在这两种情况下,ulIndex 的含义是不同的。
        *
       psBulkDevice = pvBulkDevice;
       psInst = psBulkDevice->sPrivateData;

       /*
        批量输出数据端点的*处理程序。
        *
       /*SAFETYMCUSW 184 S "原因- LDRA 工具问题。"*/
       if (((ulStatus &(0x10000u << USB_EP_TO_INDEX (psInst->ucBulkOUTEndpoint))!= 0U)
       {
           /*
            *正在从主机向我们发送数据。
            *
           ProcessDataFromHost (psBulkDevice、ulStatus);
       }

       /*
        数据端点中批量的*处理程序。
        *
       /*SAFETYMCUSW 184 S "原因- LDRA 工具问题。"*/
       if ((ulStatus &(1U << USB_EP_TO_INDEX (psInst->ucBulkINEndpoint))!= 0U)
       {
          ProcessDataToHost (psBulkDevice、ulStatus);
       }

    和 ProcessDataFromHost 函数中

     它称为-->USBDevEndpointStatusClear (psInst->ulUSBBase、
                                                 (uint32)(psInst->ucBulkINEndpoint)、
                                                  ulEPStatus);

    在 USBDevEndpointStatusClear 函数中、它只是返回



    问题

    如何清除 TX 状态?

    为什么在 USBDevEndpointStatusClear 函数中没有任何内容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Kokpo、

    我不熟悉 TIvAware。 我假设您已经解决了这个问题。