\ UsbProg

UsbProg

Cíl návrhu

K programování jednočipových mikrokontrolérů firmy Atmel řady ATmega a ATtiny se používá sériový programátor, který pomocí 4 signálů programuje obsah programové a datové paměti a nastavení pojistek cílového obvodu. Sériový způsob programování je u obvodů ATtiny obohacen o vysokonapěťové programování, které nepotřebuje dedikovaný vstup RESET a šetří tak počet vývodů obvodu, které jsou rezervovány a nemohou plnit uživatelskou funkci. Existuje řada programátorů včetně programového vybavení, které pomocí sériového nebo paralelního portu programují cílový obvod. Mezi nejjednodušší programátory patří PonyProg, který vyžaduje pouze minimum diskrétních součástek. Cílem návrhu programátoru je pomocí obvodu ATmega8 vytvořit programátor připojitelný přes rozhraní USB.

Výhody:
  • připojení programátoru přes rozhraní USB
  • autodetekce cílového programovatelného obvodu
  • identifikace zařízení jako USB CDC (Communication Device Class), virtuální COM port s generickými ovladači (usbser.sys)
  • programování bez software na straně PC - pouze pomocí poslání HEX souboru do COM portu
  • vysokonapěťové programování obvodů ATtiny
  • portovatelnost, platformově nezávislý návrh
  • malé rozměry, nízká cena

Nevýhody:
  • omezený počet cílových obvodů (ATmega, ATtiny)
  • výroba programátoru vyžaduje jiný programátor (PonyProg)
  • data nelze číst, pouze ověřovat

Rozhraní

Programovací vodiče se skládají s datového vstupního (MISO) a výstupního (MOSI), hodinového (SCK) a řídícího (RESET) vodiče. U vysokonapěťového programování je RESET nahrazen zdrojem +12V a přibývá instrukční datový vodič (INSTR).

Konektor má rozměr 2x5 pinů a vychází z PonyProg ISP konektoru (vstup/výstup z pohledu programátoru):

2

CLKI

4

MOSI

6

MISO

8

SCK

10

RST

+12V

1

Vcc

3

Xtal1

5

Xtal2

7

GND

9

GND


Programátor je opatřen dvěma LED indikátory: červeným a zeleným. V případě chyby v datech poslaných do programátoru nebo při chybě cílového zařízení svítí červená LED. Při USB komunikaci svítí zelená LED.

Komunikace s programátorem probíhá jako zápis na COM port. Existuje více způsobů, jak na port zapisovat. Jedním z nich může být použití programu Hyperterminal, univerzálnější je však příkazová řádka:
C:\>echo PROG >> COM3
C:\>type program.hex >> COM3



Příkazy
FPnastaví režim zápisu programové paměti (Flash Programming). Sám zjistí typ cílového obvodu. Následně očekává zaslání HEX souboru.
DPnastaví režim zápisu datové paměti (Data Progamming). Následně očekává zaslání HEX souboru.
FTnastaví režim ověřování (testování) správnosti zápisu programové paměti (Flash Testing). Následně očekává HEX soubor, který porovná s obsahem cílové paměti. V případě neshody se rozsvítí červená LED.
DTnastaví režim ověřování (testování) správnosti zápisu datové paměti (Data Testing). Následně očekává HEX soubor, který porovná s obsahem cílové paměti. V případě neshody se rozsvítí červená LED.
HVnastaví vysokonapěťové programování (High Voltage).
FU 0xAABBCCzapíše/ověří pojistky obvodu (FUses). CC=low, BB=high, AA=extended
LK 0xAAzapíše/ověří zámky obvodu (LocK).
CL 0xAAzapíše/ověří kalibrační byte obvodu (CaLibration byte).
ERvymaže obvod (ERase)
OKukončí programování, vypne programovací napětí.
:dvojtečkou začínají HEX soubory a zahajují programování/ověřování


Příklad

V souboru program.hex a eeprom.hex je uložen program, který chceme nahrát do ATtiny15 pomocí vysokonapěťového programování:
C:\>echo HIVOLT >> COM3
C:\>echo FP >> COM3
C:\>type program.hex >> COM3
C:\>echo FT >> COM3
C:\>type program.hex >> COM3
C:\>echo DP >> COM3
C:\>type eeprom.hex >> COM3
C:\>echo DT >> COM3
C:\>type eeprom.hex >> COM3
C:\>echo FU 0xABCDEF >> COM3
C:\>echo OK >> COM3


V souboru program.hex je uložen program, který chceme nahrát do ATmega8. Pojistky nenastavujeme, předpokládáme, že jsou nastaveny od minulého programování správně. Tento příklad je typický pro ladění programů, kdy je programová paměť přepisována velmi často:
C:\>echo WPROG >> COM3
C:\>type program.hex >> COM3
C:\>echo TPROG >> COM3
C:\>type program.hex >> COM3
C:\>echo OK >> COM3

Deskriptory zařízení

Device Descriptor

OffsetPopisHodnota
0bLength0x12
1bDescriptorType0x01
2,3bcdUSB0x0110
4bDeviceClass0x02
5bDeviceSubClass0x00
6bDeviceProtocol0x00
7bMaxPacketSize0x08
8,9idVendor0x065d
10,11idProduct0x1021
12,13bcdDevice0x0004
14iManufacturer0x00
15iProduct0x01
16iSerialNumber0x00
17bNumConfigurations0x01


Configuration Descriptor (spojení Configuration, Interface a Endpoint descriptoru)

OffsetPopisHodnota
Configuration Descriptor
0bLength0x09
1bDescriptorType0x02
2,3wTotalLenght0x0043
4bNumInterfaces0x02
5bConfigurationValue0x01
6iConfiguration0x00
7bmAttributes0x80
8bMaxPower0x32
Interface 0 Descriptor
9bLength0x09
10bDescriptorType0x04
11bInterfaceNumber0x00
12bAlternateSetting0x00
13bNumEndpoints0x01
14bInterfaceClass0x02
15bInterfaceSubClass0x02
16bInterfaceProtocol0x01
17iInterface0x00
CDC - Header Functional Descriptor
18bLength0x05
19bDescriptorType0x24
20bDescriptorSubtype0x00 - Header Functional Descriptor
21,22bcdCDC0x0110
CDC - Call Management Functional Descriptor
23bLength0x05
24bDescriptorType0x24
25bDescriptorSubtype0x01 - Call Management Functional Descriptor
26bmCapabilities0x01
27bDataInterface0x01
CDC - Abstract Control Management Functional Descriptor
28bLength0x04
29bDescriptorType0x24
30bDescriptorSubtype0x02 - Abstract Control Management Functional Descriptor
31bmCapabilities0x08
CDC - Union Functional Descriptor
32bLength0x05
33bDescriptorType0x24
34bDescriptorSubtype0x06 - Union Functional Descriptor
35bMasterInterface0x00
36bSlaveInterface0x01
Endpoint 3 Descriptor
37bLength0x07
38bDescriptorType0x05
39bEndpointAddress0x83
40bmAttributes0x03
41,42wMaxPacketSize0x0008
43bInterval0xff
Interface 1 Descriptor
44bLength0x09
45bDescriptorType0x04
46bInterfaceNumber0x01
47bAlternateSetting0x00
48bNumEndpoints0x02
49bInterfaceClass0x0A
50bInterfaceSubClass0x00
51bInterfaceProtocol0x00
52iInterface0x00
Endpoint 1 Descriptor
53bLength0x07
54bDescriptorType0x05
55bEndpointAddress0x81
56bmAttributes0x02
57,58wMaxPacketSize0x0008
59bInterval0x00
Endpoint 2 Descriptor
60bLength0x07
61bDescriptorType0x05
62bEndpointAddress0x02
63bmAttributes0x02
64,65wMaxPacketSize0x0001
66bInterval0x00


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 zapojení programátoru


Připojení cílových obvodů


Signatury obvodů

TypFlash [B]EEPROM [B]Flash PageEEPROM PageS0S1S2
ATmega881925126440x1E0x930x07
ATmega161638451212840x1E0x940x03
ATmega3232768102412840x1E0x950x02
ATmega6465536204825680x1E0x960x02
ATmega128131072409625680x1E0x970x02
ATmega64065536409625680x1E0x960x08
ATmega1280131072409625680x1E0x970x03
ATmega1281131072409625680x1E0x970x04
ATmega2560262144409625680x1E0x980x01
ATmega2561262144409625680x1E0x980x02
ATmega4840962566440x1E0x920x05
ATmega8881925126440x1E0x930x0A
ATmega1681638451212840x1E0x940x06
ATtiny131024643240x1E0x900x07
ATtiny15L102464--0x1E0x900x06
ATtiny231320481283240x1E0x910x0A
AT90USB6465536204825680x1E0x960x82
AT90USB128131072409625680x1E0x970x82