I got my hardware several weeks ago and have played with it since then… Now I have a simple question which I find no information in the FAQ or manual - is there a way that I can set the hardware to run at full-speed? Say by holding down a button or setting the switches to a pattern before plugging in the USB cable. I know I can find a PC with full-speed USB port and the kit will operate at full-speed. But nowadays, it is hard to find one. All the PCs I have here are equipped with high-speed USB port.
I guess the answer is no… otherwise it would have been mentioned in the manual. But you know sometime what so called ‘undocumented feature’ might exist
I got my hardware several weeks ago and have played with it since then… Now I have a simple question which I find no information in the FAQ or manual - is there a way that I can set the hardware to run at full-speed? Say by holding down a button or setting the switches to a pattern before plugging in the USB cable. I know I can find a PC with full-speed USB port and the kit will operate at full-speed. But nowadays, it is hard to find one. All the PCs I have here are equipped with high-speed USB port.
I guess the answer is no… otherwise it would have been mentioned in the manual. But you know sometime what so called ‘undocumented feature’ might exist
You can set a bit in the FX2 firmware to tell it to do this, but I don’t
know if OSR ships the firmware source code or not.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.
As far as I know, the firmware source code is not shipped with the kit, or it’s published on OSR website. Anyway the source code is not much of help to me because I do not have the necessary tool suite to compile it.
So I guess if the speed selection feature is not implemented in the current firmware, I am out of luck Fine. I just wanted to watch the high-speed vs full-speed traffic during enumeration with a traffic sniffer.
As far as I know, the firmware source code is not shipped with the kit, or it’s published on OSR website. Anyway the source code is not much of help to me because I do not have the necessary tool suite to compile it.
So I guess if the speed selection feature is not implemented in the current firmware, I am out of luck Fine. I just wanted to watch the high-speed vs full-speed traffic during enumeration with a traffic sniffer.
It should be easy to find a USB 1.1 device to test this with. Surely
you must have an older USB mouse or keyboard, or an older USB printer
hanging around?
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.
Try with a 1.1 external hub.
PaoloC
----- Original Message -----
From: xxxxx@gmail.com
To: Windows System Software Devs Interest List
Sent: Thursday, February 21, 2008 7:24 PM
Subject: [ntdev] OSR FX2 Learning Kit
Hi,
I got my hardware several weeks ago and have played with it since then… Now I have a simple question which I find no information in the FAQ or manual - is there a way that I can set the hardware to run at full-speed? Say by holding down a button or setting the switches to a pattern before plugging in the USB cable. I know I can find a PC with full-speed USB port and the kit will operate at full-speed. But nowadays, it is hard to find one. All the PCs I have here are equipped with high-speed USB port.
I guess the answer is no… otherwise it would have been mentioned in the manual. But you know sometime what so called ‘undocumented feature’ might exist
The OSR USB FX2 board dynamically switches configurations when it’s plugged in.
It’s “normal” speed configuration is full-speed. It uses an alternate speed configuration for high speed, and swaps this to be configuration #1 during (the selected configuration) if a high-speed bus is detected.
We didn’t build any facility in the make the device choose a particular speed. We’d be happy to add it if there was general interest, but in the few years we’ve been building these boards, this is the first such request we’ve received.
Thanks very much to all who responded. I tried to locate if I have those USB 1.1 devices or hubs, but really can’t find one handy. I think this might be due to those v1.1 hardware are gone now. The most likely device that I can get is probably a USB mouse, not a USB 1.1 mouse but USB 2.0 I believe. But I think a mouse will only work at full-speed regardless of the speed of USB port and USB specification version the mouse supports. It has quite different enumeration process though compared to the FX2 kit, I think.
> …but in the few years we’ve been building these boards, this is
the first such request we’ve received…
Hello Peter,
I think that is mainly due to a few years back, we could set the FX2 kit to work at full-speed easily. On those days, a PC with full-speed USB port or a full-speed USB hub was still commonly available
On many pCs you can set the BIOS to force USB 1.1 ie “full-speed” as
the maximum. Also, to my knowledge, all keyboards and mice are low-
speed devices (1.5 mbit).
There are also plenty of devices out there that are USB 2.0 compliant
that do not support “high speed” and they will not have the “High
Speed” USB logo on the box, but can still claim 2.0 compatibility.
These devices will operate at 12mbit/s.
> …but in the few years we’ve been building these boards, this is
> the first such request we’ve received…
Hello Peter,
I think that is mainly due to a few years back, we could set the FX2
kit to work at full-speed easily. On those days, a PC with full-
speed USB port or a full-speed USB hub was still commonly available
Thanks very much to all who responded. I tried to locate if I have those USB 1.1 devices or hubs, but really can’t find one handy. I think this might be due to those v1.1 hardware are gone now. The most likely device that I can get is probably a USB mouse, not a USB 1.1 mouse but USB 2.0 I believe. But I think a mouse will only work at full-speed regardless of the speed of USB port and USB specification version the mouse supports. It has quite different enumeration process though compared to the FX2 kit, I think.
Actually, your USB mouse probably works at LOW speed, not full speed.
All of mine do.
Why do you think the enumeration process is so different? Have you read
through the USB specification? The USB specification is surprisingly
readable, as such specs go, and should be required reading for anyone
working on USB hardware.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.
Thanks very much to all who responded. I tried to locate if I have those USB 1.1 devices or hubs, but really can’t find one handy. I think this might be due to those v1.1 hardware are gone now. The most likely device that I can get is probably a USB mouse, not a USB 1.1 mouse but USB 2.0 I believe. But I think a mouse will only work at full-speed regardless of the speed of USB port and USB specification version the mouse supports. It has quite different enumeration process though compared to the FX2 kit, I think.
> Does that actually work? The USB 1.x controllers are provided by the
USB 2.x controller. Are they actually enumerated separately?
An EHCI host controller and its associated OHCI or UHCI “Companion Controllers” are logically different PCI Functions of the same PCI Device. As such there is a separate driver instance loaded for the EHCI host controller and each of its associated OHCI or UHCI “Companion Controllers”.
It actually greatly complicates some things that they are enumerated as separate devices as there is no guaranteed PnP and Power request order between the multiple controllers which are sharing the same physical ports. USB devices should not be enumerated on a companion controller before the EHCI controller has finished enumerating devices, otherwise USB devices can appear to jump between the two controllers and that can cause some timing related issues and bad user experiences.
Anyway, if the EHCI controller is disabled in Device Manager the Configure Flag bit in the Configure Flag Register (section 2.3.8 in the EHCI specification) is cleared and all root hub ports are routed to the associated companion controller and any high-speed devices which were attached should be re-enumerated as full-speed devices.
> Actually, your USB mouse probably works at LOW speed,
not full speed.
All of mine do.
Why do you think the enumeration process is so
different? Have you read through the USB specification?
The USB specification is surprisingly readable, as such
specs go, and should be required reading for anyone
working on USB hardware.
Hi Tim,
I have relocated one of my old development board, loading it with the sample firmware, which is provided by the chip manufacturer. The sample is demonstrating a HID mouse! That why I had vaguely recalled that I had seen a full-speed mouse before. I got the impression that a mouse might work either at low-speed or full-speed. Seriously I never got the chance to see a real USB mouse until today I purposely bought a new USB mouse just to carry out some test. Yes my new mouse operates at low-speed. Sounds like a low-speed mouse is still very common today.
You’re right. I’m working on my hardware/firmware right now. I have been reading the USB 2.0 spec together with the USB complete book by Jan Axelson since the first day I was working with the hardware. I have had past experience with the hardware side of thing. Though I only did it with the HID class or the driver in binary form provided by the manufacturer. The current task is to develop the hardware, together with the required Windows driver. This is the first time I have to roll my own Windows driver. So I think it makes sense to start with something that is known to be working. OSR learning kit together with its sample seem to be a nice choice. The main reason I wanted to see the enumeration process is to make sure that my hardware follows exactly the configuration of OSR kit since I am working with the OSR sample driver. I have added in my own vendor command among many other thing… everything seem to be fine from the Windows application point of view. I just wanted to see it for myself what is happening behind the scene, especially during enumeration process. A mouse enumeration process would offer the same purpose, however, it has minor difference in its HID class specific kind of things.
> An easier thing to do is to go into device manager and disable
your EHCI controllers. Then the device would be forced
to enumerate over full speed.
Hello Randy (and also a member who suggested the same to me by direct e-mail),
Thanks very much for the suggestion.
I have tried it but it didn’t work. I have a couple of USB devices connected, mostly they were development tools. In my device manager, I can see my controllers are either “Intel(R) ICH8 Family USB Universal Host Controller” or “Intel(R) ICH8 Family USB2 Universal Host Controller”. They are listed together with some kind of address next to its name. To be accurate, they are total 5 of the former, 2 of the latter. When I disabled the one on top of the list, nothing happened. I mean all devices attached to the USB ports still working. So I guessed the controller that was just disabled might be associated to a port that currently has no device attached to it. And I kept disabling the port whilst monitoring all the devices that was attached. At some point, disabled one controller would cause 2 devices stop working. And when I plugged the OSR kit to that port, nothing happened. It didn’t enumerated to a full-speed device as suggested. Was I doing anything wrongly?
> I have tried it but it didn’t work. I have a couple of USB devices
connected, mostly they were development tools. In my device manager, I
can see my controllers are either “Intel(R) ICH8 Family USB Universal
Host Controller” or “Intel(R) ICH8 Family USB2 Universal Host
Controller”. They are listed together with some kind of address next
to its name. To be accurate, they are total 5 of the former, 2 of the
latter. When I disabled the one on top of the list, nothing happened.
I mean all devices attached to the USB ports still working. So I
guessed the controller that was just disabled might be associated to a
port that currently has no device attached to it. And I kept disabling
the port whilst monitoring all the devices that was attached. At some
point, disabled one controller would cause 2 devices stop working.
And when I plugged the OSR kit to that port, nothing happened. It
didn’t enumerated to a full-speed device as suggested. Was I doing
anything wrongly?
An Intel ICH8 implements the following set of USB host controllers, where D29 or D26 is the PCI device number (or 0x1D or 0x1A) and F0, F1, F2, F7 is the PCI function number on that PCI device number, and 283xh is the PCI device ID:
D29:F0 USB UHCI #1 2830h
D29:F1 USB UHCI #2 2831h
D29:F2 USB UHCI #3 2832h
D29:F7 USB EHCI #1 2836h
D26:F0 USB UHCI #4 2834h
D26:F1 USB UHCI #5 2835h
D26:F7 USB EHCI #2 283Ah
The first three UHCI controllers listed above are companion controllers for the first EHCI controller, and the last two UHCI controllers are companion controllers for the second EHCI controller.
If you want to force all devices to enumerate as full-speed instead of high-speed you would only want to disable the two EHCI controllers, 2836 and 283A in this case. Leave all of the UHCI controllers enabled.
I have added in my own vendor command among many other thing… everything seem to be fine from the Windows application point of view. I just wanted to see it for myself what is happening behind the scene, especially during enumeration process. A mouse enumeration process would offer the same purpose, however, it has minor difference in its HID class specific kind of things.
It is important here to distinguish between “USB enumeration”, which is
the bus process by which a USB device is first detected (electrically)
and identified to the host controller, and “PnP enumeration”, which is
the Windows process by which a bus driver reports a child device
identifier, and starts the process of loading a specific driver for that
device.
I’m not sure which one you are talking about. The USB enumeration
process is identical for all devices, regardless of class. It happens
at a level below that. The PnP enumeration process is also practically
the same. The only difference for HID devices is that usually there
isn’t a specific driver for that VID/PID, so it has to fall back to the
general class identifier.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.