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
Číslo vývodu Význam Barva
1 +5 V červená
2 Data – bílá
3 Data + zelená
4 GND černá
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
Low Speed 1.5 Mb/s
Full Speed 12 Mb/s
High Speed 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čů.
Low Speed
Full Speed
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
1. zařízení zdvihne D+ nebo D–
2. hub informuje host, že je připojeno nové zařízení
3. host se zeptá, na jaký port je připojeno
4. host tento port aktivuje a provede reset USB sběrnice
5. hub dá zařízení proud 100mA, zařízení se resetuje
6. zařízení má nyní dočasně adresu 0
7. host si přečte začátek deskriptoru se základními údaji
8. host přiřadí zařízení jeho adresu
9. host si načte zbývající údaje deskriptoru
10. host přiřadí zařízení jednu z jeho konfigurací
Využití USB
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 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