Hi everyone,
for a project I need to control a few different systems with the host serial of teensy.
Among these systems I will have to be able to control another Teensy with a Hub.
I soldered a usb connector to the USB host pins of my master teensy. And can recognize successfully some commercial USB thermometers and hubs.
I am using the library USBHost_t36 with the exemple USBHost_t36/Test/SerialTest.ino
If I plug a hub and my thermometer (which send the line #CT periodically before I unplug it in my test). The program recognize it without any problem.
Code:
USB Host Testing - Serial
*** Device Hub1 1a40:101 - connected ***
product: USB 2.0 Hub
*** Device Hub2 1a40:101 - connected ***
product: USB 2.0 Hub
#CT
#CT
#CT
*** Device USerial 483:5740 - connected ***
manufacturer: STMicroelectronics
product: STM32 Virtual COM Port
Serial: CT000
#CT
#CT
#CT
#CT
*** Device USerial - disconnected ***
But when I try to plug another Teensy to my USB host nothing happen. (same thing with the HUB or without).
I digged a bit in the code and uncommented the line :
//#define USBHOST_PRINT_DEBUG in USBHost_t36.h to get a bit more informations. When I plug the teensy I get:
Code:
USB Host Testing - Serial
USB2 PLL running
reset waited 6
USBHS_ASYNCLISTADDR = 0
USBHS_PERIODICLISTBASE = 20005000
periodictable = 20005000
port change: 10001803
connect
port change: 1C001002
disconnect
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 02 00 00 40 C0 16 83 04 80 02 01 02 03 01
VendorID = 16C0, ProductID = 0483, Version = 0280
Class/Subclass/Protocol = 2 / 0 / 0
Number of Configurations = 1
enumeration:
enumeration:
Manufacturer: Teensyduino
enumeration:
Product: USB Serial
enumeration:
Serial Number: 8823250
enumeration:
Config data length = 67
enumeration:
Configuration Descriptor:
09 02 43 00 02 01 00 C0 32
NumInterfaces = 2
ConfigurationValue = 1
09 04 00 00 01 02 02 01 00
Interface = 0
Number of endpoints = 1
Class/Subclass/Protocol = 2 / 2 / 1
05 24 00 10 01
05 24 01 01 01
04 24 02 06
05 24 06 00 01
07 05 82 03 10 00 05
Endpoint = 2 IN
Type = Interrupt
Max Size = 16
Polling Interval = 5
09 04 01 00 02 0A 00 00 00
Interface = 1
Number of endpoints = 2
Class/Subclass/Protocol = 10 / 0 / 0
07 05 03 02 00 02 00
Endpoint = 3 OUT
Type = Bulk
Max Size = 512
Polling Interval = 0
07 05 84 02 00 02 00
Endpoint = 4 IN
Type = Bulk
Max Size = 512
Polling Interval = 0
enumeration:
USBHub memory usage = 960
USBHub claim_device this=20003C40
USBHub memory usage = 960
USBHub claim_device this=20003880
HIDParser claim this=20002C40
HIDParser claim this=20003260
HIDParser claim this=200046C0
USBSerial claim this=20004080
vid=16C0, pid=483, bDeviceClass = 2, bDeviceSubClass = 0, bDeviceProtocol = 0
09 04 00 00 01 02 02 01 00 05 24 00 10 01 05 24 01 01 01 04 24 02 06 05 24 06 00 01 07 05 82 03 10 00 05 09 04 01 00 02 0A 00 00 00 07 05 03 02 00 02 00 07 05 84 02 00 02 00
Interface is Serial
CS_INTERFACE - subtype: 0 10 1 - Header Functional Descriptor
CS_INTERFACE - subtype: 1 1 1 - Call Management Functional
CS_INTERFACE - subtype: 2 6 - Abstract Control Management
CS_INTERFACE - subtype: 6 0 1 - union Functional
Interface: 1
Endpoint: 3
tx_size = 512
Endpoint: 84
rx_size = 512
exited loop rx:4, tx:3
Descriptor 4 = INTERFACE
HIDParser claim this=20002C40
HIDParser claim this=20003260
HIDParser claim this=200046C0
USBSerial claim this=20004080
vid=16C0, pid=483, bDeviceClass = 2, bDeviceSubClass = 0, bDeviceProtocol = 0
09 04 00 00 01 02 02 01 00 05 24 00 10 01 05 24 01 01 01 04 24 02 06 05 24 06 00 01 07 05 82 03 10 00 05 09 04 01 00 02 0A 00 00 00 07 05 03 02 00 02 00 07 05 84 02 00 02 00
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 36 = ???
Descriptor 5 = ENDPOINT
Descriptor 4 = INTERFACE
HIDParser claim this=20002C40
HIDParser claim this=20003260
HIDParser claim this=200046C0
USBSerial claim this=20004080
vid=16C0, pid=483, bDeviceClass = 2, bDeviceSubClass = 0, bDeviceProtocol = 0
09 04 01 00 02 0A 00 00 00 07 05 03 02 00 02 00 07 05 84 02 00 02 00
Descriptor 5 = ENDPOINT
Descriptor 5 = ENDPOINT
For comparison if I do the same with the termometer I get that:
Code:
USB Host Testing - Serial
USB2 PLL running
reset waited 6
USBHS_ASYNCLISTADDR = 0
USBHS_PERIODICLISTBASE = 20005000
periodictable = 20005000
port change: 10001803
connect
port change: 1C001002
disconnect
port change: 10001803
connect
begin reset
port change: 10001005
port enabled
end recovery
new_Device: 12 Mbit/sec
new_Pipe
enumeration:
enumeration:
enumeration:
Device Descriptor:
12 01 00 02 02 00 00 40 83 04 40 57 00 02 01 02 03 01
VendorID = 0483, ProductID = 5740, Version = 0200
Class/Subclass/Protocol = 2 / 0 / 0
Number of Configurations = 1
enumeration:
enumeration:
Manufacturer: STMicroelectronics
enumeration:
Product: STM32 Virtual COM Port
enumeration:
Serial Number: CT00001
enumeration:
Config data length = 67
enumeration:
Configuration Descriptor:
09 02 43 00 02 01 00 C0 FA
NumInterfaces = 2
ConfigurationValue = 1
09 04 00 00 01 02 02 01 00
Interface = 0
Number of endpoints = 1
Class/Subclass/Protocol = 2 / 2 / 1
05 24 00 10 01
05 24 01 00 01
04 24 02 02
05 24 06 00 01
07 05 82 03 08 00 FF
Endpoint = 2 IN
Type = Interrupt
Max Size = 8
Polling Interval = 255
09 04 01 00 02 0A 00 00 00
Interface = 1
Number of endpoints = 2
Class/Subclass/Protocol = 10 / 0 / 0
07 05 03 02 40 00 00
Endpoint = 3 OUT
Type = Bulk
Max Size = 64
Polling Interval = 0
07 05 81 02 40 00 00
Endpoint = 1 IN
Type = Bulk
Max Size = 64
Polling Interval = 0
enumeration:
USBHub memory usage = 960
USBHub claim_device this=20003C40
USBHub memory usage = 960
USBHub claim_device this=20003880
HIDParser claim this=20002C40
HIDParser claim this=20003260
HIDParser claim this=200046C0
USBSerial claim this=20004080
vid=483, pid=5740, bDeviceClass = 2, bDeviceSubClass = 0, bDeviceProtocol = 0
09 04 00 00 01 02 02 01 00 05 24 00 10 01 05 24 01 00 01 04 24 02 02 05 24 06 00 01 07 05 82 03 08 00 FF 09 04 01 00 02 0A 00 00 00 07 05 03 02 40 00 00 07 05 81 02 40 00 00
Interface is Serial
CS_INTERFACE - subtype: 0 10 1 - Header Functional Descriptor
CS_INTERFACE - subtype: 1 0 1 - Call Management Functional
CS_INTERFACE - subtype: 2 2 - Abstract Control Management
CS_INTERFACE - subtype: 6 0 1 - union Functional
Interface: 1
Endpoint: 3
tx_size = 64
Endpoint: 81
rx_size = 64
exited loop rx:1, tx:3
rx buffer size:196
tx buffer size:196
new_Pipe
new_Pipe
Control - CDCACM DTR...
*** Device USERIAL1 483:5740 - connected ***
manufacturer: STMicroelectronics
product: STM32 Virtual COM Port
Serial: CT000
control callback (serial) 6
CDCACM setup: 00 C2 01 00 00 00 08
control callback (serial) 4
Control - 0x21,0x22, 0x3
control callback (serial) 0
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 3B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
rx token: 803B8100 transfer length: 64 len:5 - 23 43
rx: 23 43 54 0D 0A
#CT
It looks like some descriptors (Descriptor 36 = ???) are not recognized and the program just loop trying to get the missing informations.
If someone has an idea how to proceed from here it would be helpful.
Thanks
Alex