440 likes | 607 Views
USB. Pavel Novák. Široké použití . Parametry. sériové rozhraní rychlost 1.5, 12, 480 Mb/s připojení zařízení až na vzdálenost 5 m možnost napájení z konektoru až 127 připojených zařízení podpora plug&play. Konektory. Typ A. Typ „mini“. Typ B. Vývody konektoru. Kabel.
E N D
USB Pavel Novák
Parametry • sériové rozhraní • rychlost 1.5, 12, 480 Mb/s • připojení zařízení až na vzdálenost 5 m • možnost napájení z konektoru • až 127 připojených zařízení • podpora plug&play
Konektory Typ A Typ „mini“ Typ B
Kabel • stíněný nebo nestíněný (pro Low Speed, max. délka 3 metry) • data krouceným párem, napájení rovně • stínění je připojeno jen na straně počítače k pinu GND, zařízení ho již nepřipojuje
Verze USB • 1.1 • přenosová rychlost max. 12 Mb/s • 2.0 • doplněna nejrychlejší vrstva • přenosová rychlost max. 480 Mb/s
Definice rychlosti zařízení • Zařízení mohou být připojena za chodu, je třeba jejich zařízení rozpoznat a určit rychlost, s jakou jsou schopna komunikovat. • Řešení: změna napětí na některém z datových vodičů.
High Speed • Zapojeno stejně jako Full Speed a z počátku také tak komunikuje, zvýšení rychlosti softwarově. • Zařízení USB 1.1 nemusí podporovat Full Speed • Zařízení USB 2.0 nemusí podporovat High Speed
Přenos dat • není přenášen hodinový signál • příjemce se synchronizuje podle dat • kódování NRZI • bit stuffing • datové vodiče přenáší vzájemně negovaný signál (snížení vlivu rušení)
Kódování • 0 – změna úrovně1 – ponechání úrovně • Na počátku přenosu sync-byte 00000001
Bit Stuffing • příjemce se synchronizuje podle dat nutno zajistit dostatečný počet změn • po každých 6-ti jedničkách vložena nula • příjemce nuly navíc odstraňuje • paket obsahující víc než 6 jedniček za sebou je ignorován
Napájení • hub dodává 4.75 – 5.25 V, max. pokles o 0.35 V • zařízení odebírá max. 100 mA • zařízení může požádat až o 500 mA, pokud jsou k dispozici, dostane je • zařízení může specifikovat, že potřebuje méně • hub napájený po sběrnici je schopen dodávat max. 100 mA na port
Organizace sběrnice • one-master, tj. většinou počítač, veškerá aktivita vychází od něj • zařízení může zahájit přenos jen po vyzvání
Architektura • max. 7 hubů, max. 127 zařízení
Typy přenosů I • Řídící (Control) • k řízení HW, vysoká priorita, chybová kontrola, najednou lze přenést až 64 B • Přes přerušení (Interrupt) • vhodné pro zařízení, která chtějí trvale přenášet málo dat (myš, klávesnice). • počítač se periodicky dotazuje
Typy přenosů II • Hromadný (Bulk) • nízká priorita, zabezpečení proti chybám • vhodné pro zařízení jako scanner, tiskárna • Izochronní (Isochronous) • stálá rychlost, bez chybového zabezpečení • vhodné pro zvukové karty apod.
Koncové body (endpoints) • každé zařízení na sběrnici má adresu • k adrese se přidává číslo „koncového bodu“ • koncový bod 0 pro řídící přenosy • max. 15 (6) koncových bodů • přenos se pak chová pro program jako pipe mezi koncovým bodem a programem
Enumerace • enumerace = rozpoznání zařízení • po připojení zařízení je třeba se dozvědět co je zač – OS se dotazuje zařízení na parametry • parametry jsou posílány v přesně definovaných blocích, tzv. deskriptorech
Průběh enumerace • zařízení zdvihne D+ nebo D– • hub informuje host, že je připojeno nové zařízení • host se zeptá, na jaký port je připojeno • host tento port aktivuje a provede reset USB sběrnice • hub dá zařízení proud 100mA, zařízení se resetuje • zařízení má nyní dočasně adresu 0 • host si přečte začátek deskriptoru se základními údaji • host přiřadí zařízení jeho adresu • host si načte zbývající údaje deskriptoru • host přiřadí zařízení jednu z jeho konfigurací
Obvody FTDI • Future Technology Devices International • vyrábí čipy konvertující „klasická“ rozhraní na USB Výhody: • není třeba znalost USB pro komunikaci přes ni Nevýhody: • v zapojení je jeden čip navíc • není možné využít všechny možnosti USB
FT232BM • převodník USB UART • při připojení k RS232 komunikace 300-1000 Bd • 7-bitový nebo 8-bitový přenos • HW nebo SW handshake • USB 1.1 nebo 2.0 (pouze Full Speed) • uložení VID a sériového čísla zařízení pro USB ve vnější EEPROM
FT232BM – ovladače • ovladače umožňující obsluhování zařízení jako virtuálního sériového portu • Win, MAC, Linux • D2XX ovladače pro přímý přístup k zařízení
FT232BM – D2XX • Přenos dat:FT_Open(), FT_OpenEx()FT_Read(), FT_Write()FT_Close() • Nastavování parametrů:FT_SetBaudRate(), FT_SetDataCharacteristics(), FT_SetTimeouts(), FT_GetStatus(), FT_SetFlowControl()…
FT232BM – D2XX – EEPROM • Pomocí tohoto API lze naprogramovat připojenou EEPROM – FT_EE_Program() • Možné nastavení parametrů: • VID, PID, manufacturer, manufacturer ID • Description, Serial Number • MaxPower, SelfPowered • USBVersion
FT232BM • ASIX prodává za 172,- bez DPH • Nabízí též modul UMS2 (680,- bez DPH) • čip s pamětí a krystalem pro osazení do patice – kompletní převodník USB UART
FT245BM • převodník USB FIFO • rozhraní 8-bit • signály na zápis, čtení, indikaci dat v bufferu a plného bufferu
PIC16C745 • 6 MHz / 24 MHz • 1 instrukce na tik kromě skoků (2 tiky) • RISC (35 instrukcí) • 8 K paměti na program, 256 bytů na data (Harvardská architektura) • 22 I/O pinů • USB/UART • 3x timer • 5-ti kanálový A/D převodník
PIC16C745 – podpora USB • pouze Low Speed • 3 koncové body (0,1,2) – podle specifikace • obsahuje SIE (serial interface engine) • příjem dat: přerušení, ve spec. registru je zapsána adresa, kde jsou, a kolik jich je • poslání dat: zapíší se do určené části paměti, zapíše se adresa a počet do registru a nahodí se bit, že jsou předána SIE • zpracování po max. 8 bytech
PIC16C745 – podpora USB • Microchip poskytuje knihovnu pro práci s USB • InitUSB(), PutUSB(), GetUSB() • musí se naspecifikovat deskriptory • ke stažení příklad chovající se jako USB myš
const char ReportDescriptor1 [] = {0x05, 0x01, /* usage page */ 0x09, 0x02, /* usage mouse */ 0xa1, 0x01, /* collection (application) */ 0x09, 0x01, /* usage (pointer) */ 0xa1, 0x00, /* collection (linker) */ 0x05, 0x09, /* usage page (buttons) */ 0x19, 0x01, /* usage minimum (1) */ 0x29, 0x03, /* usage maximum (3) */ 0x15, 0x00, /* logical minimum (0) */ 0x25, 0x01, /* logical maximum (0) */ 0x95, 0x03, /* report count (3 bytes) */ 0x75, 0x01, /* report size (1 bit) */ 0x81, 0x02, /* input (3 bits) */ 0x95, 0x01, /* report count (1 byte) */ 0x75, 0x05, /* Report size (5 bits) */ 0x81, 0x01, /* input (constant 5 bit padding) */ 0x05, 0x01, /* usage page (generic desktop) */ 0x09, 0x30, /* usage X */ 0x09, 0x31, /* usage Y */ 0x15, 0x81, /* logical minimum -127 */ 0x25, 0x7F, /* logical maximum 127 */ 0x75, 0x08, /* report size (8) */ 0x95, 0x03, /* report count 2 */ 0x81, 0x06, /* input (2 position butes X & Y) */ 0xc0, 0xc0}; /* end collection */
const unsigned int ReportDescrSize = sizeof(ReportDescriptor1); const char DeviceDescriptor [] = {0x12, DEVICE, 0x10, 0x01, 0x00, 0x00, 0x00, 0x08, 0xD8, 0x04 ,0x01, 0x00, 0x00, 0x02, 0x01, 0x02, 0x00, 0x01}; const char ConfigDescriptor [] = {0x09, CONFIGURATION, 0x22, 0x00, 0x01, 0x01, 0x00, 0xA0, 0x32, /* Interface Descriptor */ 0x09, INTERFACE, 0x00, 0x00, 0x01, 0x03, 0x01, 0x02, 0x00, /* HID descriptor */ 0x09, 0x21, 0x00, 0x01, 0x00, 0x01, 0x22, sizeof(ReportDescriptor1), sizeof(ReportDescriptor1)>>8, /* Endpoint 1 descriptor */ 0x07, ENDPOINT, 0x81, 0x03, 0x04, 0x00, 0x0A}; const char HIDDescriptor [] = {0x09, 0x21, 0x00, 0x01, 0x00, 0x01, 0x22, sizeof(ReportDescriptor1), sizeof(ReportDescriptor1)>>8}; const char String0 [] = { 4, STRING, 9, 4}; const char String1 [] = {54, STRING, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'c', 0, 'h', 0, 'i', 0, 'p', 0, ' ', 0, 'T', 0, 'e', 0, 'c', 0, 'h', 0, 'n', 0, 'o', 0, 'l', 0, 'o', 0, 'g', 0, 'y', 0, ',', 0, ' ', 0, 'I', 0, 'n', 0, 'c', 0, '.', 0}; const char String2 [] = {92, STRING, 'P', 0, 'i', 0, 'c', 0, '1', 0, '6', 0, 'C', 0, '7', 0, '4', 0, '5', 0, '/', 0, '7', 0, '6', 0, '5', 0, ' ', 0, 'U', 0, 'S', 0, 'B', 0, ' ', 0, 'S', 0, 'u', 0, 'p', 0, 'p', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, 'F', 0, 'i', 0, 'r', 0, 'm', 0, 'w', 0, 'a', 0, 'r', 0, 'e', 0, ',', 0, ' ', 0, 'V', 0, 'e', 0, 'r', 0, '.', 0, ' ', 0, '2', 0, '.', 0, '0', 0, '0', 0};
void main() { static bit Button_RA4 = 0; unsigned char i; unsigned char vector = 0; unsigned char buffer [4]; const signed char table [] = {-4, -4, -4, 0, 4, 4, 4, 0}; // The table array contains the directional data for simulated mouse movement. The Y direction // leads the X direction by two in the array (i.e (-4,4) then (-4,0) then (-4, 4) then (0, 4) // etc.) X vectors are positive from left to right on the screen. Y vectors are positive for // top to bottom. The result of all these vectors is the cursor moving in a continual octogon. TRISB = 0; PORTB = 0; TRISA = 0x10; // RA4 is and input PORTA = 0; for (i = 0; i < 50; i ++); // Small delay (greater than 16us) in order to InitUSB (); // allow SIE to come online before beginning USB // initialization buffer [0] = 0; i = 15; OPTION = 0x07; // TMR0 prescaler 1:256
while (1) { if (T0IF) { // Poll all functions every 10.9ms T0IF = 0; ServiceUSB(); // Service USB functions if (i > 14) { // Increment octogon vectors buffer[1] = table[vector & 0x07]; // X vector (limit to length of table array) buffer[2] = table[(vector+2) & 0x07]; // Y vector (leads X by two) // (limit to length of table array) i = 0; vector++; } if (ConfiguredUSB()) { // Wait until device is configured before using // EP1. If Endpoints 1 or 2 are used before // the device is configured, errors will occur. if (PutEP1(4, buffer)) // Increment i if EP1 IN buffer is accessible i++; // to the PIC. If not accessible, try again next time. } if (Button_RA4 && RA4) Button_RA4 = 0; if (!RA4 && !Button_RA4) { // if RA4 button is pressed on PICDEM USB board RemoteWakeup(); // perform remote wakeup Button_RA4 = 1; } } } }
PIC16C745 - dostupnost • ASIX prodává za 108,- bez DPH • nenašel jsem levný programátor • nejlevnější od ASIX – programátor PRESTO – 1980,- bez DPH
TUSB3210 • podobný procesor od Texas Instruments • události na USB sběrnici také vyvolávají přerušení, které je nutné ošetřit • programuje se přes USB, nainstaluje se ovladač a zkompilovaný kód se nahrává do čipu při jeho resetu (např. při připojení) • pro trvalé uložení programu je nutná externí EEPROM připojená přes I2C
AT90S, ATmega8 • „obyčejný“ AVR bez podpory USB • USB si sám vykomunikoval Igor Češko www.cesko.host.sk/hardware.php • k dispozici zdrojové kódy pro převodník USB – 8-pinový I/O port a záznamník do EEPROM přes USB • oba lze koupit např. na obchod.hw.cz
Čipy Ubicom řady SX • Michael Hetherington • podobně jako Igor Češko pro AVR • zdrojový kód, čip se přihlásí jako USB klávesnice a napíše „California dreamin‘“ • http://www.sxlist.com/techref/ubicom/lib/io/dev/keys/usbdemo-mh.htm • prodává MES Praha (www.mespraha.cz)
RTL8150 • konvertor USB – Ethernet • není programovatelný, ale Realtek poskytuje kompletní datasheet, schéma zapojení a drivery pro Win a Linux • www.realtek.com.tw
Další zajímavé obvody • konventory USB – ATAPI • ISP-1581 (Phillips), PL-2507 (Prolific), TUSB6250 (Texas Instruments) • USB – Ethernet konvertor • PL-2311 (Prolific) • DA převodníky (ext. zvuk. karty, …) • PCM2702 (Texas Instruments) • IrDA – USB konvertor • STIr4200 (SigmaTel)
Použité zdroje • Elektronické zdroje www.usb.org www.mcu.cz www.hw.cz • Literatura David Matoušek: USB prakticky s obvody FTDI