All,
I am trying to figure out the UHCI/EHCI USB controller architecture.
I currently have a test PC running WinXP SP3 that has and UHCI and EHCI
controllers. The PC exposes 6-USB 2.0 ports. If I connect a high speed
device to any of the ports it always gets connected (I am using the Device
Manager to “View by Connection” the USB-PCI nodes) to the EHCI node. If I
insert a USB 1.1 device into the same port it always gets connected to the
UHCI. So it would appear that the external ports are not hardwired to the
various controller port but that something detects the speed and then
switches the controller as is appropriate. Can someone tell me what is
actaully going on here?
TIA.
Jimmy James wrote:
I am trying to figure out the UHCI/EHCI USB controller architecture.
I currently have a test PC running WinXP SP3 that has and UHCI and EHCI
controllers. The PC exposes 6-USB 2.0 ports. If I connect a high speed
device to any of the ports it always gets connected (I am using the Device
Manager to “View by Connection” the USB-PCI nodes) to the EHCI node. If I
insert a USB 1.1 device into the same port it always gets connected to the
UHCI. So it would appear that the external ports are not hardwired to the
various controller port but that something detects the speed and then
switches the controller as is appropriate. Can someone tell me what is
actaully going on here?
I believe most of this is covered in the EHCI spec, although that spec
is pretty dense.
Each EHCI host controller also exposes one or more “virtual” UHCI
controllers. When you plug in your USB 1.1 device, the host controller
does the speed detection sequence, and based on the results of that
sequence, the host controller driver decides whether to expose the
device as a child of its EHCI node, or as a child of a UHCI node.
The wiring doesn’t change. The same port will always get you to the
same EHCI controller. It’s mostly just software.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.
These are called companion controllers (and they are gone for usb3)
d
Sent from my phone with no t9, all spilling mistakes are not intentional.
-----Original Message-----
From: Jimmy James
Sent: Friday, August 07, 2009 9:13 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] UHCI/EHCI USB controller architecture
All,
I am trying to figure out the UHCI/EHCI USB controller architecture.
I currently have a test PC running WinXP SP3 that has and UHCI and EHCI
controllers. The PC exposes 6-USB 2.0 ports. If I connect a high speed
device to any of the ports it always gets connected (I am using the Device
Manager to “View by Connection” the USB-PCI nodes) to the EHCI node. If I
insert a USB 1.1 device into the same port it always gets connected to the
UHCI. So it would appear that the external ports are not hardwired to the
various controller port but that something detects the speed and then
switches the controller as is appropriate. Can someone tell me what is
actaully going on here?
TIA.
—
NTDEV is sponsored by OSR
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
Checkout the EHCI spec especially Section 4.2, Port Routing and Control. It
says a “USB 2.0 Host controller is comprised of one high-speed host
controller, which implements the EHCI programming interface and 0 to N USB
1.1 companion host controllers.” The UHCI or OHCI companion controller(s)
are “switched to” by port routing logic behind the port transceivers. So a
single port can be connected to either an EHCI controller or a companion
controller.
Stan Mitchell
|-----Original Message-----
|From: xxxxx@lists.osr.com [mailto:bounce-376114-
|xxxxx@lists.osr.com] On Behalf Of Jimmy James
|Sent: Friday, August 07, 2009 9:12 AM
|To: Windows System Software Devs Interest List
|Subject: [ntdev] UHCI/EHCI USB controller architecture
|
|All,
|
|I am trying to figure out the UHCI/EHCI USB controller architecture.
|
|I currently have a test PC running WinXP SP3 that has and UHCI and EHCI
|controllers. The PC exposes 6-USB 2.0 ports. If I connect a high speed
|device to any of the ports it always gets connected (I am using the Device
|Manager to “View by Connection” the USB-PCI nodes) to the EHCI node. If I
|insert a USB 1.1 device into the same port it always gets connected to the
|UHCI. So it would appear that the external ports are not hardwired to the
|various controller port but that something detects the speed and then
|switches the controller as is appropriate. Can someone tell me what is
|actaully going on here?
|
|TIA.
|
|
|
|—
|NTDEV is sponsored by OSR
|
|For our schedule of WDF, WDM, debugging and other seminars visit:
|http://www.osr.com/seminars
|
|To unsubscribe, visit the List Server section of OSR Online at
|http://www.osronline.com/page.cfm?name=ListServer
Thanks everyone for your good answers.
“Jimmy James” wrote in message news:xxxxx@ntdev…
> All,
>
> I am trying to figure out the UHCI/EHCI USB controller architecture.
>
> I currently have a test PC running WinXP SP3 that has and UHCI and EHCI
> controllers. The PC exposes 6-USB 2.0 ports. If I connect a high speed
> device to any of the ports it always gets connected (I am using the Device
> Manager to “View by Connection” the USB-PCI nodes) to the EHCI node. If I
> insert a USB 1.1 device into the same port it always gets connected to the
> UHCI. So it would appear that the external ports are not hardwired to the
> various controller port but that something detects the speed and then
> switches the controller as is appropriate. Can someone tell me what is
> actaully going on here?
>
> TIA.
>
>
To be clear about Tim’s comment “it’s mostly software”:
The UHCI controllers behind the EHCI controller are very real, in terms of how the hardware is presented to the OS. Each of the (multiple, usually 4) UHCI controllers are separate devices, with separate VIDs and DIDs… and you can grab them and program them successfully without any reference to the EHCI controller.
This is how systems that support USB V1.x (UHCI/OHCI) but not USB V2.0 (EHCI) work: They find the UHCI controllers and load a UHCI driver on that instance.
Of course, I can’t think of the last shipping system that actually tried to DO this… so it’s entirely possible that some weirdo dependency between the EHCI and UHCI implementations crop up.
Peter
OSR