I have been using the USBHost_t36 library with Teensy 3.6 and more recently 4.1. This has been with HID and serial devices with good success.
I want to connect a Pimoroni Kewbow2040 (https://shop.pimoroni.com/products/keybow-2040?variant=32399559589971) to my setup.
There is currently only a Circuitpython library for the Keybow so I am trying to connect the Keybow to the Teensy4.1 host (via a USB hub) and communicate via CDC serial.
I have disabled all other USB devices that the Keybow (running Circuitpython) would present(HID, Mass storage, REPL etc) in the boot.py files leaving only a serial data (CDC) device.
When I plug the Keybow2040 in to the Teensy host the Teensy becomes unresponsive and has to be power cycled.
To try to debug this I have loaded HIDDeviceInfo with debug enabled onto the Teensy host.
I have discovered that if the Teensy is powered with the Keybow2040 already plugged in then it remains responsive.
The Teensy remains responsive if the Keybow 2040 is then disconnected.
If however the Keybow is re-connected or plugged in after the Teensy is powered then the Teensy becomes unresponsive.
I would be very grateful for any help in getting this running reliably.
Thanks
Files Below.
Keybow2040 running Circuitpython 7.2.2(latest)
Using 1.56 Teensyduino
Output from HIDDevice info
Keybow already plugged in when Teensy powered.
Keybow2040 then disconnected
Keybow plugged in after Teensy powered up
I want to connect a Pimoroni Kewbow2040 (https://shop.pimoroni.com/products/keybow-2040?variant=32399559589971) to my setup.
There is currently only a Circuitpython library for the Keybow so I am trying to connect the Keybow to the Teensy4.1 host (via a USB hub) and communicate via CDC serial.
I have disabled all other USB devices that the Keybow (running Circuitpython) would present(HID, Mass storage, REPL etc) in the boot.py files leaving only a serial data (CDC) device.
When I plug the Keybow2040 in to the Teensy host the Teensy becomes unresponsive and has to be power cycled.
To try to debug this I have loaded HIDDeviceInfo with debug enabled onto the Teensy host.
I have discovered that if the Teensy is powered with the Keybow2040 already plugged in then it remains responsive.
The Teensy remains responsive if the Keybow 2040 is then disconnected.
If however the Keybow is re-connected or plugged in after the Teensy is powered then the Teensy becomes unresponsive.
I would be very grateful for any help in getting this running reliably.
Thanks
Files Below.
Keybow2040 running Circuitpython 7.2.2(latest)
Code:
Boot.py
import usb_cdc
usb_cdc.enable(console=False, data=True) # Disable Repl enable serial data
import storage
storage.disable_usb_drive()
import usb_midi
usb_midi.disable()
import usb_hid
usb_hid.disable()
Using 1.56 Teensyduino
Output from HIDDevice info
Keybow already plugged in when Teensy powered.
Code:
USB HID Device Info Program
This Sketch shows information about plugged in HID devices
*** You can control the output by simple character input to Serial ***
R - Turns on or off showing the raw data
C - Toggles showing changed data only on or off
<anything else> - toggles showing the Hid formatted breakdown of the data
USB2 PLL running
reset waited 6
USBHS_ASYNCLISTADDR = 0
USBHS_PERIODICLISTBASE = 20004000
periodictable = 20004000
port change: 10001803
connect
begin reset
port change: 18001205
port enabled
end recovery
new_Device: 480 Mbit/sec
new_Pipe
enumeration:
enumeration:
enumeration:
Device Descriptor:
12 01 00 02 09 00 02 40 40 1A 01 02 00 01 00 01 00 01
VendorID = 1A40, ProductID = 0201, Version = 0100
Class/Subclass/Protocol = 9(Hub) / 0 / 2(Multi-TT)
Number of Configurations = 1
enumeration:
enumeration:
Product: USB 2.0 Hub [MTT]
enumeration:
Config data length = 41
enumeration:
Configuration Descriptor:
09 02 29 00 01 01 00 E0 32
NumInterfaces = 1
ConfigurationValue = 1
09 04 00 00 01 09 00 01 00
Interface = 0
Number of endpoints = 1
Class/Subclass/Protocol = 9(Hub) / 0 / 1(Single-TT)
07 05 81 03 01 00 0C
Endpoint = 1 IN
Type = Interrupt
Max Size = 1
Polling Interval = 12
09 04 00 01 01 09 00 02 00
Interface = 0
Number of endpoints = 1
Class/Subclass/Protocol = 9(Hub) / 0 / 2(Multi-TT)
07 05 81 03 01 00 0C
Endpoint = 1 IN
Type = Interrupt
Max Size = 1
Polling Interval = 12
enumeration:
USBHub memory usage = 960
USBHub claim_device this=2000B760
found possible interface, altsetting=0
found possible interface, altsetting=1
number of interfaces found = 2
best interface is 0 using altsetting 1
*** Device Hub1 1a40: 201 - connected ***
product: USB 2.0 Hub [MTT]
USBHub control callback
09 29 07 88 00 32 64 00 FF 00 00 00 00 00 00 00
Hub ports = 7
USBHub control callback
unhandled setup, message = 10B01
USBHub control callback
USBHub control callback
USBHub control callback
USBHub control callback
USBHub control callback
USBHub control callback
USBHub control callback
power turned on to all ports
device addr = 1
new_Pipe
allocate_interrupt_pipe_bandwidth
ep interval = 12
interval = 256
best_bandwidth = 2, at offset = 0
pipe cap1 = F0012101
HUB Callback (member)
status = 20
getstatus, port = 5
USBHub control callback
01 01 01 00
New Port Status
status=10101 port=5
state=0
Device is present:
Has Power
USBHub control callback
Port Status Cleared, port=5
timer event (19999 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 20
getstatus, port = 5
USBHub control callback
01 01 00 00
New Port Status
status=101 port=5
state=2
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 20
getstatus, port = 5
USBHub control callback
01 01 00 00
New Port Status
status=101 port=5
state=3
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 20
getstatus, port = 5
USBHub control callback
01 01 00 00
New Port Status
status=101 port=5
state=4
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 20
getstatus, port = 5
USBHub control callback
01 01 00 00
New Port Status
status=101 port=5
state=5
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 20
getstatus, port = 5
USBHub control callback
01 01 00 00
New Port Status
status=101 port=5
state=6
Device is present:
Has Power
sending reset
send_setreset
USBHub control callback
unhandled setup, message = 40323
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 0
HUB Callback (member)
status = 20
getstatus, port = 5
USBHub control callback
03 01 10 00
New Port Status
status=100103 port=5
state=7
Device is present:
Enabled, speed = 12 Mbit/sec
Has Power
USBHub control callback
unhandled setup, message = 140123
timer event (24999 us): Hello, I'm resettimer, this = 2000B760, timer = 2000BA98
port_doing_reset = 5
PORT_RECOVERY
new_Device: 12 Mbit/sec
new_Pipe
enumeration:
enumeration:
enumeration:
Device Descriptor:
12 01 00 02 00 00 00 40 D0 16 C6 08 00 01 01 02 03 01
VendorID = 16D0, ProductID = 08C6, Version = 0100
Class/Subclass/Protocol = 0 / 0 / 0
Number of Configurations = 1
enumeration:
enumeration:
Manufacturer: Pimoroni
enumeration:
Product: Keybow 2040
enumeration:
Serial Number: E6609103C3924127
enumeration:
Config data length = 75
enumeration:
Configuration Descriptor:
09 02 4B 00 02 01 00 80 32
NumInterfaces = 2
ConfigurationValue = 1
08 0B 00 02 02 02 00 00
Interface Association = 0 through 1
Class / Subclass / Protocol = 2 / 2 / 0
09 04 00 00 01 02 02 00 04
Interface = 0
Number of endpoints = 1
Class/Subclass/Protocol = 2 / 2 / 0
05 24 00 10 01
05 24 01 01 01
04 24 02 02
05 24 06 00 01
07 05 81 03 40 00 10
Endpoint = 1 IN
Type = Interrupt
Max Size = 64
Polling Interval = 16
09 04 01 00 02 0A 00 00 05
Interface = 1
Number of endpoints = 2
Class/Subclass/Protocol = 10 / 0 / 0
07 05 02 02 40 00 00
Endpoint = 2 OUT
Type = Bulk
Max Size = 64
Polling Interval = 0
07 05 82 02 40 00 00
Endpoint = 2 IN
Type = Bulk
Max Size = 64
Polling Interval = 0
enumeration:
USBHub memory usage = 960
USBHub claim_device this=2000BB20
USBDeviceInfo claim this=2000CA48
****************************************
** Device Level **
vid=16D0
pid=8C6
bDeviceClass = 0
bDeviceSubClass = 0
bDeviceProtocol = 0
08 0B 00 02 02 02 00 00 09 04 00 00 01 02 02 00 04 05 24 00 10 01 05 24 01 01 01 04 24 02 02 05
24 06 00 01 07 05 81 03 40 00 10 09 04 01 00 02 0A 00 00 05 07 05 02 02 40 00 00 07 05 82 02 40
00 00
HIDParser claim this=200095A0
HIDParser claim this=20009C60
HIDParser claim this=2000A320
HIDParser claim this=2000A9E0
HIDParser claim this=2000B0A0
Descriptor 11 = IAD
Descriptor 4 = INTERFACE
USBDeviceInfo claim this=2000CA48
****************************************
** Interface Level **
09 04 00 00 01 02 02 00 04 05 24 00 10 01 05 24 01 01 01 04 24 02 02 05 24 06 00 01 07 05 81 03
40 00 10 09 04 01 00 02 0A 00 00 05 07 05 02 02 40 00 00 07 05 82 02 40 00 00
bInterfaceNumber = 0
number end points = 1
bInterfaceClass = 2
bInterfaceSubClass = 2
Communicatons and CDC
bInterfaceProtocol = 0
HIDParser claim this=200095A0
HIDParser claim this=20009C60
HIDParser claim this=2000A320
HIDParser claim this=2000A9E0
HIDParser claim this=2000B0A0
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 5 = ENDPOINT
Descriptor 4 = INTERFACE
USBDeviceInfo claim this=2000CA48
****************************************
** Interface Level **
09 04 01 00 02 0A 00 00 05 07 05 02 02 40 00 00 07 05 82 02 40 00 00
HIDParser claim this=200095A0
HIDParser claim this=20009C60
HIDParser claim this=2000A320
HIDParser claim this=2000A9E0
HIDParser claim this=2000B0A0
Descriptor 5 = ENDPOINT
Descriptor 5 = ENDPOINT
Keybow2040 then disconnected
Code:
HUB Callback (member)
status = 20
getstatus, port = 5
USBHub control callback
00 01 01 00
New Port Status
status=10100 port=5
state=9
Has Power
disconnect_Device:
USBDriver (available_drivers) list: 2000BB20 -> 2000CA48 -> 200095A0 -> 20009C60 -> 2000A320 -> 2000A9E0 -> 2000B0A0
USBDriver (dev->drivers) list: (empty
USBDriver (available_drivers) list: 2000BB20 -> 2000CA48 -> 200095A0 -> 20009C60 -> 2000A320 -> 2000A9E0 -> 2000B0A0
delete_Pipe 2000B4E0
remove QH from async schedule
Free transfers
* 536904800
Free transfers attached to QH
* 536887584
* Delete Pipe completed
removed Device_t from devlist
USBHub control callback
Port Status Cleared, port=5
Keybow plugged in after Teensy powered up
Code:
HUB Callback (member)
status = 40
getstatus, port = 6
USBHub control callback
01 01 01 00
New Port Status
status=10101 port=6
state=0
Device is present:
Has Power
USBHub control callback
Port Status Cleared, port=6
timer event (19999 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 40
getstatus, port = 6
USBHub control callback
01 01 00 00
New Port Status
status=101 port=6
state=2
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 40
getstatus, port = 6
USBHub control callback
01 01 00 00
New Port Status
status=101 port=6
state=3
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 40
getstatus, port = 6
USBHub control callback
01 01 00 00
New Port Status
status=101 port=6
state=4
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 40
getstatus, port = 6
USBHub control callback
01 01 00 00
New Port Status
status=101 port=6
state=5
Device is present:
Has Power
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 40
getstatus, port = 6
USBHub control callback
01 01 00 00
New Port Status
status=101 port=6
state=6
Device is present:
Has Power
sending reset
send_setreset
USBHub control callback
unhandled setup, message = 40323
timer event (20000 us): Debounce Timer, this = 2000B760, timer = 2000BA78
ports in use bitmask = 0
HUB Callback (member)
status = 40
getstatus, port = 6
USBHub control callback
03 01 10 00
New Port Status
status=100103 port=6
state=7
Device is present:
Enabled, speed = 12 Mbit/sec
Has Power
USBHub control callback
unhandled setup, message = 140123
timer event (24999 us): Hello, I'm resettimer, this = 2000B760, timer = 2000BA98
port_doing_reset = 6
PORT_RECOVERY
new_Device: 12 Mbit/sec
new_Pipe
enumeration:
enumeration:
ERROR Followup
remove from followup list
stray halted 20004120
qtd: 200084A0, token=80120180, next=20004120
qtd: 20004120, token=80008080, next=20008460
dummy halt: 20008460
enumeration:
Device Descriptor:
12 01 00 02 00 00 00 40 32 08 0B 00 02 02 02 00 00 09
VendorID = 0832, ProductID = 000B, Version = 0202
Class/Subclass/Protocol = 0 / 0 / 0
Number of Configurations = 9
remain on followup list
remain on followup list
remain on followup list
remain on followup list
ERROR Followup
remain on followup list
remove from followup list
stray halted 20009520
qtd: 200073E0, token=87FC0180, next=20009520
qtd: 20009520, token=80008080, next=200040E0
dummy halt: 200040E0
enumeration:
remain on followup list
remain on followup list
remain on followup list
remain on followup list
ERROR Followup
remain on followup list
remain on followup list
remove from followup list
stray halted 20004120
qtd: 200073A0, token=80090180, next=20004120
qtd: 20004120, token=80008080, next=20008460
dummy halt: 20008460
enumeration:
Config data length = 512
remain on followup list
remain on followup list
remain on followup list
remain on followup list
ERROR Followup
remain on followup list
remain on followup list
remain on followup list
remove from followup list
stray halted 20009520
qtd: 20006320, token=82000180, next=20009520
qtd: 20009520, token=80008080, next=200040E0
dummy halt: 200040E0
enumeration:
Configuration Descriptor:
02 00
error: config must be 9 bytes
remain on followup list
remain on followup list
remain on followup list
ERROR Followup
remain on followup list
remain on followup list
remain on followup list
remain on followup list
remove from followup list
stray halted 20004120
qtd: 20004120, token=80008180, next=20008460
dummy halt: 20008460
enumeration:
USBHub memory usage = 960
USBHub claim_device this=2000BB20
USBDeviceInfo claim this=2000CA48
****************************************
** Device Level **
vid=832
pid=B
bDeviceClass = 0
bDeviceSubClass = 0
bDeviceProtocol = 0
08 0B 00 02 02 02 00 00 09 04 00 00 01 02 02 00 04 05 24 00 10 01 05 24 01 01 01 04 24 02 02 05
24 06 00 01 07 05 81 03 40 00 10 09 04 01 00 02 0A 00 00 05 07 05 02 02 40 00 00 07 05 82 02 40
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
HIDParser claim this=200095A0
HIDParser claim this=20009C60
HIDParser claim this=2000A320
HIDParser claim this=2000A9E0
HIDParser claim this=2000B0A0
Descriptor 11 = IAD
Descriptor 4 = INTERFACE
USBDeviceInfo claim this=2000CA48
****************************************
** Interface Level **
09 04 00 00 01 02 02 00 04 05 24 00 10 01 05 24 01 01 01 04 24 02 02 05 24 06 00 01 07 05 81 03
40 00 10 09 04 01 00 02 0A 00 00 05 07 05 02 02 40 00 00 07 05 82 02 40 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
bInterfaceNumber = 0
number end points = 1
bInterfaceClass = 2
bInterfaceSubClass = 2
Communicatons and CDC
bInterfaceProtocol = 0
HIDParser claim this=200095A0
HIDParser claim this=20009C60
HIDParser claim this=2000A320
HIDParser claim this=2000A9E0
HIDParser claim this=2000B0A0
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 5 = ENDPOINT
Descriptor 4 = INTERFACE
USBDeviceInfo claim this=2000CA48
****************************************
** Interface Level **
09 04 01 00 02 0A 00 00 05 07 05 02 02 40 00 00 07 05 82 02 40 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
bInterfaceNumber = 1
number end points = 2
bInterfaceClass = 10
bInterfaceSubClass = 0
CDC-Data
bInterfaceProtocol = 0
HIDParser claim this=200095A0
HIDParser claim this=20009C60
HIDParser claim this=2000A320
HIDParser claim this=2000A9E0
HIDParser claim this=2000B0A0
Descriptor 5 = ENDPOINT
Descriptor 5 = ENDPOINT
Descriptor 0 = ???
Descriptor 0 = ???
Descriptor 0 = ???
Descriptor 0 = ???
Descriptor 0 = ???
"Loops forever printing this and floods the USB port"