Vstupně-výstupní USB modul
Cílem návrh vstupně-výstupního USB modulu je poskytnout propojení mezi aplikační a fyzickou vrstvou projektu NetCarity. Pomocí bežně dostupných prostředků (čtení a zápis do souboru) musí být možné ovládat 3 výstupní a 2 vstupní kanály. Povaha USB speficikace dovoluje realizovat platformově nezávislé zařízení, které pro svůj běh využívá generické ovladače zařízení (nativně přítomné v operačním systému).
Vlastnosti:
- 3 výstupní digitální kanály, 2 vstupní kanály (1 analogový a 1 digitální)
- připojení k USB, multiplatformní návrh díky specifikaci Communication Device Class - Abstract Control Model (CDC ACM)
- jednočipové řešení s obvodem Atmel ATmega8 a softwarovým řadičem USB
- bez nároků na odbornost uživatele
- malé rozměry, nízká cena
Rozhraní
USB modul je opatřen 10 pinovým konektorem. Rozsahy napětí jsou od 0 do 5V. Maximální povolený proud kanálem A je 500mA a kanály B,C 20mA. Vstupní rozsah kanálu D je shodný s TTL úrovněmi 5V. Analogový kanál měří napětí od 0 do 2,56V a je ze zdroje s vnitřním odporem 10k buzen obdélníkovým signálem 0-5V s frekvencí 1kHz.
Konektor 2x5 pinů (čelní pohled, zářez shora)
2
analog
|
4
D
in
|
6
C
out
|
8
B
out
|
10
A
out
|
1
GND
|
3
GND
|
5
GND
|
7
GND
|
9
+5V
|
Probíhající komunikaci po USB sběrnici indikuje zelená LED umístěná přímo na desce modulu.
Protokol
Výstup
Řízení výstupních kanálů se děje zasíláním znakových povelů. Příkaz je totožný s řádkem textového souboru (je zakončen znaky ASCII 13 10 nebo ASCII 10 nebo ASCII 13). Znaky v řádku se interpretují zleva doprava. Každý znak má vlastní význam a ovládá jeden kanál. Řádek smí být dlouhý maximálně 80 znaků, přesahující část bude ignorována. Pořadí a násobnost znaků může být libovolná.
Znaky
A - zapnout kanál A
a - vypnout kanál A
B - zapnout kanál B
b - vypnout kanál B
C - zapnout kanál C
c - vypnout kanál C
Vstup
Zařízení vysílá zprávy 6 znaků dlouhé, s maximální frekvencí cca 50 zpráv/s. Zpráva se skládá ze znaku D/d indikujícího úroveň kanálu D (D logická 0, d logická 1). Druhým znakem zprávy je mezera ASCII 32. Následují 3 hexadecimální znaky formující číslo od 0 do 4093, které kvantifikuje velikost stejnosměrného napětí na analogovém vstupu (od 0 do 2,56V). Posledním znakem zprávy je konec řádku ASCII 10.
Software
Příkazová řádka DOSu
V systému Windows bude zařízení přiřazen název COMn. Generický ovladač usbser.sys je zaveden na základě informačního souboru netcarity.inf.
Zápis:
C:\>echo AbC >> COM3
Čtení:
C:\>type COM3
Shell
Operační systém umístí soubor zařízení do /dev/ttyACMx. Pro prvotní konfiguraci zařízení je nutné spustit acmenable (zdroj acmenable.c).
Zápis:
user@pc:/# echo AbC >> /dev/ttyACM0
Čtení:
user@pc:/# cat /dev/ttyACM0
Při otevírání zařízení je nutné specifikovat atribut O_NOCTTY, aby se se zařízením nepracovalo jako s terminálem.
Deskriptory zařízení
Device Descriptor
Offset | Popis | Hodnota |
0 | bLength | 0x12 |
1 | bDescriptorType | 0x01 |
2,3 | bcdUSB | 0x0110 |
4 | bDeviceClass | 0x02 |
5 | bDeviceSubClass | 0x00 |
6 | bDeviceProtocol | 0x00 |
7 | bMaxPacketSize | 0x08 |
8,9 | idVendor | 0x065d |
10,11 | idProduct | 0x1021 |
12,13 | bcdDevice | 0x0004 |
14 | iManufacturer | 0x00 |
15 | iProduct | 0x01 |
16 | iSerialNumber | 0x00 |
17 | bNumConfigurations | 0x01 |
Configuration Descriptor (spojení Configuration, Interface a Endpoint descriptoru)
Offset | Popis | Hodnota |
Configuration Descriptor |
0 | bLength | 0x09 |
1 | bDescriptorType | 0x02 |
2,3 | wTotalLenght | 0x0043 |
4 | bNumInterfaces | 0x02 |
5 | bConfigurationValue | 0x01 |
6 | iConfiguration | 0x00 |
7 | bmAttributes | 0x80 |
8 | bMaxPower | 0x32 |
Interface 0 Descriptor |
9 | bLength | 0x09 |
10 | bDescriptorType | 0x04 |
11 | bInterfaceNumber | 0x00 |
12 | bAlternateSetting | 0x00 |
13 | bNumEndpoints | 0x01 |
14 | bInterfaceClass | 0x02 |
15 | bInterfaceSubClass | 0x02 |
16 | bInterfaceProtocol | 0x01 |
17 | iInterface | 0x00 |
CDC - Header Functional Descriptor |
18 | bLength | 0x05 |
19 | bDescriptorType | 0x24 |
20 | bDescriptorSubtype | 0x00 - Header Functional Descriptor |
21,22 | bcdCDC | 0x0110 |
CDC - Call Management Functional Descriptor |
23 | bLength | 0x05 |
24 | bDescriptorType | 0x24 |
25 | bDescriptorSubtype | 0x01 - Call Management Functional Descriptor |
26 | bmCapabilities | 0x01 |
27 | bDataInterface | 0x01 |
CDC - Abstract Control Management Functional Descriptor |
28 | bLength | 0x04 |
29 | bDescriptorType | 0x24 |
30 | bDescriptorSubtype | 0x02 - Abstract Control Management Functional Descriptor |
31 | bmCapabilities | 0x08 |
CDC - Union Functional Descriptor |
32 | bLength | 0x05 |
33 | bDescriptorType | 0x24 |
34 | bDescriptorSubtype | 0x06 - Union Functional Descriptor |
35 | bMasterInterface | 0x00 |
36 | bSlaveInterface | 0x01 |
Endpoint 3 Descriptor |
37 | bLength | 0x07 |
38 | bDescriptorType | 0x05 |
39 | bEndpointAddress | 0x83 |
40 | bmAttributes | 0x03 |
41,42 | wMaxPacketSize | 0x0008 |
43 | bInterval | 0xff |
Interface 1 Descriptor |
44 | bLength | 0x09 |
45 | bDescriptorType | 0x04 |
46 | bInterfaceNumber | 0x01 |
47 | bAlternateSetting | 0x00 |
48 | bNumEndpoints | 0x02 |
49 | bInterfaceClass | 0x0A |
50 | bInterfaceSubClass | 0x00 |
51 | bInterfaceProtocol | 0x00 |
52 | iInterface | 0x00 |
Endpoint 1 Descriptor |
53 | bLength | 0x07 |
54 | bDescriptorType | 0x05 |
55 | bEndpointAddress | 0x81 |
56 | bmAttributes | 0x02 |
57,58 | wMaxPacketSize | 0x0008 |
59 | bInterval | 0x00 |
Endpoint 2 Descriptor |
60 | bLength | 0x07 |
61 | bDescriptorType | 0x05 |
62 | bEndpointAddress | 0x02 |
63 | bmAttributes | 0x02 |
64,65 | wMaxPacketSize | 0x0001 |
66 | bInterval | 0x00 |
Deskriptory budou odeslány v následujících paketech:
Device Descriptor:
4B 12 01 10 01 02 00 00 08 10 CF
C3 5D 06 21 10 04 00 00 01 1A D3
4B 00 01 3F 8F
|
Configuration Descriptor:
4B 09 02 43 00 02 01 00 80 03 75
C3 32 09 04 00 00 01 02 02 74 DC
4B 01 00 05 24 00 10 01 05 CE 3C
C3 24 01 01 01 04 24 02 08 D1 53
4B 05 24 06 00 01 07 05 83 E9 63
C3 03 08 00 FF 09 04 01 00 21 F8
4B 02 0A 00 00 00 07 05 81 E6 DC
C3 02 08 00 00 07 05 02 02 26 39
4B 01 00 00 DF FF
|
Schéma
 | Schéma USB modulu |
|