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.

[参考译文] RTOS/TM4C1294KCPDT:USB CDC - USBDCDCInit()初始化参数。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/764994/rtos-tm4c1294kcpdt-usb-cdc---usbdcdcinit-initialize-params

器件型号:TM4C1294KCPDT

工具/软件:TI-RTOS

大家好、

TM4C1294KCPDT -串行- CDC 示例。

在 USBDCDCInit() API 中,要初始化 CDC 层,传递给它的结构参数 是 tUSBDCDCDevice,如下所示:

typedef 结构

  const uint16_t ui16VID;
  const uint16_t ui16PID;
  const uint16_t ui16MaxPowermA;
  const uint8_t ui8PwrAttributes;
  const tUSBCallback pfnControlCallback;
  void *pvControlCBData;
  const tUSBCallback pfnRxCallback;
  void *pvRxCBData;
  const tUSBCallback pfnTxCallback;
  void *pvTxCBData;
  const uint8_t * const * ppui8字符串描述符;
  const uint32_t ui32NumStringDescriptors;
  tCDCSerInstance sPrivateData;

tUSBDCDCDevice

第7个和第9个参数是要注册的函数回调、用于在发送和接收事件时发出通知。

在示例项目和其他地方可以观察 到、USBBufferEventCallback 已注册、这是一个驱动程序 API。

为什么会这样?

不是应该注册应用程序回调。?

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

    您好 Jayaraj、

    不会、您不会在此处使用应用程序回调、因为您希望 USB 缓冲区在应用程序下方运行、并且使用驱动程序回调允许这样做。

    请参阅以下回调功能说明:

    //! 此函数是应用程序应该
    //!的 USB 缓冲区事件处理程序 注册 USB 设备类驱动程序作为通道的回调
    //! 使用该缓冲器对其进行缓冲。
    //!
    //! 注意此函数永远不会被应用程序调用。 这是
    //! 允许将 USB 缓冲器插入设备类//
    !的处理程序 驱动程序或主机管道驱动程序、并在应用程序下方提供缓冲
    //! 支持。 

    总之、使用 USB 驱动程序的回调功能可以让 USB 在应用程序下运行、因此、您只需担心从回调中接收到事件后会进行处理、而无需管理数据缓冲。

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

    您好 Ralph、

    感谢您提供信息。

    我正在尝试创建一个在 USB CDC 层上运行的应用。 (即使用 CDC 层作为通道的应用)。

    为此、我将介绍使用 USB CDC 层的示例应用、但可以看到  正在使用 USBBufferRead 和 USBBufferWrite API (驱动程序级 API)。

    除了这些 API 之外、还使用了其他驱动程序级 API (例如 USBBufferDataAvailable 等)  

    为了理解 USB CDC 通道、应使用与 USB CDC 层相关的 API (例如 USBDCDCPacketWrite、USBDCDCPacketRead、 USBDCDCRxPacketAvailable 等)、而不是直接使用驱动程序级 API。

    如果有问题、请更正。

    [编辑]

    为了更加精确、

    我想开发一个使用 USB CDC 层传输数据包的应用。

    这里唯一的混淆点是、是否单独使用 CDC 层 API、即在文件中公开的 API - usbdcdc.h

    或 usblib.h 中公开的 API (假定为驱动程序调用),这些 API 具有 USBBufferSpaceAvailable()

    请澄清这一点。

    谢谢、

    Jay

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

    您好 Jay、

    您可以使用 usblib.h API、例如 USBBufferSpaceAvailable。 您只需要使用 CDC API 进行配置、以确保 USB 堆栈在 CDC 模式下运行。

    USB_serial_structs.c (或其等效结构)中定义的结构在 CDC 特定函数和通用 USB 库之间提供链接。 这使得 USB 库能够处理使用单层和缓冲器运行多种类型的器件。

    编辑:将 usb_serial_structs.h 更正为 USB_serial_structs.c