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.
您好!
我在器件模式下的 USB 模块有 CDC 问题。
我在 launchpad 上运行了完全相同的代码、但在单独的微控制器上、代码无法正常工作。
我可以删除任何硬件问题、因为我能够进入引导加载程序模式(Tiva 固件升级)
请找到所附的用于初始化 USB 模块的代码。
ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL); GPIOPINTypeUSBAnalog (GPIO_PORTL_BASE、 GPIO_PIN_6 | GPIO_PIN_7); MAP_SysCtlPeripheralEnable (SYSCTL_Periph_USB0); USBBufferInit (&g_sTxBuffer); USBBufferInit (&g_sRxBuffer); SysCtlVCOGet (SYSCTL_XTAL_25MHz、 ui32PLLRate); USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock); USBDCDFeatureSet (0、 USBLIB_FEATE_USBPLL、&ui32PLLRate);// ui32PLLRate = 240000000? USBDCDCInit (0、&g_psCDCDevice);
我为 TM4C1294XL 加载了"USB_DEV_cserial"示例、但器件未显示。
频率是否有问题?
您好 Briceag、
如果您使用的是 Windows 10、则 cserial 示例存在枚举问题。 我正在连接一个 CDC 器件版本、该版本应该枚举正确。 请尝试执行此操作、并将我的示例中的初始化代码与您的代码进行比较。
您好 Briceag、
引导加载程序直接来自 ROM 引导加载程序、不会设置为 CDC 器件。
根据您的连接、我认为您需要以下 API:
// //为设备模式初始化 USB 堆栈。 // USBStackModeSet (0、eUSBModeDevice、0);
请尝试将其作为初始化的一部分、看看这是否有用。 在 USBDCDCInit 之前调用它。
您好 Briceag、
抱歉!! 我在我发布的 API 上犯了一个错误、它应该是 eUSBModeForceDevice、而不是 eUSBModeDevice!
当然、我编辑了 CDC 示例以删除引脚分配集、并将其添加到中:
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL); ROM_GPIOPinTypeUSBAnalog (GPIO_PORTL_base、GPIO_PIN_6 | GPIO_PIN_7); ROM_GPIOPINConfigure (GPIO_PA0_URX); ROM_GPIOPinConfigure (GPIO_PA1_U0TX); ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
在 USBDCDCInit 之前:
USBStackModeSet (0、eUSBModeForceDevice、0);
通过这些更改、可以成功枚举 PinoutSet 并将其注释掉。
您好、Briceag、
也许(&ui32PLLRate)应该设置为与_VCO_480匹配、而不是像您一样240mHz //?
例如、480000000/8=60MHz 或 PLL 分频8
删除 USBDCDCInit (0、&g_psCDCDevice);Ralf 建议对器件模式进行正确调用。
强制寄存器中 VBUS 引脚的另一种方法可能有助于解决可能的 ID 引脚问题。
/* USB_GPCS_DEVMOD_DEV: *强制 USB0VBUS 和 USB0ID 为高电平*/ HWREG (USB0_BASE + USB_O_GPC)|= USB_GPCS_DEVMOD_DEV;//USB_GPCS_DEVMOD_DEVVBUS
您的成功之道就在您的旁边!
您好、Ralph、
的确,有些事情发生了变化。
在 Windows 上、设备管理器中的消息是"设备描述符请求失败"
在 Linux 上、消息为"设备不接受地址16、错误-71"、"无法枚举 USB 设备"
您好 Briceag & BP101、
PLL 速率和 USBDCDCInit 命令正确。 在工作中的 LaunchPad 示例中、进行了以下调用:
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);
和
// //将设备信息传递到 USB 库并放置设备 //在总线上。 // USBDCDCInit (0、&g_sCDCDevice);
您好 Briceag、
由于与 USB ID 引脚的连接、您将需要使用我刚刚测试过的版本、该版本强制采用器件模式、并且仅初始化 DP/DM USB 引脚。 我随函附上:
您好 Ralph、
我用你的结构替换了我的所有结构。 不幸的是、行为也是如此。
据我所知、如果未检测到连续的帧起始数、器件将暂停。 为什么会发生这种情况?
我不知道为什么在 始终设置 PSYSDIV=1时、他们会看到 PSYSDIV=1 在 CCS 调试 480MHz PLL 中测试或查看多个 MUC。 请注意、蓝色编辑我的帖子、高于 值16 =(&ui32PLLRate=480MHz)、但根据您设置的 PLL 速率、其他几个值可能起作用。
发布的一些 USB 批量器件模式调用 Ralf 看起来与 我输入的调用不同。 假设您没有尝试将键盘或鼠标连接到目标 MCU? 您似乎 正在尝试将目标 MCU 连接到主机(Linux/Win)、而不是 CDC/HID 器件。
USBStackModeSet (0、eUSBModeDevice、0); USBDBulkInit (0、&g_sBulkDevice);
所有其他情况下、添加 以下行以在 POR 之后报告显示 VCO/PLL 速率的消息。
静态 uint32_t ui32VCOSpeed; SysCtlVCOGet (SYSCTL_XTAL_25MHz、&ui32VCOSpeed); UARTprintf (">VCO-Speed->:%i\r\n"、ui32VCOSpeed);
这就是我试图 指出的、CDC 不是 批量器件初始化的正确调用、 因此 是 发布 正确调用的时间。
显示375Mhz 的 VCO 速度非常奇数。 值16是 PLL 分频值(480/16=30MHz) USB 时钟速率。 对于高达60MHz 的高速 USB、该值可以是(8)。 根据 PLL 速率和 Tivaware driverlib 的版本、您所加载的内容可能会有所不同。 根据 调试寄存器视图中的 PSYSDIV 为1或2、您可能处于计时或甚至超频 SYSCLK 和外设时钟。