I'm learning some basics about USB using USB in a NutShell for a course.

One of the questions asked in previous years is How do you know - once the device is attached - that high speed is supported, and how are you effectively going to set it to high speed?.

Now, information about High Speed is found in the Speed Identification part of the course. I quote from the text:

Once it has been attached, it will do a high speed chirp during reset and establish a high speed connection if the hub supports it. If the device operates in high speed mode, then the pull up resistor is removed to balance the line.

But how can a device do a high speed chirp? And the establishing of a high sped connection is also very vague. Can someone clarify?

  • What part of the specification is confusing exactly? The host device is responsible for the doing high speed chirp . Depending on the response of the device connected to the host device the resistor is then set. – Ramhound Dec 31 '13 at 15:03
  • @Ramhound: So the Host does the chirp, and if the connected device is high speed it will receive the chirp and remove the pull up resistor? I read it as in the connected device did the chirp. – jdepypere Dec 31 '13 at 15:10
  • 1
    It seems like the how the chirp is implemented depends on the vendor of the USB chip itself. I don't think it matter if the client device or host device does the chirp, because if either don't support it, the resistor isn't set. Of course "Once it has been attached, it will do a high speed chirp during reset and establish a high speed connection if the hub supports it." indicates the Host device indeeds does the intial chirp. – Ramhound Dec 31 '13 at 15:28

From http://www.usbmadesimple.co.uk/ums_6.htm, section Negotiating High Speed.

The device leaves its D+ 1.5K pullup resistor connected, and does not terminate the lines with 45 Ohm resistors as it would for high speed. But it drives high speed current (17.78mA) into the D- line for at least a millisecond. Now, remember that the hub is applying a reset condition to the lines, so effectively is already terminated as for high speed data. As only one end of the link is terminated, the hub will see about 800 mV on D-. This condition is called a K-chirp.

A full / low speed hub will pay no attention to this condition, but a high speed hub will detect it using its differential receiver and the absence of a squelch signal.

If the hub is high speed capable then it will monitor the K-chirp from the device until it sees it completing. It must, within 100us, send a series of K-J chirp pairs to the device. This means that it will inject 17.78 mA alternately into the D- and the D+ lines. Each of these chirps lasts around 50us, and there are no gaps between them. The device has to see at least 3 chirp pairs before assuming that the hub is high speed capable.

At this point the device disconnects its 1.5K pullup resistor, applies the 45 Ohm high speed terminations (using its full speed data driver in SE0 mode), and is thus in a state to perform high speed data transmission and reception.

So, when you plug a device in, it'll put 17.78mA of current into the D- line (called a K-chirp). A full speed host will ignore this signal and transmission will continue using full speed.

But if the host is capable of high speed transmission, it'll wait until the initial K-chirp is complete. Then, within 100us, the host will put 17.78mA alternatively into the D+ and D- line (called a K-J chirp pair), each lasting 50us. If the device sees at least 3 chirp pairs, it'll initialize high speed transmission.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.