Интерфейс USB (Universal Serial Bus) 1 -1
Литература 1 -2
История USB 1996 г. USB 1. 0 – 1, 5 Мбит/c n 1998 г. USB 1. 1 – 12 Мбит/c n 2000 г. USB 2. 0 – 480 Мбит/c n 2005 г. USB wireless n 2008 г. USB 3. 0 – 4, 8 Гбит/c n 1 -3
Группа разработчиков USB 1. 0 Compaq Intel Microsoft NEC IBM DEC Northern Telecom USB 2. 0 Compaq Intel Microsoft NEC Lucent HP Philips 1 -4
Аппаратное обеспечение USB n Кабель u Host 5 m 5 m Hub u 5 m u n ПК имеет “корневой хаб” с 1 или 2 портами u Device n 4 -х проводной: Vbus-5 V (красный), GND (черный), D+(зеленый), D– (белый) Максимальная длина 5 м Разъемы двух типов, A и B Каждый порт подводит 500 м. А Хабы увеличивают число устройств до 127 1 -5
1 -6
Архитектура USB (a) PC USB Device 1 -7
Архитектура USB (б) PC USB Device USB Hub USB Device USB USB Device 1 -8
Физический интерфейс USB NRZI (Non Return to Zero Invert) 1 -9
The SIE (Serial Interface Engine) Serial Interface Engine (SIE) D+ D- Bytes USB Transceiver 1 -10
Состояния интерфейса USB n n n n n Single-Ended Zero (SE 0)– линейный ноль Data J State и Data К State (или просто J и К ) – состояние передаваемого бита, определяются через состояния Diff 0 и Diff 1 Idle State – состояние паузы на шине Resume State – сигнал «пробуждения» , для вывода устройства и «спящего» режима. Start of Packet (SOP) – начало пакета (переход из Idle в К) End of Packet (EOP) – конец пакета Disconnect – устройство отключено от порта Connect – устройство подключено к порту Reset – сброс устройства 1 -11
Reflected-wave Signaling receiver driver 1 meter cable 1 -12
Reflected-wave Signaling receiver driver 2 meter cable 1 -13
Reflected-wave Signaling receiver driver 5 meter cable 1 -14
Логическая структура USB-устройства Device Configuration 1 Interface 0 Interface 1 alt setting 0 alt setting 1 alt setting 2 alt setting 0 EP 1 Проектированием логической структуры USB устройства занимается программист EP 0 EP 1 EP 2 EP 3 EP 8 EP 0 до 15 точек IN и до 15 OUT 1 -15
Внутренняя организация USB 1 -16
1 -17
Особенности USB-интерфейса Конечная точка 0 Конечная точка 1 Конечная точка 2 Конечная точка 3 Канал 0 Канал 1 Поток кадров Канал 2 Канал 3 1 -18
Структура информационного потока На шине USB применяется пакетная передача информации. 1 -19
Три типа пакетов USB Token Data Handshake Пакет запроса формируется обязательно Хостом Пакет данных Маркер подтверждения 1 -20
Идентификаторы пакетов USB 1 -21
SIE USB S A E C O Y D N R U N D D C T C R P 5 Token Packet D S A Y T N A C 1 Payload Data Packet C R C 1 6 S A Y C N K C S A E C O Y D N R U N D D C T C R P 5 H/S Pkt D S A Y T N A C 0 Token Packet Payload Data C R C 1 6 S A Y C N K C Data Packet Payload Data Serial Interface Engine (SIE) D+ D- USB Transceiver Payload Data A C K 1 -22
Типы передачи данных Bulk n Control n Isochronous n Interrupt n 1 -23
Bulk IN Transfer (a) H I N A D D R E N D P D C R C 5 Token Packet D A T A 1 Payload Data Packet good H C R C 1 6 A C K H/S Pkt H I N A D D R E N D P D C R C 5 Token Packet D A T A 0 Payload Data Packet H C R C 1 6 A C K H/S Pkt good—note the data toggle 1 -24
Bulk IN Transfer (b) H A I D N D R E N D P D C R C 5 Token Packet D A T A 1 Payload Data Packet good H C R C 1 6 A C K H/S Pkt H A I D N D R E N D P D C R C 5 Token Packet N A K H/S Pkt not ready D H A I D N D R E N D P C R C 5 Token Packet D A T A 0 Payload Data Packet H C R C 1 6 A C K H/S Pkt good 1 -25
Bulk IN Transfer (c) H A I D N D R E N D P D C R C 5 Token Packet D A T A 1 Payload Data (H) C R C 1 6 Data Packet host sees error; no response H A I D N D R E N D P D C R C 5 Token Packet D A T A 1 Payload Data Packet H C R C 1 6 A C K H/S Pkt good—note same data and data toggle 1 -26
Bulk IN Transfer (d) H A I D N D R E N D P D C R C 5 Token Packet S T A L L H/S Pkt device has a problem H A E I D N N D D R P (D) C R C 5 Token Packet device detects token error or does not respond 1 -27
Bulk OUT Transfer (a) H A O D U D T R E N D P H C R C 5 Token Packet D A T A 0 Payload Data Packet good D C R C 1 6 A C K H/S Pkt H A O D U D T R E N D P H C R C 5 Token Packet D A T A 1 Payload Data Packet D C R C 1 6 A C K H/S Pkt good—note the data toggle 1 -28
Bulk OUT Transfer (b) H A E O D N U D D T R P H C R C 5 Token Packet D A T A 1 Payload Data Packet good D C R C 1 6 A C K H/S Pkt H H A E O D N U D D T R P C R C 5 Token Packet D A T A 0 Payload Data Packet D C R C 1 6 N A K H/S Pkt device not ready for data host sends data anyway H H A E O D N U D D T R P C R C 5 Token Packet D A T A 0 Payload Data Packet D C R C 1 6 A C K H/S Pkt good 1 -29
Bulk OUT Transfer (c) H A E O D N U D D T R P H C R C 5 Token Packet D A T A 1 Payload Data (D) C R C 1 6 Data Packet device sees error; no response H A E O D N U D D T R P H C R C 5 Token Packet D A T A 1 Payload Data Packet D C R C 1 6 A C K H/S Pkt good 1 -30
Bulk OUT Transfer (d) H H A O D U D T R E N D P C R C 5 Token Packet D A T A 1 Payload Data Packet D C R C 1 6 S T A L L H/S Pkt device has problem A O D U D T R E N D P (D) H H C R C 5 Token Packet D A T A 1 Payload Data C R C 1 6 Data Packet device detects token error 1 -31
Control Transfer SETUP H H S A E C E D N R T D D C U R P 5 P Token Packet D C A 8 bytes R T Setup C A Data 1 0 6 Data Packet DATA H A I D N D R E N D P A C K H/S Pkt D C R C 5 Token Packet HANDSHAKE D H D A T A 1 Payload Data Packet H D H C R C 1 6 A C K H/S Pkt H H D D C A R N T C A A 1 K 1 6 Token Packet Data Pkt H/S Pkt D C A R A T C C A 1 K 1 6 Token Packet Data Pkt H/S Pkt Control operation not completed Control operation completed A O D U D T R E N D P C R C 5 1 -32
Interrupt IN & OUT H A I D N D R E N D P D C R C 5 D A T A 1 Token Packet Payload Data H C R C 1 6 Data Packet A C K H/S Pkt good H A E O D N U D D T R P Token Packet D A T A 0 Payload Data Packet good A I D N D R E N D P D C R C 5 D A T A 0 Payload Data Token Packet H C R C 1 6 A C K Data Packet H/S Pkt good—note the data toggle H C R C 5 H D C R C 1 6 A C K H/S Pkt H A E O D N U D D T R P H C R C 5 Token Packet D A T A 1 Payload Data Packet D C R C 1 6 A C K H/S Pkt good—note the data toggle 1 -33
Isochronous Transfer H A I D N D R E N D P D C R C 5 D A T A 0 Payload Data Token Packet Data Packet H C R C 1 6 H A O D U D T R E N D P C R C 5 Token Packet D A T A 0 Payload Data C R C 1 6 Data Packet Note: Always DATA 0 PID, no ACK 1 -34
Программирование простейших USB-устройств 1 -35
Что такое HID-устройство ? • • • HID-интерфейс (Human Interface Device) интерфейс — типовое решение по сопряжению нового внешнего устройства с компьютером, базируется на протоколе USB 1. 1. HID-интерфейс предназначен для подключения внешних устройств с низкоскоростным обменом данными (до 64 к. Б/c) HID-устройство использует встроенный в Windows 98/2000/XP/Vista/7… HIDдрайверы. 1 -36
• Обмен данными с HID-устройством происходит с помощью определенной структуры: репорта (Report). • Три вида репортов: - Output; - Input; - Feature (специальный репорт используется там, где важно время доставки). 1 -37
Чтение и запись Input/Output репортов в Windows • • • Для чтения/записи репортов необходимо получить дескриптор HIDустройства с помощью функции Create. File(); Для чтения Input-репорта вызывается функция Read. File(); Для записи Output-репорта вызывается функция Write. File(); 1 -38
Получение дескриптора HID-устройства Var h. USBDevice: t. Handle; ……. Symbolic. Link Name. Device: ='\? hid#vid_1234&pid_0001#6&3549867 d&0&000 0#{4 d 1 e 55 b 2 -f 16 f-11 cf-88 cb-001111000030}' h. USBDevice: =Create. File(PChar(Name. Device), GENERIC_READ or GENERIC_Write, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); 1 -39
Запись Output-репорта Var Read. Overlapped: t. Overlapped; // Структура для асинхронного чтения Write. Overlapped: t. Overlapped; // Структура для асинхронной записи Input. Report: array[0. . 63] of byte; Output. Report: array[0. . 63] of byte; function Write. Report(H: t. Handle; P: pointer; B: dword): boolean; var Number. Of. Byte. Transfered: dword; begin Write. File( h, // handle to device P^, // pointer to data to write to file b, // сколько писать Number. Of. Byte. Transfered, // сколько реально прописали @Write. Overlapped // pointer to structure needed for overlapped I/O ); while not get. Overlapped. Result(h, Write. Overlapped, Number. Of. Byte. Transfered, true) do Sleep(10); end; 1 -40
Чтение Input-репорта function Read. Report(h: t. Handle; P: pointer; b: dword): boolean; var Number. Of. Byte. Transfered: dword; begin Read. File( h, // handle to file to write to P^, // pointer to data to write to file b, // сколько читать Number. Of. Byte. Transfered, // сколько реально прописали @Read. Overlapped // pointer to structure needed for overlapped I/O ); while not get. Overlapped. Result(h, Read. Overlapped, Number. Of. Byte. Transfered, false) do Sleep(10); end; 1 -41