Other Parts Discussed in Thread: EK-TM4C1294XL
主题中讨论的其他器件:TM4C123、
当设计工程师 需要支付年度费用来 重新分配 USB 时、处理 USB 数据表信息的首要秘密是什么? 坦率地说、在处理数据传输处理错误信息、中断故障和其他随机崩溃的所有问题后、USB 当局似乎徒劳地尝试继续这种做法。 不知道一些过去的 TI 工程师如何解读 USB 协议以进行器件处理、这让我 相信 他们已经/被弄糊涂了。 当 USB 外设 VBUS 引脚 与 高电流插入电缆短路且 输入端没有1uF 最小电容时、可以看到这一点。 也许有充分理由 将任何电容值添加到 VBUS 引脚上似乎会影响外设的压降检测寄存器区域、即使在器件模式下未使用时也是如此。
我 一直在处理的"待处理"问题的一部分 涉及(usb.c) 3种不同器件模式(器件、主机、OTG)的处理。 在(usbdenum.c)尝试混淆 处理、VBUS/ID 引脚的硬件控制 和 NDA 数据表缺失寄存器位说明任何真正尝试使用 USB (快速)翻新以供 Windows 客户端使用的尝试似乎都是徒劳的。 寄存 器 USBIE (中断使能)的另一个关键区域 USB0_INT58中断处理和软件未能清除(startup_ccs.c)中指定或在代码中任何位置注册的 NVIC 全局中断。 实际上无关紧要、因为 USB0_INT58在器件模式下不工作、并且 在其他模式下可能会出现问题、IDK! 但是 USB0_INT58未被正确清除、 如果 没有任何 INTClearUSB0 ()、展开挂起似乎是下一个最佳方法。
也就是说、根据 在设备定义的 USB/ID 引脚的三种模式处理中写入的脚注、我已经审查了设备模式 VBUS/ID 引脚的处理方式被几次调用混淆了。
USB 堆栈传递变量的处理以及(usbdenum.c)如何确定更新(usb.c)后的模式以匹配逐字记录、如下所示。 似乎缺少一个强制器件模式的调用(usbdenum.c)、该调用被添加到 USBStackModeSet()的(usbdenum.c)处理中。 难怪在将 USB 电缆插入主机计算机数百次后、VBUS 引脚最终从高电流中短路时、我感到很困惑。 传递变量 eUSBForceDevice 对 USB_O_GPC 没有影响、因为它不存在。
// //强制 VBUS/ID 为高电平、器件模式(如果请求)。 // if (g_iUSBMode = eUSBModeForceDevice) { //map_USBDevMode (USB0_BASE); HWREG (USB0_BASE + USB_O_GPC)|= USB_GPCS_DEVMOD_DEV; } 否则、如果(g_iUSBMode = eUSBModeOTG) { // //要在有源器件模式下运行,OTG 信号必须处于激活状态。 //这允许控制器检测到断开连接。 // MAP_USBOTGMode (USB0_BASE); } 其他 { // //在所有其他情况下,将模式设置为设备。 此函数不应 //在 OTG 模式下被调用。 主动监控 VBUS、ID 必须拉高。 // G_iUSBMode = eUSBModeDevice; MAP_USBDevMode (USB0_BASE); }
// void USB0DeviceIntHandler (void) { 静态 uint32_t ui32Status; /*取消挂起 USB 全局 NVIC 中断*/ //IntPendClear (58); // //获取控制器中断状态。 // ui32Status = MAP_USBIntStatusControl (USB0_BASE); // //调用内部处理程序。 // USBDeviceIntHandlerInternal (0、ui32Status); }