USB
Contents
Предназначение
Проектира се с цел да замени различни бавни интерфейси за предаване на данни, като паралелен, сериен, PS/2 с обща шина, към която могат да се включват всички тези устройства ползващи споменатите интерфейси.
USB интерфейсът има за цел и да улесни разработката на драйвери за нови периферни устройства.
Основни предимства:
- Автоматичнo конфигуриране (Plug and Play);
- Динамична инициализация (hot plug);
- Поддръжка на различни скорости и типове данни.
- 127 адреса за устройства.
USB архитектура
Дизайнът на USB архитектурата е асиметричен с топология тип звезда с максимум 7 нива. Топологията е изградена от три елемента: един хост, връзки, устройства (host, interconnects, devices).
От своя страна устройствата са хъбове и функции (функционалности)(hubs and functions).
- Управлението на USB системата се извършва единствено от хоста, към който е включен root hub-a (основният хъб). Посредством маркери (token) USB хоста оведомява кога някое устройство може да предава данни.
- Данните се предават на пакети разположени в логически канали (pipes), между хост и крайна точка (endpoint).
Нула, една и повече крайни точки се обединяват в логически интерфейс на едно устройство. Операционната система комуникира с това логическо устройство.
Адресиране:
- Формат - [Адрес на устройството][Адрес на крайна точка (endpoint)][Посока].
- Възможните адреси са от 0 - 127. Адрес 0 се използва за конфигуриране при начално включване на устройството
- Възможните крайни точки са от 0 - 15. Крайна точка 0 се използва за управление.
- Възможните посоки са IN и OUT. IN - от устройството към хоста, OUT - от хост към устройството.
- Едно физическо устройство може е много функционално (принтер+скенер, камера+микрофон, безжична мишка и клавиатура). Има два вида свързване на многофункионалните устройства:
- Устройството има вграден хъб и всяка функция се адресира поотделно. (compound device)
- Едно устройство има няколко логически интерфейса, с различни крайни точки. (composite device)
Задача.
- Използвайте командата lsusb за да видите всички включени USB устройства.
- Разгледайте опциите на lsusb. Иползвайте man lsusb и lsusb -h, тествайте всички опции на командата.
- Разгледайте подробно само едно устройство и определете неговия адрес и крайните му точки.
Устройства не комуникират директно чрез прекъсвания с компютъра.
Компютърът избира с кой да комуникира посредством хост контролер. Хост контролерът използва хардуерни прекъсвания.
Хост контролера периодично запитва всяко устройство и проверява дали то иска да комуникира с компютъра.
- Запитването може да е веднъж на всеки (микро) интервал или за HID устройства би могло да е на всеки 10 интервала (100Hz)
- Обикновено пакета за запитване е с размер 20 бита (4 PacketID + 7 device address + 4 end point address + 5 bit CRC)
- USB устройство не може да започне предаване на данни без да е запитано от хост контролера
- Пакети предназначени и изпратени за устройство съдържат адрес на устройството и краен адрес (endpoint,pipe)
- 127 са възможните адреси, които могат да бъдат дадени от един хост контролер
- Адресът на устройство означава определено устройство свързано към хоста
- крайният адрес определя логическия канал на данни между устройството и хоста
Конфигурация, интерфейси и крайни точки
Всяко устройство може да има различни конфигурации. В момента на включване се определя каква конфигурация ще се ползва.
- Две различни конфигурации: устройството ползва ток от системната шина, същото устройство може да ползва външно захранване.
- Само една конфигурация може да е активна в даден момент
Всяка конфигурация има крайна точка за управление и един или повече интерфейси
- Всеки интерфейс има една или повече крайни точки за вход (OUT) и/или изход (IN).
- Интерфейсите работят последователно в споделена среда.
USB Скорости
Максимална скорост
USB устройствата могат да поддържат следните скорости на шината.
- High speed 480Mb/s v2
- Full speed 12Mb/s v1
- Low speed 1.5Mb/s v1
- Super Speed 5Gb/s v3
Реалната максимална скорост на предаване данни е между 10 и 20% по-ниска, поради резервираност на ресурсите и трафик за управление.
Вид връзка
Логическите канали могат да ползват четири видa трансфер.
- Контролен (control) - За управление
- Постоянен (isochronous) - канал с гарантирана скорост за предаване в реално време (видео, звук). Възможна загуба на данни, защото няма проверки за грешки. Поради гарантираната скорост се резервира честотна лента и броят на тези канали е ограничен от капацитета на usb контролера.
- Прекъсваем (interrupt) - канал гарантиращ малко времезакъснение на устройства с малък трафик (мишки, клавиатури).
- Обемен (bulk) - Канал за предаване на голям обем от данни (файлове), използващ всичкия останал капацитет на USB връзката, без загуби на данни (но няма гарантирана скорост).
Вид връзка | Control | Bulk | Interrupt | Isochronouse |
---|---|---|---|---|
Употреба | идентификация и конфигуриране | Принтер, скенер, памет | Мишка, клавиатура | Видео, аудио стрийминг |
Подръжка | задължителна | не задължителна | не задължителна | не задължителна |
Корекция грешки | да | да | да | не |
Гарантирана скорост | не | не | не | да |
Гарантирано време закъснение | не | не | да | да |
Класове устройства
Според своето предназначение устройсвата се разделята на следните класове:
- HID: Human Interface Device
- мишка, клавиатура, джойстик ...
- CDC: Communication Device Class
- модеми Ethernet, ISDN ...
- MSC: Mass storege class
- флаш памети, твърди дискове ...
Устройствата попадащи в точно определен клас, могат да се управляват от операционната система без да има нужда от допълнително инсталиране на драйвер
Class | Usage | Description | Examples, or exception |
---|---|---|---|
00h | Device | Unspecified | Device class is unspecified, interface descriptors are used to determine needed drivers |
01h | Interface | Audio | Speaker, microphone, sound card, MIDI |
02h | Both | Communications and CDC Control | Modem, Ethernet adapter, Wi-Fi adapter |
03h | Interface | Human interface device (HID) | Keyboard, mouse, joystick |
05h | Interface | Physical Interface Device (PID) | Force feedback joystick |
06h | Interface | Image | Webcam, scanner |
07 | Interface | Printer | Laser printer, inkjet printer, CNC machine |
08h | Interface | Mass storage | USB flash drive, memory card reader, digital audio player, digital camera, external drive |
09h | Device | USB hub | Full bandwidth hub |
0Ah | Interface | CDC-Data | Used together with class 02h: communications and CDC control |
0Bh | Interface | Smart Card | USB smart card reader |
0Dh | Interface | Content security | Fingerprint reader |
0Eh | Interface | Video | Webcam |
0Fh | Interface | Personal Healthcare | Pulse monitor (watch) |
DCh | Both | Diagnostic Device | USB compliance testing device |
E0h | Interface | Wireless Controller | Bluetooth adapter, Microsoft RNDIS |
EFh | Both | Miscellaneous | ActiveSync device |
FEh | Interface | Application-specific | IrDA Bridge, Test & Measurement Class (USBTMC), USB DFU (Direct Firmware update) |
FFh | Both | Vendor-specific | Indicates that a device needs vendor specific drivers |
USB устройствата се програмират, така че да отговарят на един от класовете
Формат на данните
Всяка информация която ще пратим(transfer), може да се осъществи като данните се разпределят в няколко фрейма. Данните в фрейма се оформят в транзакции. Всяка транзакция се състои от няколко пакета.
Основни понятия:
- Пакет (packet) най-малката информационна единица е пакет. Всеки пакет съдържа:
- (задължително) описание на типа на пакета (PID - packet identification)
- (почти винаги) проверка за грешки (CRC)
- (token пакет) адрес и крайна точка
- (payload пакет) данни
- ...
Transfer
Type
|
Max
Packet Size
|
||
LS
|
FS
|
HS
|
|
Control |
8
|
8,
16, 32, 64
|
64
|
Bulk |
-
|
8,
16, 32, 64
|
512
|
Interrupt |
up
to 8
|
up
to 64
|
up
to 1024
|
Isochronous |
-
|
up
to 1023
|
up
to1024
|
Token пакета се изпраща от хоста. Устройството, което е описано в токен пакета трябва ведна след получаването да изпрати своите данни. Размера на един пакет с данни се определя от максимума за самия трансфер и от възможностите на устройството, които се обявяват при конфигурирането му.
- Транзакция (transaction) - един (само при SOF start of Frame), два или три пакета се групират в транзакция.
- Фрейм (frame) служи за синхронизация. В началото на всеки фрейм се изпраща SOF пакет, който служи за синхронизация. Един фрейм е с дължина 1ms. При High speed, всеки фрейм се разделя на 8 микрофрейма (по 125us).
- Трансфер - данните, които едно устройство трябва да предаде.
Сигнализация
USB2 системата използва четири проводника. Два от тях се използват за обмен на данни с диференциални сигнали. Другите два USB кабела включват напрежение с номинална стойност Ucc = 5V и маса, което позволява да се захранват външни устройства. Двете информационни жила са усукана двойка, а захранващите може и да са от друг тип.
Всеки проводник в USB кабела има специфичен цвят. Сигналите за данни формират усукана двойка от бял (-Data) и зелен (+Data) цвят. За захранващото 5V напрежение се използва червен цвят. Общият сигнал (Ground) е черен (табл. 2.14).
Сигнал | Цвят |
---|---|
+Data | зелен |
-Data | бял |
+Ucc | червен |
Ground | черен |
USB 3
USB 3 надгражда USB стандарта. Добавят се две нови двойки физически линии за всяка посока, като А куплунга остава с непроменена форма, за да има обратна съвместимост с USB2. USB 3 позволява по голяма консумация на USB3 устройствата и може да сам да поеме инициатива за предаване на данни.
Задача
Bus 006 Device 009: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x046d Logitech, Inc.
idProduct 0xc018 Optical Wheel Mouse
bcdDevice 43.01
iManufacturer 1 Logitech
iProduct 2 USB Optical Mouse
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 52
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0005 1x 5 bytes
bInterval 10
Device Status: 0x0000
(Bus Powered)
Проводници и захранване на USB
USB <= 2
- 4 проводника
- Два проводника за захранване +/- 5V
- Няма проводник за тактова честота
- Предаването е асинхронно
- Останалите два проводника са за предаване на данни
- Обикновено се използва диференциално предаване
- Възможно захранване до 100mA
- При конфигуриране до 500mA
USB <= 3
Стъпки на свързване
- Attached
- Powered - подаване на захранване към устройството
- Default - Устройството се захранва и се достъпва на адрес 0, след като отговори му се изпраща адрес
- Address - Устройството е получило адрес от хост контролера по стандартния конфигурационен канал (Zero endpoint), който винаги е достъпен, независимо дали има конфигуриран адрес или не.
- Configured - Хост контролера е получил възможните конфигурации на устройството и е избрал една.
- Suspended - Ако няма трафик на данни за повече от 1 милисекунда. Режим на ниска консумация. Устройството излиза от този режим след наличие на активност по шината за данни.
USB1, USB2, USB3, USB On-The-Go, Wireless USB
Литература
Официална документация:
- http://www.usb.org
- http://www.usb.org/developers/docs/usb_20_040908.zip (виж глава 9)
- http://wiki.osdev.org/Universal_Serial_Bus
- Jan Alexon, USB Complete, The Developer's Guide, 4th Edition, 2009
Хост контролер спецификация:
Направи си сам Интерактивен манипулатор (USB HID device)
- Arduino USB HID Keyboard (архив) http://hackaday.com/2012/06/29/turning-an-arduino-into-a-usb-keyboard/
http://www.usbmadesimple.co.uk/index.html
http://habrahabr.ru/post/92628/
http://www.jungo.com/st/support/documentation/windriver/10.2.1/wdusb_manual.mhtml/index.html
http://msdn.microsoft.com/en-us/library/windows/hardware/ff538930(v=vs.85).aspx
Linux & USB
- http://libusb.wiki.sourceforge.net/
- http://libhid.alioth.debian.org/
- http://www.cprince.com/PubRes/Hardware/LinuxUSB/
- http://lwn.net/Kernel/LDD3/
- usbmouse.c, hid-‐core.c, Linux device drivers http://www.cprince.com/courses/cs5631/lectures/USB
{{#example:}}