Universal Serial Bus: Difference between revisions

m
fixed misspelling
[unchecked revision][unchecked revision]
m (→‎Introduction: Error: XHCI allows USB 3.0, not 2.0)
m (fixed misspelling)
 
(8 intermediate revisions by 5 users not shown)
Line 2:
 
== Introduction ==
Despite how attractive USB support is, the 650-page USB 2.0 specification manages to deter even some of the most driven hobbyists (especially if English isn't their primary language). Not only is the USB 2.0 specification long, but it's a prerequisite for the [[XHCI]], [[EHCI]], [[UHCI]], and [[OHCI]] specifications, all of which mustdefine bethe implementedactual forhardware fullOSes USBinterface 3with.0 support (if you only want USB 1.0, you still need UHCI and OHCI). Furthermore, the USB specification defines a plethora of terms, some used interchangeably and seemingly lazily; as a lengthy technical document, it is neither easy nor practical to flip back and forth to clarify a confusing term or concept.
 
=== What this text covers ===
Line 36:
{{Main|eXtensible Host Controller Interface}}
 
Like its predecessor USB 2.0, USB 3.0 has only one host controller specification: Intel's '''eXtensible Host Controller Interface'''. Unlike its predecessor EHCI, however, xHCI controllers can and do interface with USB 1.0 and 2.0 devices without the use of companion controllers. Even on early hardware where there was both an EHCI and xHCI controller included (so that OSes which did not yet support xHCI could still use at least some USB devices), ports attached to the EHCI controller could generally be "re-routed" to the xHCI controller, and the EHCI controller disabled entirely.
In late 2008, the USB-IF released the USB 3.0 specifications. USB 3.0 host controllers are just starting to make their way into consumer devices since NEC introduced the world's first “SuperSpeed USB 3.0 host controller” in May, 2009, [http://www.techspot.com/news/34763-nec-introduces-worlds-first-usb-30-host-controller.html techspot reports].
 
Also unlike its predecessors, xHCI was designed with some degree of ''forwards compatibility'', so that revisions to the USB specification can be made without designing a new host controller interface (for instance, USB 3.1 and 3.2 add new speeds, with only minor updates to the specification to match them.) Unfortunately, this means that xHCI bears only a passing resemblance to the controllers that came before it, and make it challenging to write drivers for.
Intel is currently working on a USB 3.0 host controller specification called the '''eXtensible Host Controller Interface''' ('''xHCI''').
 
A Linux driver is available for reference [http://git.kernel.org/?p=linux/kernel/git/sarah/xhci.git;a=summary here] developed by Sarah Sharp at Intel.
 
In 2009, NEC introduced the [http://www.am.necel.com/usb/product/upd720200.html µPD720200], a USB 3.0 host controller compliant with Intel's draft [[xHCI]] specification.
 
On June 18th, 2010, Intel publicly released the xHCI specification.
 
== Basic Concepts and Nomenclature ==
Line 59 ⟶ 53:
All functions understand the USB protocol, respond to standard operations (e.g, configuration or reset), and describe capabilities to the USB host.
 
There are threefour speed classes of functions:
* '''Super-speed''' functions operate at up to 5 Gb/s.
* '''High-speed''' functions operate at up to 480 Mb/s.
* '''Full-speed''' functions operate at up to 12 Mb/s.
* '''Low-speed''' functions operate at up to 1.5 Mb/s.
 
The original USB specification defined low- and full-speed devices, while USB 2.0 added high-speed devices. and USB 3.0 will add a fourth transferadded super-speed of up to 5 Gb/s, called SuperSpeeddevices.
 
===== Hubs =====
Line 2,044 ⟶ 2,039:
Additionally, host controller drivers are loaded by the PCI subsystem when a corresponding host controller is discovered during PCI enumeration. The host controller driver is thus also responsible for initializing the host controller and perhaps loading the USB Hub Driver and the USB driver. Combined, the USB driver, USB hub driver, and the host controller driver make up a USB subsystem.
 
=== LinksSee Also ===
=== External Links ===
* [http://www.usb.org/home USB.org]
* [httphttps://www.usb.org/developersdocument-library/docs/usb_20_110512.zipusb-20-specification USB Universal Serial Bus Revision 2.0 Specification]
* [httphttps://www.usb.org/developersdocument-library/docs/usb_30_spec_122012.zipusb-32-specification-released-september-22-2017-and-ecns UnivseralUniversal Serial Bus Revision 3.02 Specification]
* [http://www.usb.org/developers/wusb/wusb1_1_20100910.zip Wireless USB Specification Revision 1.1]
* [http://www.kernel.org/ The Linux kernel] (though things tendstend to be confusing there, andplus you have to be careful with educating yourself from Linux sources if your project isn't GPL'ed).
* [http://www.beyondlogic.org/usbnutshell/usb1.htmshtml USB in a NutshellNutShell] may also interest you. It looks like a really good tutorial giving all the required knowledge to understand any other USB documentation/source code in a couple of HTML pages ...
* [http://www.usb.org/developers/docs/USB_LANGIDs.pdf Currently accepted LANGIDs]
* [http://www.usbmadesimple.co.uk/index.html USB Made Simple]
 
* [https://www.fysnet.net/the_universal_serial_bus.htm USB: The Universal Serial Bus] is a book on writing device/system drivers for UHCI, OHCI, EHCI, and xHCI with various example devices and available source code.
=== Forum Topics ===
* [[Topic:21103|Implementing USB Support]] - Briefly covers the necessary steps in EHCI configuration to ensure that the UHCI or OHCI companion controllers can handle all USB devices (e.g, before EHCI support is implemented where some BIOS may configure a device via EHCI during boot). May also be helpful for those new to EHCI who aren't sure how to manipulate/use the EHCI's registers.
* [[Topic:8096|USB driver]] - suggests a few startup links about USB
* [[Topic:9063|Collecting links about USB]] - PypeClicker and Df's collection of links about USB
 
[[Category:USB]]
9

edits