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.

[参考译文] TM4C123GH6PM:重新插入后 USB 连接不启动

Guru**** 2468460 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/669534/tm4c123gh6pm-usb-connection-not-start-after-replug

器件型号:TM4C123GH6PM

大家好、

我在 TM4C123GH6PM 上编写了一个代码、这是一个 USB 主机、我插入了条形码读取器、读出像 hid 键盘。 许多条形码读取器工作得很好。  

但有些条形码读取器:

1. 当我在连接条形码读取器的情况下启动系统时,系统会接收到已连接的条形码读取器,但在我卸下条形码读取器并将其插回时无法识别它。

2. 当我在未插入条形码读取器时启动系统时,同一条形码读取器无法再次检测到它。


这是我的 USB 初始化代码:

void initUsb (void){

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_USB0);
MAP_SysCtlUSBPLLEnable();

MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0ID);
MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0ID、PIN_GPIO_USB0ID);

MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0VBUS);
MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0VBUS、PIN_GPIO_USB0VBUS);

MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0DM);
MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0DM、PIN_GPIO_USB0DM);

MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0DP);
MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0DP、PIN_GPIO_USB0DP);

MAP_GPIOPinConfigure (CONF_GPIO_USB0FLT);
MAP_GPIOPinTypeUSBDigital (GPIO_PORTD_BASE、PIN_GPIO_USB0FLT);

MAP_GPIOPinConfigure (CONF_GPIO_USB0EPEN);
MAP_GPIOPinTypeUSBDigital (BASE_GPIO_USB0EPEN、PIN_GPIO_USB0EPEN);


USBStackModeSet (0、eUSBModeForceHost、ModeCallback);
USBHCDRegisterDrivers (0、g_ppHostClassDrivers、g_ui32NumHostClassDrivers);
G_psKeyboardInstance = USBHKeyboardOpen (KeyboardCallback、g_pui8Buffer、keyboard_memory_size);

USBHCDPowerConfigInit (0、USBHCD_VBUS_HIGH | USBHCD_FAULT_VBUS_FILTER);

USBHCDInit (0、memPoolHCD、HCDMEMORYPOOLSIZE);

} 

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

    尊敬的 Metin:

     您是否有机会尝试使用 TivaWare USB_host_keyboard 示例? 我刚刚尝试过,然后插头->拔下插头->插入键盘,主机能够检测到何时发生了插头或插头拔出。 请参阅下面的内容。 我希望该示例将成为您的 bardcode 读取器应用的良好参考。

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

    我使用了相同的示例。 许多条形码读取器的工作方式与您的工作方式一样顺畅、但其中一个条形码读取器会产生问题、正如我在前面提到的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Metin:
    所有的 bardcode 读取器都是相同的(相同的品牌、型号)吗? 如果您重置主机、它是否会再次开始检测读取器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    条形码读取器的品牌不同。 使用此功能重新启动 USB、但未成功!

    void initUsb (void){
    
    
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_USB0);
    
    MAP_SysCtlUSBPLLEnable();
    
    
    MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0ID);
    
    MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0ID、PIN_GPIO_USB0ID);
    
    
    MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0VBUS);
    
    MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0VBUS、PIN_GPIO_USB0VBUS);
    
    
    MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0DM);
    
    MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0DM、PIN_GPIO_USB0DM);
    
    
    MAP_SysCtlPeripheralEnable (Periph_GPIO_USB0DP);
    
    MAP_GPIOPinTypeUSBAnalog (BASE_GPIO_USB0DP、PIN_GPIO_USB0DP);
    
    
    MAP_GPIOPinConfigure (CONF_GPIO_USB0FLT);
    
    MAP_GPIOPinTypeUSBDigital (GPIO_PORTD_BASE、PIN_GPIO_USB0FLT);
    
    
    MAP_GPIOPinConfigure (CONF_GPIO_USB0EPEN);
    
    MAP_GPIOPinTypeUSBDigital (BASE_GPIO_USB0EPEN、PIN_GPIO_USB0EPEN);
    
    
    
    USBStackModeSet (0、eUSBModeForceHost、ModeCallback);
    
    USBHCDRegisterDrivers (0、g_ppHostClassDrivers、g_ui32NumHostClassDrivers);
    
    G_psKeyboardInstance = USBHKeyboardOpen (KeyboardCallback、g_pui8Buffer、keyboard_memory_size);
    
    
    USBHCDPowerConfigInit (0、USBHCD_VBUS_HIGH | USBHCD_FAULT_VBUS_FILTER);
    
    
    USBHCDInit (0、memPoolHCD、HCDMEMORYPOOLSIZE);
    
    
    }
    
    void restartUsb (void){
    
    USBHCSDReset (0);
    initUsb();
    } 

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

    尊敬的 Metin:

    也许可以尝试一些其他主机模式 USB 库命令来查看它们是否有用。 也许由于某种原因 VBUS 引脚被锁存、或者断开中断标志未被置位。 您可以在 CCS 中调试 USB0并观察 PWR 控制寄存器 VBUS 标志、断开中断等。

    /*设置 USB0主机状态从主机接收功率*/
    USBDCDPowerStatusSet (0、USB_STATUS_BUS_PWR);//USB_STATUS_SELF
    
    /*指定主机模式(USB0EPEN) VBUS 模式和 PWR 故障状态处理的类型*/
    USBHCDPowerConfigInit (0、USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER |
    USBHCD_FAULT_LOW | USBHCD_FAULT_VBUS_DIS);