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.

[参考译文] TM4C1290NCPDT:将 USBDFUDevice 与 USBSerialDevice 配合使用

Guru**** 2516170 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1000788/tm4c1290ncpdt-using-usbdfudevice-with-usbserialdevice

器件型号:TM4C1290NCPDT

我能够在应用 PCB 上使用 boot_demo_usb、并使用 dfuprog 对其进行编程。 boot_demo_USB 示例使用 USB HID 器件。  

该应用使用 USB 串行器件。 如果我在总线上定义了一个 DFU 器件、我在器件管理器中不会将其视为 Stellaris DFU 器件、而只会将其视为 USB 串行器件。

您能评论一下以下代码中缺少的内容吗?

谢谢、

Priya

空 USBmain (空)

   uint32_t ui32PLLRate;

 

   ////启用 USB 外设

   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_USB0);

 

   //配置器件引脚。

   PinoutSet (false、true);

 

   //初始化发送和接收缓冲区。

   USBBufferInit (&g_psTxBuffer[0]);

   USBBufferInit (&g_psRxBuffer[0]);

 

   //将设备信息传递到 USB 库并放置设备

                       //在总线上。

                       //

             G_sCompDevice.psDevices[0].pvInstance =

                      USBDCDCCompositeInit (0、&g_psCDCDevice[0]、&g_psCompEntry[0]);

 

 

      //将 CPU 时钟和 PLL 频率告知 USB 库。  这是一个

      // TM4C129器件的新要求。

      //

      SysCtlVCOGet (SYSCTL_XTAL_25MHz、\ui32PLLRate);

      UARTprintf ("\n ui32PLLRate =%d\n"、ui32PLLRate);

      USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&g_ui32SysClock);

      USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);

 

 

      USBDCompositeInit (0、&g_sCompDevice、描述符_DATA_SIZE + COMPIAL_DDFU_SIZE、

                                                G_pu_描述符数据);

      USBDDFUCompositeInit (0、&g_sDFUDevice、&(g_sCompDevice.psDevices[1]);

 

 

tUSBDCompositeDevice g_sCompDevice =

   //

   // Stellaris VID。

   //

   USB_VID_TI_1CBE、

 

   //

   //复合串行器件的 Stellaris PID。

   //

 

//   USB_PID_serial、

   USB_PID_COMP_HID_DFU、

 

   //

   //这以2mA 为增量、因此为500mA。

   //

   250、

 

   //

   //总线供电设备。

   //

   USB_CONF_ATTR_BUS_PWR、

 

   //

   //不需要默认的复合事件处理程序。

   //

   ControlHandler、

 

   //

   //字符串表。

   //

   G_pui8字符串描述符、

   num_string_descriptors、

 

   //

   //复合设备数组。

   //

   1、

   G_psCompEntry

};

 

#define NUM_SERIAL_DEVICES     2.

tCompositeEntry g_psCompEntry [NUM_SERIAL_DEVICS];

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

    您好、Priya、

    如果您正在进行复合器件设置、则需要为两者使用正确的 PID。 在此描述符中、您将 PID 用于单端口 CDC 和 USB 复合 DFU 的标准 USB 串行。

    应使用 USB_PID_COMP_HID_SER 而不是 USB_PID_serial。

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

    拉尔夫

    您能否查看数据结构和描述符定义并提供一些反馈?  

    Priya

    已编辑以添加 DFU 结构

    volatile bool g_BUpdateSignated;

    uint32_t DFUDetachCallback (void * pvCBData、uint32_t ui32Event、uint32_t ui32MsgData、
    void *pvMsgData);

    //
    //
    // DFU 运行时接口初始化和定制结构
    //
    //
    tUSBDDFUDevice g_sDFUDevice =

    DFUDetachCallback、
    (空*)&g_sDFUDevice
    };

    uint32_t
    DFUDetachCallback (void *pvCBData、uint32_t ui32Event、uint32_t ui32MsgData、
    void *pvMsgData)

    if (ui32Event == USBD_DFU_EVENT_DETACH)

    //
    //设置主循环用于确定何时是时间的标志
    //将控制权传回引导加载程序。 请注意、我们
    //此处绝对不要调用 USBDDFUUpdateBegin(),因为我们是这样
    //当前处于中断上下文中,这将导致严重问题
    //发生,并且不允许引导加载程序工作。
    //
    G_bUpdateSigned = true;

    返回(0);

    tUSBDCDCDevice g_psCDCDevice[NUM_SERIAL_DEVICS]=


    USB_VID_TI_1CBE、
    USB_PID_SERIAL、
    // USB_PID_COMP_HID_SER、
    0、
    USB_CONF_ATTR_SELF、
    ControlHandler、
    (void *)&g_psCDCDevice[0]、
    USBBufferEventCallback、
    (void *)&g_psRxBuffer[0]、
    USBBufferEventCallback、
    (void *)&g_psTxBuffer[0]、
    G_pui8字符串描述符、
    num_string_descriptors

    };

    tUSBDCompositeDevice g_sCompDevice =

    // Stellaris VID。
    USB_VID_TI_1CBE、
    //复合串行器件的 Stellaris PID。

    // USB_PID_serial、
    USB_PID_COMP_HID_DFU、

    //这以2mA 为增量、因此为500mA。
    //
    250、

    //总线供电设备。
    USB_CONF_ATTR_BUS_PWR、

    //不需要默认的复合事件处理程序。

    ControlHandler、

    //字符串表。
    G_pui8字符串描述符、
    num_string_descriptors、
    //复合设备数组。
    1、
    G_psCompEntry
    };
    uint8_t g_pui8描述符 Data[descriptor_data_size];
    tCompositeEntry g_psCompEntry [NUM_SERIAL_DEVICS];//这是额外的
    //
    //
    //此设备支持的语言。
    //
    //
    const uint8_t g_pui8LangDescriptor[]=

    4、
    USB_DTYPE_string、
    USB 短型(USB_LANG_EN_US)
    };

    //
    //
    //制造商字符串。
    //
    //
    const uint8_t g_pui8ManufacturerString[]=

    (17 + 1)* 2、
    USB_DTYPE_string、
    "T"、0、"e"、0、"x"、 0、"A"、0、"S"、0、 '、0、'i'、0、'n'、 0、"S"、0、
    "T"、0、"r"、0、"u"、 0、'm'、0、'e'、0、 "n"、0、"t"、0、"S"、 0、
    };

    //
    //
    //产品字符串。
    //
    //
    const uint8_t g_pui8ProductString[]=

    2 +(23 * 2)、
    USB_DTYPE_string、
    "D"、0、"E"、0、"V"、 0、'I'、0、'C'、0、 'e'、0、'、0、
    'F'、0、'I'、0、'R'、 0、'M'、0、'W'、0、 'A'、0、'R'、0、'E'、 '、0、
    'U'、0、'P'、0、'G'、 0、"R"、0、"A"、0、 "D"、0、"E"、0
    };

    //
    //
    //序列号字符串。
    //
    //
    const uint8_t g_pui8SerialNumberString[]=

    2 +(11 * 2)、
    USB_DTYPE_string、
    'A'、0、'M'、0、'A'、 0、"N"、0、"O"、0、 'm'、0、'C'、0、'G'、 0、"A"、0、"N"、0、 'N'、0
    };

    //
    //
    //控制接口描述字符串。
    //
    //
    const uint8_t g_pui8ControlInterfaceString[]=

    2 +(21 * 2)、
    USB_DTYPE_string、
    'A'、0、'C'、0、'M'、 0、'、0、"C"、0、 'O'、0、'n'、0、't'、 0、
    'R'、0、'o'、0、'l'、 0、'、0、'i'、0、 'n'、0、't'、0、'e'、 0、
    'R'、0、'f'、0、'A'、 0、'c'、0、'e'、0
    };

    //
    //
    //配置说明字符串。
    //
    //
    const uint8_t g_pui8ConfigString[]=

    2 +(26 * 2)、
    USB_DTYPE_string、
    "S"、0、"e"、0、"l"、 0、'f'、0、'、0、 'p'、0、'o'、0、'w'、 0、
    'e'、0、'r'、0、'e'、 0、'd'、0、'、0、 'C'、0、'o'、0、'n'、 0、
    'F'、0、'I'、0、'g'、 0、'u'、0、'r'、0、 'a'、0、't'、0、'i'、 0、
    'O'、0、'n'、0
    };

    //
    //
    //描述符字符串表。
    //
    //
    const uint8_t * const g_pui8StringDescriptors []=

    G_pui8 LangDescriptor、
    G_pui8ManufacturerString、
    G_pui8ProductString、
    G_pui8SerialNumberString、
    G_pui8ControlInterfaceString、
    G_pui8ConfigString
    };


    #define NUM_STRING_descriptors (sizeof (g_pui8StringDescriptors)/\
    sizeof (uint8_t *))

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

    您好、Priya、

    我看不到 DFU 器件的任何结构。

    请参阅我们的 boot_demo_USB 示例、了解如何设置 tUSBDDFUDevice 的描述符结构。

    我仍然认为    、对于 g_psCDCDevice、您需要 USB_PID_COMP_HID_SER、而不是 USB_PID_serial。

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

    拉尔夫

    我尝试在   g_psCDCDevice 中更改为 USB_PID_COMP_HID_SER。 我仍然只能在设备管理器中看到 COM 端口。  

    我有 boot_demo_usb 示例工作正常。 请勿使用 USB HID 设备、也不要使用 CDC 设备。 您能否提供更新的示例?

    Priya

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

    您好、Priya、

    我可以看到将一个组合在一起、但直到本周晚些时候、我才能够进行这方面的工作。

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

    我期待一个只使用 USB CDC 器件而不参考 USB HID 的 boot_demo_USB 示例。

    谢谢、

    Priya

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

    我正在跟踪使用 CDC 器件、未引用 HID 器件的 boot_demo_USB 示例。

    Priya

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

    您好、Priya、

    我所能做的事情的结果好坏参半。 但是、我将该示例组合在一起、但它在 Windows 中不能正确枚举、因为我们没有用于此类复合组合的 Windows 驱动程序。 提供新的 Windows 驱动程序超出了我们可以提供的支持功能。

    我所处的位置与您自己的位置相同、我可以在设备管理器中看到 CDC 器件、但 DFU 器件找不到合适的驱动程序进行枚举。

    此时、问题出在 Windows 以及如何为其定义 USB 驱动程序、这超出了我可以提供的帮助范围。

    如果您需要我组合在一起的项目、我可以提供它。

    此致、

    Ralph

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

    拉尔夫

    感谢你的答复。 是的、请提供您为复合 CDC 器件组合在一起的示例项目。

    Priya

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

    您好、Priya、

    我想多清理一下示例、但今天没有完成、明天我将为您准备项目。 由于其他 E2E 用户可能会引用此内容、我希望确保它不会像我所说的那样被抛出。

    此致、

    Ralph

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

    您好、Priya、

    请找到所附的示例项目。 CDC 在枚举时起作用、但由于 Windows 驱动程序问题、DFU 未枚举:

    e2e.ti.com/.../usb_5F00_dev_5F00_cdc_5F00_dfu.zip