VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV TELEKOMUNIKACÍ FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS
AUTONOMNÍ PROGRAMÁTOR MIKROPROCESORŮ AVR S ETHERNETOVOU KONEKTIVITOU STANDALONE PROGRAMMER CONNECTIVITY
OF
AVR
MICROCONTROLLERS
DIPLOMOVÁ PRÁCE MASTER’S THESIS
AUTOR PRÁCE
BC. LUKÁŠ VERNER
AUTHOR
VEDOUCÍ PRÁCE SUPERVISOR
BRNO 2011
ING. MARTIN KRAVKA
WITH
ETHERNET
LIST SE ZADÁNÍM KVŮLI SPRÁVNÉMU ČÍSLOVÁNÍ STRÁNEK
ANOTACE Hlavním cílem diplomové práce je seznámení se s problematikou programování mikropočítačů AVR firmy Atmel, seznámení se s protokolem SD/MMC karty, navrhnutí vhodného řešení pro ethernetové připojení pro konstrukci autonomního programátoru mikroprocesorů AVR s ethernetovou konektivitou a návrh konstrukce. První část práce se zabývá problematikou teorie programování pamětí mikropočítače. Nejrozšířenějším způsobem je metoda sériového programování přímo v aplikaci, vžila se pro to zkratka ISP. Tento způsob programování poskytuje uživateli jednoduchou a rychlou obsluhu. Konstrukce autonomního programátoru je koncipována právě pro tuto ISP metodu. Programátor umožňuje si binární soubory pro cílové obvody stáhnout ze sítě Internet a mít je uložené na 2 GB flash paměti. Z tohoto důvodu se práce dále zabývá teoretickými znalostmi pro práci s SD/MMC a souborovým systémem FAT16. Poslední část se zabývá praktickým návrhem a konstrukcí autonomního programátoru. V přílohách diplomové práce jsou výstupy potřebné pro zhotovení konstrukce a těmi jsou schematická dokumentace elektrického zapojení obvodu programátoru, deska plošného spoje, rozpiska použitých součástek, elektronická dokumentace v programu Eagle a software pro mikropočítač Atmega32 autonomního programátoru .
KLÍČOVÁ SLOVA programátor, AVR, mikropočítač, procesor, ISP, programování, MMC
ABSTRACT The main purpose of this master’s thesis is to get to know programming of Atmel AVR microcontroller, working with SD/MMC cards, working with ethernet (TCP/IP) to create a standalone programmer of AVR microcontroller with ethernet connectivity. The first part deals with the questions of programming theory of memories inside microcontrollers and description of programming algorithm. The most used programming method is called „In System Programming“ - ISP. This method provides easy and fast manipulaton. Concept of this programmer is designed for this ISP method. In this thesis is too explain how to work with SD/MMC card and FAT16 file system. This knowledge is necessary to store binary program inside standalone programmer. In final part and in attachments there is hardware design, electrical scheme, bill of materials, printed circuit board, scheme in Eagle format, source code and binary program to microcontroller Atmega32.
KEYWORDS programmer, AVR, microcontroller, procesor, ISP, programming, MMC
VERNER, L. Autonomní programátor mikroprocesorů AVR s ethernetovou konektivitou. Brno: Vysoké učení technické v Brně, Fakulta elektrotechniky a komunikačních technologií, 2010. 57 s., 8 s. příloh. Vedoucí diplomové práce byl Ing. Martin Kravka.
Prohlášení Prohlašuji, že svou diplomovou práci na téma autonomní programátor mikroprocesorů AVR s ethernetovou konektivitou jsem vypracoval samostatně pod vedením vedoucího diplomové práce a s použitím odborné literatury a dalších informačních zdrojů, které jsou všechny citovány v práci a uvedeny v seznamu literatury na konci práce. Jako autor uvedené diplomové práce dále prohlašuji, že v souvislosti s vytvořením diplomové práce jsem neporušil autorská práva třetích osob, zejména jsem nezasáhl nedovoleným způsobem do cizích autorských práv osobnostních a jsem si plně vědom následků porušení ustanovení § 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávních důsledků vyplývajících z ustanovení § 152 trestního zákona č. 140/1961 Sb. V Brně dne ...............
............................................ podpis autora
Poděkování Děkuji vedoucímu práce Ing. Martinu Kravkovi za velmi užitečnou metodickou pomoc a cenné rady při zpracování diplomové práce.
V Brně dne .................
............................................ podpis autora
Obsah 1 Úvod.....................................................................................................................................11 2 Programování paměti mikropočítače AVR...........................................................................12 2.1 Paměťové zámky............................................................................................................12 2.2 Propojky (Fuse Bits)......................................................................................................12 2.3 Signatura........................................................................................................................14 2.4 Sériové programování - ISP...........................................................................................14 2.4.1 Ideové zapojení.....................................................................................................14 2.4.2 Algoritmus sériového downloadu.........................................................................15 2.4.3 Formát příkazů......................................................................................................16 2.4.4 Charakteristiky sériového downloadu..................................................................17 3 Vlastnosti a popis MMC/SD karty.......................................................................................19 3.1 Rozdíly mezi MMC a SD kartou...................................................................................19 3.2 Základní vlastnosti MMC karty.....................................................................................19 3.3 Zapojení vývodů MMC karty - protokol........................................................................20 3.4 MultimediaCard protokol...............................................................................................20 3.5 SPI protokol...................................................................................................................21 3.6 SPI mód vs MMC mód..................................................................................................22 3.7 Vnitřní registry MMC paměťové karty..........................................................................22 3.7.1 OCR (Operations Conditions Register)................................................................22 3.7.2 CID (Card Identification Register).......................................................................22 3.7.3 CSD (Card Specific Register)...............................................................................22 3.7.4 Status registr.........................................................................................................23 3.7.5 RCA (Relative Card Adress Register)..................................................................23 3.7.6 DSR (Driver Specific Register)............................................................................23 3.8 Registry v SPI režimu....................................................................................................23 3.9 Časové charakteristiky sběrnice SPI..............................................................................23 3.10 Inicializace a přechod do SPI režimu...........................................................................24 3.11 Formát rámce................................................................................................................25 3.12 Příkazy, odpovědi.........................................................................................................25 3.12.1 Příkazy................................................................................................................25 3.12.2 Odpovědi.............................................................................................................26 3.13 Čtení dat.......................................................................................................................28 3.14 Zápis dat.......................................................................................................................28 4 Souborový systém FAT16....................................................................................................29 4.1 MBR – Master Boot Record..........................................................................................29 4.2 Boot Record...................................................................................................................30 4.3 Alokační tabulka FAT.....................................................................................................31 4.4 Kořenový adresář...........................................................................................................32 4.5 Oblast dat.......................................................................................................................32 5 Hardwarová konstrukce programátoru.................................................................................33 5.1 Napájecí zdroj..............................................................................................................33 5.2 Ethernetový modul NanoSocketLAN............................................................................33 5.2.1 Podporované protokoly.........................................................................................34 5.2.2 Schéma zapojení vývodů......................................................................................34 5.2.3 UART rozhraní.....................................................................................................35 5.3 LCD displej....................................................................................................................35 5.4 SD/MMC karta..............................................................................................................36 5.5 Obvod tlačítek................................................................................................................36 5.6 ISP a JTAG konektory....................................................................................................36 6 Softwarové řešení programátoru..........................................................................................37 6.1 LCD displej....................................................................................................................37
6.2 Obsluha UART...............................................................................................................37 6.3 Obsluha SD/MMC karty................................................................................................37 6.3.1 Nízkoúrovňové funkce..........................................................................................38 6.3.2 Funkce pro tabulku oddílů....................................................................................38 6.3.3 Funkce pro souborový systém FAT16..................................................................39 6.4 ISP programování...........................................................................................................39 6.5 Hlavní smyčka programu...............................................................................................40 6.5.1 Definice globálních proměnných..........................................................................40 6.5.2 Inicializace............................................................................................................40 6.5.3 Nekonečná smyčka...............................................................................................41 6.6 Funkce položek menu....................................................................................................42 6.6.1 Výběr binárního souboru......................................................................................42 6.6.2 Výběr konfiguračního souboru.............................................................................42 6.6.3 Zápis paměti FLASH............................................................................................42 6.6.4 Zápis paměti EEPROM........................................................................................43 6.6.5 Zápis propojkových bitů, zámků a smazání čipu..................................................43 6.6.6 Stáhnutí binárních souborů z FTP serveru............................................................43 7 Příručka k použití.................................................................................................................44 7.1 Počáteční konfigurace modulu NanoSocketLAN..........................................................44 7.2 Naprogramování samotného programátoru...................................................................45 7.3 První spuštění ..............................................................................................................45 7.4 Stáhnutí binárních souborů............................................................................................45 7.5 Programování paměti FLASH nebo EEPROM.............................................................45 7.6 Zápis propojkových bitů, zámků, smazání čipu.............................................................45 8 Závěr....................................................................................................................................46 Literatura..................................................................................................................................47 Seznam použitých zkratek........................................................................................................48 Seznam příloh...........................................................................................................................49
Seznam obrázků Obr. 2.1: Šestivodičové zapojení mezi programátorem a cílovým mikropočítačem................14 Obr. 2.2: Průběhy signálů při sériovém downloadu..................................................................15 Obr. 2.3: Časování sériového programování.............................................................................17 Obr. 3.1: SD a MMC paměťová karta.......................................................................................19 Obr. 3.2: Zapojení kontaktů SD a MMC karty.........................................................................19 Obr. 3.3: Náhled komunikace MMC a SPI protokolu...............................................................21 Obr. 3.4: Časová charakteristika signálů DataIn/Out a CLK (šrafované oblasti jsou nedůležité) [7]..............................................................................................................................................23 Obr. 3.5: Formát R1, R1b (odpověď na všechny příkazy kromě příkazu SEND_STATUS)....26 Obr. 3.6: Formát odpovědi R2 (odpověď na příkaz SEND_STATUS: CMD13) [8]................27 Obr. 3.7: Čtení bloku dat (SPI režim) [8]..................................................................................28 Obr. 3.8: Blokový zápis dat (SPI režim) [8].............................................................................28 Obr. 5.1: Ethernetový modul NanoSocketLAN........................................................................33 Obr. 5.2: Zapojení vývodů NanoSocketLANu (pohled zdola).................................................34 Obr. 5.3: Zapojení vývodů konektoru ISP................................................................................36 Obr. 6.1: Hlavní vývojový diagram..........................................................................................41 Obr. 7.1: iChipConfig - nástroj pro konfiguraci ethernetového modulu...................................44 Obr. 12.1: Schéma zapojení 1. z 2.............................................................................................51 Obr. 12.2: Schéma zapojení 2. z 2.............................................................................................52 Obr. 12.3: Deska plošného spoje...............................................................................................53 Obr. 12.4: Osazovací plánek ze strany součástek.....................................................................54 Obr. 12.5: Osazovací plánek ze strany spojů............................................................................55 Obr. 12.6: Fotografie přístroje...................................................................................................58
Seznam tabulek Tab. 2.1: Paměťové zámky........................................................................................................12 Tab. 2.2: Propojky některých typů mikropočítačů (+ obsahuje, - nemá)..................................13 Tab. 2.3: Zapojení vývodů potřebné pro sériové programování (převzato z [4] str. 3)............15 Tab. 2.4: Příklad instrukce pro povolení programování............................................................15 Tab. 2.5: Instrukční soubor sériového downloadu....................................................................16 Tab. 2.6: Charakteristiky sériového programování [3].............................................................18 Tab. 2.7: TCLCL je perioda kmitočtu oscilátoru, je určena typem mikropočítače...................18 Tab. 2.8: Minimální doby mazání a programování [3].............................................................18 Tab. 3.1: Rozložení jednotlivých pinů MMC karty při použití MMC nebo SPI protokolu [7] 20 Tab. 3.2: Porovnání MultiMediaCard a SPI protokolu.............................................................22 Tab. 3.3: Časování sběrnice [7].................................................................................................24 Tab. 3.4: Formát rámce příkazu [8]...........................................................................................25 Tab. 3.5: Důležité příkazy MMC karty [7]...............................................................................26 Tab. 3.6: Význam jednotlivých bitů odpovědi R1 [7]...............................................................26 Tab. 3.7: Význam jednotlivých bitů odpovědi R2 [7]...............................................................27 Tab. 4.1: Základní struktura FAT16..........................................................................................29 Tab. 4.2: Popis MBR sektoru (převzato z [7] File System Format)..........................................30 Tab. 4.3: Rozmístění a význam dat pro vstup do každého oddílu (převzato z [7] File System Format)......................................................................................................................................30 Tab. 4.4: Struktura FAT16 boot sektoru (převzato z [7] File System Format)..........................31 Tab. 4.5: Možné hodnoty clusterů ve FAT16............................................................................32 Tab. 5.1: Význam vývodů konektoru J8 NanoSocketLANu [9]...............................................34 Tab. 5.2: Význam vývodů konektoru J9 NanoSocketLANu [9]...............................................35 Tab. 5.3: Význam tlačítek.........................................................................................................36 Tab. 6.1: Hiearchie LCD menu.................................................................................................42 Tab. 12.1: Rozpiska použitých součástek.................................................................................56
1 Úvod Cílem této diplomové práce je navrhnout a zkonstruovat autonomní programátor jednočipových mikropočítačů AVR s ethernetovou konektivitou. Slovo autonomní v tomto případě znamená, že binární programy cílových mikropočítačů AVR, které chceme programovat, budou trvale uloženy v paměti samotného programátoru a tudíž pro používání programátoru není zapotřebí osobní počítač. Ethernetová konektivita slouží k připojení do sítě Internet, díky ní si programátor automaticky stáhne (aktualizuje) svoji databázi binárních programů. Uživateli bude umožněno programátor ovládat (vybrat si binární program pro cílový mikropočítač) pouze pomocí tlačítek a LCD displeje. Počáteční kapitola diplomové práce se bude zabývat teoretickým studiem a popisem programování vnitřních pamětí mikropočítačů AVR, kontrolou a zamykáním pamětí. Mikropočítače AVR lze programovat trojím způsobem: Klasickým paralelním programováním, sériovým programováním vysokým napětím a moderní sériovou metodou ISP. Kapitola se bude zabývat pouze ISP metodou, protože umožňuje mikropočítače programovat přímo v aplikaci. Další kapitoly se budou zabývat teoretickým popisem úložného zařízení pro binární programy. Bude zde použita paměťová karta SD/MMC a stručně rozebrán popis komunikačního protokolu pro zápis a čtení dat s touto karta a popis souborového systému FAT16. Poslední kapitoly se budou zabývat návrhem a konstrukcí hardwarového řešení programátoru včetně jeho programového vybavení.
- 11 -
2 Programování paměti mikropočítače AVR Programové paměti v mikropočítačích jsou elektricky mazatelné a programovatelné. Většinou se jedná o paměti typu FLASH, která je typu EEPROM. Informace v těchto pamětech je uchována na principu přivedení elektrického náboje na polovodičový přechod hradel unipolárního tranzistoru, zvaných buňky. Díky tenké izolační vrstvičce oxidu křemičitého jsou přivedené elektrony v hradle „uvězněny“ a tím pádem je uložen 1 bit informace. Programování tedy spočívá v přivedení elektrického náboje do hradla, kde je „zapamatován“. Při adresaci naprogramované polovodičové buňky se tranzistor otevře a dává log. 0. Mazání paměti spočívá v tom, že se z hradla uložený náboj odvede pryč a tím vznikne log. 1.
2.1
Paměťové zámky
Všechny mikropočítače AVR poskytují dva zámkové bity pojmenované LB1 a LB2. Nenaprogramovaný bit zámku má hodnotu 1, naprogramovaný 0. Úroveň ochrany je rozdělena do tří režimů, kde režim jedna nepředstavuje žádnou ochranu a režim tři představuje maximální ochranu. Význam je uveden v tabulce 2.1. Zámky mohou být vymazány pouze příkazem Chip Erase, který vymaže obsah paměti Flash. Tabulka je převzata z katalogového listu [1] v sekci Memory programming, která je v základu shodná pro všechny typy mikropočítačů AVR. Tab. 2.1: Paměťové zámky Paměťové zámky
Typ ochrany
Režim LB1 LB2 1
1
1
Není aktivována žádná ochrana.
2
0
1
Zákaz programování FLASH a E2PROM, verifikace povolena.
3
0
0
Stejné jako režim 2, verifikace odstavena.
2.2
Propojky (Fuse Bits)
Programovací propojky, nebo-li také fuse bits, slouží k nastavení procesoru, jeho zdroje hodinového signálu, ochran proti přepisu a jiných vlastností. Špatným nastavením těchto propojek můžeme uvést procesor do již nepoužitelného stavu, z kterého se lze zotavit pouze přeprogramováním vysokým napětím. Hodnota propojky může být buď naprogramovaná (logická hodnota bitu je v 0) nebo nenaprogramovaná (logická hodnota bitu je v 1). Hodnoty propojek jsou tedy reprezentovány jako binární nebo dekadické či hexadecimální číslo. Propojkových bytů může být 1 až 3. V technické praxi se tyto byty značí jako LOW, HIGH a EXTENDED. Množství propojek (bytů) závisí na konkrétním typu mikropočítače AVR. Např. Atmega8 má dva byty: nižší (low), vyšší (high) pro uložení všech 16 propojkových bitů. Nebo mikropočítač Attiny11 má pouze 8 propojkových bitů. Podrobně rozepsaný popis propojkových bitů a umístění v bytu pro různé typy mikropočítačů je popsáno v aplikační poznámce [2] AVR061 na stranách 25 až 27.
- 12 -
Stručný výpis z katalogových listů [3] a popis některých propojek (fuse bits) u mikropočítačů AVR: ● SPIEN (SPI download Enabled) – Když je SPIEN naprogramován na 0, je umožněno sériové programování. Výchozí hodnota je 0, takže sériové programování je možné ● RCEN (RC oscilator ENabled) – volí oscilátor. Je-li RCEN = 0, používá se jako zdroj zabudovaný RC oscilátor. Je-li RCEN = 1 (výchozí hodnota), používá se klasický vnější krystalový oscilátor. ● FSTR (Fast Start) - Když je FSTR naprogramován na 0, procesor dříve začne vykonávat program. Výchozí nenaprogramovaná hodnota je 1. ●
BODLEVEL (Brown-up Detection level) – Výchozí hodnota je 1.
● BODEN (Brown-out detection) – Obvod pro hlídání napájecího napětí. Pokud je propojka nastavena, tak při poklesu napájecího napětí pod určitou úroveň, se ihned aktivuje Brown-out RESET. Napájení musí být blokováno kondenzátorem o hodnotě 47 až 100nF. ●
CKSEL – Nastavuje dobu zotavení RESETu.
RSTDISBL (Reset Disable) – Když je propojka naprogramována 0, není možný hardwarový reset. Výchozí hodnota je 1. ●
Většina propojek, například SPIEN, nelze programovat pomocí sériového programování (musí být použit paralelní programátor). Hodnota propojek se příkazem Smazání Čipu nezmění. Na závěr poznamenejme, že mikropočítače AVR nemají zabudovány všechny z výše uvedených propojek. Detailní přehled a přesný obsah propojek nalezneme v katalogových listech k jednotlivým mikropočítačům [3]. Pro několik vybraných mikropočítačů je z jejich katalogových listů sestaven malý přehled propojek. Situaci popisuje tabulka 2.2. Tab. 2.2: Propojky některých typů mikropočítačů (+ obsahuje, - nemá) Typ mikropočítače
SPIEN FSTRT RCEN BODLEVEL BODEN CKSEL2..0
RSTDISBL
AT90S1200
+
-
+
-
-
-
-
AT90S2313
+
+
-
-
-
-
-
AT90S2343
+
-
+
-
-
-
-
AT90S4433
+
-
-
+
+
+
-
AT90S8515
+
+
-
-
-
-
-
AT90S8535
+
+
-
-
-
-
-
ATtiny22
+
-
+
-
-
-
-
ATtiny11
+
+
-
-
-
+
+
ATtiny12
+
-
-
+
+
CKSEL3.0
+
ATtiny15
+
-
-
+
+
CKSEL1.0
+
- 13 -
2.3
Signatura
Všechny AVR mikropočítače obsahují 3 byty signatury, identifikující výrobce a typ mikropočítače. Tento kód může být čten sériovým i paralelním programátorem. Tyto tři byty jsou uloženy na speciálním adresním prostoru (mimo paměť Flash a EEPROM). První byte má vždy hodnotu 0x1E (indikuje výrobce ATMEL). Druhý byte indikuje velikost FLASH (0x90 – 1 KB, 0x91 – 2 KB, 0x92 – 4 KB, 0x93 – 8 KB). Poslední byte indikuje konkrétní typ (několik mikropočítačů může mít stejnou velikost FLASH). Signaturu nelze číst v režimu zámku 3 (viz kapitola 2.1).
2.4
Sériové programování - ISP
Sériové programování umožňuje programovat mikropočítač přímo v systému. Odpadá složité vkládání/vyjímání (odletování) čipu z/do programátoru respektive do aplikační desky. Toto ušetří mnoho peněz a času během vývoje. Obvykle není u ISP potřeba vyššího napětí jak +5 V jako u paralelního programování. Tímto způsobem lze také programovat některé propojky, kromě propojky SPIEN, která povoluje sériové programování. Továrně je sériové programování povoleno. Používané rozhraní pro sériové programování je SPI. SPI (Serial Peripheral Interface) je sériové periferní rozhraní. Používá se také pro komunikaci mezi řídícími mikroprocesory a ostatními integrovanými obvody. Komunikace je realizována pomocí společné sběrnice. Adresace se provádí pomocí zvláštních vodičů, které při logické nule aktivují příjem a vysílání zvoleného zařízení. Ucc
Ucc
SÉRIOVÝ PROGRAMÁTOR
CÍLOVÝ AVR PROGRAMOVANÝ
RESET MISO MOSI SCK
RESET MISO MOSI SCK
GND
OBVOD
GND
Obr. 2.1: Šestivodičové zapojení mezi programátorem a cílovým mikropočítačem
2.4.1
Ideové zapojení
Sériové rozhraní obsahuje SCK (hodiny), MOSI (výstup) a MOSI (vstup). Viz obrázek 2.1. Během programování AVR, sériový programátor vždycky pracuje jako řídící a cílový systém je podřízený. Při každém hodinovém pulsu na vodiči SCK se přenese jeden bit z řídícího programátoru do podřízeného cílového systému po vodiči MOSI. Současně se přenese jeden bit z cílového čipu do programátoru po vodiči MISO. Pro zajištění správné komunikace sériového programování je nezbytné propojit GND (země) programátoru a programovaného čipu. Napájecí napětí programovaného čipu musí být v rozsahu 2,6 až 6 V.
- 14 -
Tab. 2.3: Zapojení vývodů potřebné pro sériové programování (převzato z [4] str. 3) Vývod
Popis
SCK
Hodiny, generované sériovým programátorem (řídící).
MOSI
Komunikace z programátoru (řídící) do programovaného mikropočítače (podřízený).
MISO
Komunikace z AVR do sériového programátoru.
GND
Systémy musí být galvanicky propojeny zemí.
RESET K povolení sériového programování, RESET AVR musí být po celou dobu aktivní (log0). Toto řídí programátor. Ucc
Cílový AVR musí být během programování napájen. Napájení může být z externího zdroje nebo odebírána z napájení programátoru.
Po aplikaci RESET = 0, musí být jako první vyslána instrukce Povolení programování (Programming enable Instruction). Instrukce Smazání čipu (Chip Erase) uvede obsah všech paměťových buněk programové i datové paměti do stavu 0xFF.
2.4.2
Algoritmus sériového downloadu
Zapisovaná data jsou vzorkována náběžnou hranou SCK. Čtená data se objevují souběžně se sestupnou hranou SCK. Viz obr. 2.2. MOSI
MSB
LSB
MSB
MISO
LSB
SCK Obr. 2.2: Průběhy signálů při sériovém downloadu ●
Připojíme napájecí napětí mezi Ucc a GND, SCK = 0. Jakmile je RESET na cílovým čipu aktivní, tak sériové programování je připraveno. Vnitřní sériová sběrnice je aktivována a čeká na příkazy od programátoru. Je velmi důležité, aby vývod SCK byl při náběhu napájení stabilní, protože jediná hrana může být příčinou ztráty synchronizace s programátorem. Pokud programátor nedokáže zaručit SCK = 0 při náběhu napájení, je třeba na vývod RESET přivést kladný impuls (log. 0, log. 1, log. 0) o délce trvání alespoň dvojnásobku periody hodin XTAL1 po náběhu SCK = 0.
●
Po aktivování resetu do log. 0 se vyčká alespoň 20 ms a poté se vyšle první příkaz.
Tab. 2.4: Příklad instrukce pro povolení programování Instrukce
MOSI, posílání do AVR
Povolení programování 0x9C 53 xx yy ●
MISO, vráceno z cílového AVR 0xzz 9C 53 xx
Pokud dojde k synchronizaci, bude druhý byte instrukce Povolení programování vrácen zpět v průběhu zápisu třetího bytu. Pokud tomu tak není, lze přidat jeden impuls SCK a vyslat instrukci Povolení programování znovu. Pokud se nepodaří - 15 -
získat odpověď ani po 32 pokusech, je programovaný čip vadný. Tabulka 2.4 zobrazuje příklad vyslání instrukce do cílového čipu. ●
Pokud je provedena instrukce Smazání čipu (vykoná se pro smazání obsahu FLASH), je třeba vyčkat dobu tWD_ERASE, než je možno pokračovat dále. Viz tabulka 2.8.
●
FLASH a E2PROM paměti se programují po jednom bytu instrukcí Zápis (Write), která nese jak data, tak i jejich adresu. E2PROM paměťové místo je před zápisem nových dat nejdříve automaticky vymazáno. Pro dokončení zápisu je třeba vyčkat dobu tWD_PROG, než vyšleme další instrukci.
●
Libovolné místo paměti může být verifikováno (zpětně čteno) použitím instrukce Čtení (Read), která vrátí obsah vybrané adresy.
●
Na konci programování lze uvést RESET do log. 1.
●
Po naprogramování lze vypnout napájecí napětí (taková operace však není příliš častá). Současně je třeba zajistit: XTAL = 0 (krystal lze ponechat připojený), RESET = 1.
2.4.3
Formát příkazů
Všechny příkazy mají běžný formát sestavený ze čtyř bytů. První byte obsahuje kód příkazu, druh operace a cílovou paměť. Druhý a třetí byte obsahuje adresu paměti. Čtvrtý byte obsahuje data v každém směru. Tabulka a algoritmy jsou převzaty z dokumentace katalogových listů [3] firmy Atmel, které jsou pro většinu součástek stejné. Tab. 2.5: Instrukční soubor sériového downloadu Instrukce
Formát Byte 1
Byte 2
Povolení programování 1010 1100 0101 0011
Byte 3
Byte 4
Operace Aktivuje
xxxx xxxx xxxx xxxx programovací
rozhraní ISP Smazání čipu 1010 1100 100x xxxx
FLASH, xxxx xxxx xxxx xxxx Smaže 2
Čtení kódu
0010 H000 aaaa aaaa
bbbb bbbb oooo oooo Čtení instrukce
0010 H000 00xx xxxx
Zapíše H (dolní nebo horní) byte do xxbb bbbb iiii iiii stránkovací paměti programu na adresu b. Dolní byte musí být načten první
0110 H000 aaaa aaaa
bbbb bbbb iiii iiii programu do
Načtení stránky programu
E PROM a zámky programu z FLASH
Zápis kódu
Zápis instrukce FLASH
Čtení dat
1010 0000 aaaa aaaa
bbbb bbbb oooo oooo Čtení dat z E2PROM
Zápis dat
1110 0000 aaaa aaaa
bbbb bbbb iiii iiii Zápis do E2PROM
- 16 -
Instrukce
Formát Byte 1
Byte 2
Byte 3
Operace
Byte 4
Zápis zámku 1010 1100 1111 1AB11 xxxx xxxx xxxx xxxx Zápis zamykacích bitů Čtení signatury Zápis fuse bytu
0011 0000 xxxx xxxx
xxxx xxbb oooo oooo Čtení signatury
1010 1100 1010 0000
0 – naprogramovaný xxxx xxxx iiii iiii bit, 1 – nenaprogramovaný bit
Zápis horního fuse bytu 1010 1100 1010 1000 Čtení kalibrační konstanty
obvodu
0 – naprogramovaný xxxx xxxx iiii iiii bit, 1 – nenaprogramovaný bit Čtení kalibrační
0011 1000 xxxx xxxx
0000 00bb oooo oooo konstanty na adrese
b
Vysvětlivka: a = horní bity adresy, b = dolní bity adresy, H = 0 – Dolní byte, 1 – Horní byte, o = data vysílána na vývodu MISO, i = data přijímána na vývodu MOSI, x = cokoliv, A = zámek1, B=zámek2 (bit zámku je nastaven, pokud má hodnotu 0)
2.4.4
Charakteristiky sériového downloadu
Pro úspěšné provedení sériového programování je nezbytné dodržet minimální časové intervaly řídících signálů. Důležitý je zejména kmitočet signálu SCK, předstih a přesah dat na lince MOSI. Dále jsou určeny doby mazání programu. Po aplikaci RESET = 0, musí být jako první vyslána instrukce Povolení programování (Programming enable instruction). Instrukce Smazání čipu (Chip Erase) uvede obsah všech paměťových buněk programové i datové paměti do stavu 0xFF. Algoritmus sériového programování, obrázky a tabulky byly převzaty z [3], [4], a [5].
MOSI tOVSH
SCK
tSHOX tSHSL
tSLSH tSLIV
MISO Obr. 2.3: Časování sériového programování Důležitý je zejména kmitočet signálu SCK, předstih a přesah dat na lince MOSI. Dále jsou určeny doby mazání programu.
- 17 -
Tab. 2.6: Charakteristiky sériového programování [3] Symbol
Parametr
Min
1/tCLCL
Frekvence oscilátoru (Ucc = 2,7 - 4V)
tCLCL
da oscilátoru (Ucc = 2,7 - 4V)
1/tCLCL
Frekvence oscilátoru (Ucc = 4 - 6V)
tCLCL
Perioda oscilátoru (Ucc = 4 - 6V)
tSHSL
Typ Max Jednotka
0
4
255
MHz ns
0
12
MHz
83,3
ns
Délka kladného impulsu SCK
4,0tCLC
ns
tSLSH
Délka záporného impulsu SCK
tCLCL
ns
tOVSH
Předstih dat na MOSI před SCK
1,25tCLCL
ns
tSHOX
Přesah dat na MOSI přes SCK
2tCLCL
ns
tSLIV
Vystavení dat na MISO po sestupné hraně SCK
10
16
32
ns
Tab. 2.7: TCLCL je perioda kmitočtu oscilátoru, je určena typem mikropočítače fMAX [MHz]
tCLCL MIN [ns]
4
250
8
125
10
100
12
83,3
Tab. 2.8: Minimální doby mazání a programování [3] Symbol
Napájecí napětí
Parametr
3,2 V 3,6 V
tWD_ERASE Minimální prodleva po instrukci smazání čipu tWD_PROG
Minimální prodleva po zápisu jednoho místa do Flash nebo E2PROM
- 18 -
4,0 V
5,0 V
18 ms 14 ms 12 ms
8 ms
9 ms
4 ms
7 ms
6 ms
3 Vlastnosti a popis MMC/SD karty Vzhledem k tomu, že v programátoru budou muset být binární soubory uloženy na nějakém dostatečně velkém napěťově nezávislém paměťovém médiu, jako úložné zařízení bude zvolena 2 GB paměťová karta typu flash. Tato kapitola se bude zabývat teoretickým popisem vlastností MMC/SD karty, popisem komunikačního protokolu, zápisem a čtením dat, algoritmem EEC pro opravu chyb, napájením a časováním.
3.1
Rozdíly mezi MMC a SD kartou
Pro tento projekt bude použita SD karta, která je oproti kartě MMC modernější, dostupnější a je s ní zpětně kompatibilní. SD karta oproti MMC obsahuje přepínač proti přepisu, rozměrově je o 0,7 mm silnější (32 mm x 24 mm x 2,1 mm), má navíc dva kontakty. Ostatní kontakty jsou mechanicky i elektricky kompatibilní. Přenosové rychlosti a kapacity jsou u SD karet také o něco větší. SD karta dosahuje rychlostí až 100 Mbit/s, MMC pouze 20 Mbit/s. Následující kapitoly se budou kvůli přehlednosti zabývat popisem starší MMC karty.
Obr. 3.1: SD a MMC paměťová karta Obr. 3.2: Zapojení kontaktů SD a MMC karty
3.2
Základní vlastnosti MMC karty MMC karta má tyto základní vlastnosti: ●
Kompatibilní s MMC protokolem,
●
podporuje SPI režim,
●
napájecí napětí 2,7 až 3,6 V (typicky 3,3 V),
●
odběr proudu: čtení 50 mA, zápis 60 mA, režim spánku 150 μA,
●
fyzický rozměr: 32 mm x 24 mm x 1,4 mm
●
pracovní teplota: - 25 až 85 °C,
●
datový přenos až s 10 kartami,
●
oprava chyb paměti,
●
hodinový signál 0 až 20 MHz,
●
100000 zápisů,
●
automatický režim spánku. - 19 -
Jednotlivé značky MMC karet se od sebe vzájemně příliš neliší. Všechny technické informace budou převzaty z datasheetu pro MMC kartu firmy SanDisk [7]. Mezi další základní vlastnosti patří například dlouhá životnost karty. Pro zápis se udává až 100000 zápisů. Počet čtení je z principu karty téměř neomezený. Další důležitá vlastnost karty je automatický přechod do režimu spánku. Ukončí-li karta všechny úkony čtení a zápisu a nepřijímá-li dlouhodobě žádné příkazy, přejde automaticky do režimu spánku, čímž se značně sníží její spotřeba. Kartu lze dále připojovat i za chodu zařízení. Je ovšem nutné uzpůsobit konektor tak, aby vývody napájení byly delší a připojovali se tedy na kartu jako první.
3.3
Zapojení vývodů MMC karty - protokol
MMC paměťová karta má na jedné straně 7 vývodů. Vývody mají své funkce přiřazeny podle toho jaký protokol používáme. Rozlišujeme dva druhy protokolů: MultimediaCard protokol a SPI protokol. Oba protokoly používají stejné vývody. SPI protokol je zvolen aktivováním kontaktu CS a posláním příkazu CMD0. Tab. 3.1: Rozložení jednotlivých pinů MMC karty při použití MMC nebo SPI protokolu [7] MMC (MultimediaCard) protokol Pin
Název
Typ
popis
1
RSV
NC
Nepřipojen nebo vždy log. 1
2
CMD
I/O, PP, OD Příkaz/Odpověď
3
VSS1
S
Zem
4
VDD
S
Napájení
5
CLK
I
Kmitočet signálu Clock
6
VSS2
S
Zem
7
DAT0
I/O, PP
Datový vodič
1
CS
I
Výběr čipu (aktivní v log. 0)
2
DataIn
I
Data ve směru od zařízení ke karta
3
VSS1
S
Zem
3
VDD
S
Napájení
5
CLK
I
Kmitočet signálu Clock
6
VSS2
S
Zem
7
DataOut O
SPI Mode
Data ve směru od karty k zařízení
Vysvětlivka: S – napájení, O – výstup, PP – push pull, OD – open drain, NC - nepřipojený
3.4
MultimediaCard protokol
Při použití standardního protokolu MultimediaCard jsou využívány 3 komunikační a 4 podpůrné vodiče. Vodič CMD se používá obousměrně na zasílání příkazů a přijímání odpovědí. - 20 -
Datový vodič s označením DAT se používá také obousměrně. Procesor a karta pracují v režimu push-pull. ●
CLK: Hodinový signál CLK je vysílán ve směru od hosta ke kartě, pracuje v režimu push-pull. S každou periodou hodinového signálu se přenese jeden bit příkazu nebo dat. Frekvence u MMC karet může být v rozsahu 0 až 20 MHz.
●
CMD je obousměrný kanál pro přenos řídících příkazů. Host a karta pracují ve dvou režimech: Open-drain pro inicializaci a push-pull pro rychlý přenos příkazu.
●
DAT je obousměrný datový kanál, pracuje v režimu push-pull.
Definice a popis jednotlivých vývodů při MultiMediaCard módu je v tabulce 3.1. Schematický diagram MMC protokolu je v obrázku 3.3.
3.5
SPI protokol
Při použití SPI režimu jsou využívány 3 základní komunikační vodiče: CLK, DataIn, DataOut a navíc signál CS. Signál CS je zkratkou pro Chip Select, používá se pro výběr aktivního zařízení. Tento signál musí být aktivní po celou dobu komunikace. Vodiče DataIn a DataOut nejsou obousměrné. Vodič DataIn je používán pro komunikaci z mikropočítače na kartu – zápis dat. Během tohoto procesu mikropočítač čte odpovědi po vodiči DataOut. Protokol SPI pracuje tak, aby mohl komunikovat s mikropočítačem po SPI sběrnici. K nastavení této sběrnice se dostaneme později. Funkce jednotlivých pinů při použití tohoto protokolu je vidět v tabulce 3.1. Schematický diagram SPI protokolu je na obrázku 3.3.
MMC protokol CPU CMD
Příkaz
CMD
Odpověď
DAT
Data
(1) Příkaz
MMC
(2) Odpověď (3) Data (Čtení)
DAT
CS
(3) Data (Zápis)
SPI protokol CPU
Čtení
DataIn
Příkaz
DataIn
Data
(3') Data (Zápis)
Zápis
Odpověď
DataOut CS
Data
(2) Odpověď DataOut
Log. 0
Obr. 3.3: Náhled komunikace MMC a SPI protokolu
- 21 -
(1) Příkaz
(3'') Data (Čtení)
MMC
3.6
SPI mód vs MMC mód
Tab. 3.2: Porovnání MultiMediaCard a SPI protokolu MultiMediaCard mód
SPI mód
3-drátová sériová sběrnice (clock, command, 3-drátová sériová sběrnice (clock, dataIn, data) dataOut) + aktivace CS Až 64k karet adresovatelných bus protokolem Výběr karty hardwarově CS signálem Až 30 karet na jedné fyzické sběrnici
Každá karta potřebuje vlastní CS signál
Lehká identifikace a přidělování adresy pro Není dostupné, výběr karty hardwarovým CS jednotlivé karty signálem Ochrana CRC proti chybám při přenosu dat
Volitelné, standardní mód je bez kontroly chyb
Sekvenční a single/multiple block čtení/zápis Pouze single/multiple příkazy příkazy
block
čtení/zápis
V zařízení bude použito pouze jedné MMC karty. Hardwarová aktivace pomocí signálu CS je tedy nejjednodušší způsob, jak paměťovou kartu oživit. Příkazy pro čtení a zápis pouze jednoho bloku dat jsou také vyhovující a proto bude pro komunikaci použita paměťová karta v režimu SPI. Celkově je pro komunikaci s mikropočítačem výhodnější. Další kapitoly se budou zabývat pouze tímto protokolem.
3.7
Vnitřní registry MMC paměťové karty
Paměťová karta obsahuje 6 speciálních registrů. Registry OCR, CID a CSD nesou informace o nastavení karty. Registr RCA se používá pro uchování relativní adresy aktuálního spojení.
3.7.1
OCR (Operations Conditions Register)
Je to 32 bitový registr a kromě informací o napěťových úrovních, ve kterých karta může pracovat: 1 bit = 100 mV, nese i tzv. STATUS bit, který se nastaví do log. 1, je-li karta úspěšně zinicializována.
3.7.2
CID (Card Identification Register)
Je to 128 bitový registr a obsahuje unikátní výrobní číslo naprogramované během výroby a nejde změnit. V MMC režimu se používá jako adresa pro výběr karty.
3.7.3
CSD (Card Specific Register)
Je to 128 bitový registr a obsahuje specifická data pro práci s kartou. Některé bity registru jsou pouze pro čtení, jiná jsou jednou či vícekrát programovatelná. Uchovávané informace jako: maximální přenosová rychlost, maximální délka přenosového bloku, velikost paměti, copy flag, označení používaného souborového systému a CRC kontrolní součet pro celý registr CSD (je nutné ho přepočítat při každé změně obsahu).
- 22 -
3.7.4
Status registr
Je to 32 bitový registr indikující stav a chybová hlášení MMC karty.
3.7.5
RCA (Relative Card Adress Register)
Je to 16 bitový registr obsahující adresu karty, která je viditelná během identifikace karty. Tato adresa je po identifikaci používána pro adresování komunikace mezi kartou a hostem.
3.7.6
DSR (Driver Specific Register)
Je to 16 bitový registr, který využívá ovladač sběrnice. Tento registr je volitelný a není podporován všemi typy karet.
3.8
Registry v SPI režimu
V SPI režimu jsou dostupné pouze registry CSD a CID. Jejich formát je stejný jako v MMC režimu. Ačkoliv několik bitů je v SPI režimu mírně odlišné. V SPI režimu má Status registr kratší formát.
3.9
Časové charakteristiky sběrnice SPI
SPI protokol je druhým (první je MMC protokol, kterým se nebudeme zabývat) volitelným protokolem, kterým MMC karta disponuje. Je koncipován pro komunikaci po SPI sběrnici. SPI (Serial Peripheral Interface) je sériové periferní rozhraní, sloužící pro komunikaci mezi kartou a mikropočítačem, obsahující následující čtyři signály: ●
CS: Host to card select signál
●
CLK: Host to card clock signal.
●
DataIn: Host to card data signal
●
DataOut: Card to host data signal TPP tWH
tWL VIH
CLK tIH
VIL tHL
tLH VIH
Vstup tISU
VIL VOH
Výstup VOL tOH
tOSU
Obr. 3.4: Časová charakteristika signálů DataIn/Out a CLK (šrafované oblasti jsou nedůležité) [7] - 23 -
Přičemž mikropočítač vystupuje v roli takzvaného řadiče sběrnice (master), paměťová karta pracuje v režimu slave. Mikropočítač, který pracuje jako master, obsahuje generátor hodinového signálu, který je rozveden do všech ostatních karet, čímž je umožněn zcela synchronní (navíc ještě obousměrný) přenos dat. Hodinový signál je rozváděn vodičem označovaným symbolem CLK. Kromě vodiče s hodinovým signálem jsou uzly propojeny dvojicí vodičů označovaných symboly DataIn a DataOut, pomocí nichž se obousměrně (full duplex) přenáší data. Posledním signálem, který se u této sběrnice používá, je signál CS (Card Select), jenž slouží– jak již jeho název napovídá– k výběru některé karty pracujícího v režimu slave. V této kapitolách si ukážeme, časový diagram (obrázek 3.4 a tabulka 3.3) sběrnice SPI. Všechny čtyři signály – CLK, DataIn, DataOut i CS, pro svoji funkci vyžadují pouze jednosměrné porty, což přispívá k jednoduché a především levné implementaci této sběrnice. Tab. 3.3: Časování sběrnice [7] Parametr
Symbol
Min
Max
Jednotka
Clock Freq, Data Transfer Mode
fpp
0
20
MHz
Clock Freq. Identification Mode
fOD
0
400
kHz
Clock Low Time
tWL
10
-
ns
Clock High Time
tWH
10
-
ns
Clock Rise Time
tTLH
-
10
ns
Clock Fall Time
tTHL
-
10
ns
Input Setup Time
tLSU
3
-
ns
Input Hold Time
tIH
3
-
ns
Output Setup Time
t0SV
5
-
ns
Output Hold Time
tODLY
5
-
ns
Vstupy CMD, DAT vztažení k CLK
Výstupy CMD, DAT vztažené k CLK
3.10
Inicializace a přechod do SPI režimu
Zinicializovat kartu do SPI módu se provede provede následující přesnou posloupností událostí (popis příkazů kapitola 3.12 ): ●
přivedeme neaktivní úroveň na CS (log. 0),
●
počkáme minimálně 76 hodinových cyklů,
přivedeme aktivní úroveň na CS (log. 0) a pošleme příkaz CMD0 (GO_IDLE_STATE) , ●
V tomto okamžiku jsme v režimu SPI a mikropočítač očekává na response R1 od karty, jeho hodnota musí být 0x01, ●
●
pošleme příkaz CMD1,
●
čekáme na odpověď R1, jeho hodnota musí být 0x00.
- 24 -
Obousměrné signály CMD a DAT jsou v tomto případě nahrazeny dvěma jednosměrnými signály. Signál DataIn přijímá data od hostitelského zařízení a DataOut vysílá data směrem k hostitelskému zařízení.
3.11
Formát rámce
Každý rámec se skládá z šesti bytů. První byte označuje, že se jedná o příkaz s číselnou hodnotou příkazu. Jeho první dva bity začínají 01, označující začátek příkazu, zbylých 6 bitů slouží k identifikaci typu příkazu. Další čtyři byty určují argument příkazu, většinou se jedná o adresu nebo bity sloužící k nastavení vlastnosti karty. Poslední šestý byte slouží k redundantní kontrole (CRC) a k ukončení celého rámce. Poslední bit v CRC musí být nastaven na log. 1, je to stop bit. Tabulka zobrazuje formát rámce. Příkaz obsahuje 48 bitů (6 bytů) obsahující start-bit bit (vždy s hodnotou nula), vysílací bit (vždy 1), 6 bitů příkazu, 4 byty (32 bitů) pro argument příkazu, 7 bitů CRC a stop-bit (vždy 1). Pole argumentu obsahuje nezbytné informace (relativní adresa, adresa pro čtení/zápis atd.) příkazu. V režimu SPI se CRC kontrola standardně nepoužívá, ale lze ji zapnout. Kontrola je nutná jen pro inicializaci karty ( příkazy CMD0 a CMD8), v další komunikaci není kartou vyžadována. Tabulka 3.4 zobrazuje formát rámce (příkazu). Tab. 3.4: Formát rámce příkazu [8] Pozice bitu
47
46
[45:40]
[39:8]
[7:1]
0
Šířka (bit)
1
1
6
32
7
1
Hodnota
0
1
x
x
x
1
Popis
3.12
Start bit
Vysílací bit Příkaz
Argument
CRC7
Stop bit
Příkazy, odpovědi
Po inicializaci do SPI režimu můžeme začít přenášet data. Komunikace v SPI režimu je zarovnána na 8 bitů. Protokol SPI se skládá z příkazů (commands), odpovědí (responses) a bloků dat.
3.12.1
Příkazy
Příkazy slouží ke komunikaci mikropočítače s kartou. Mikropočítač posílá požadovaný příkaz, vždy jako 6-ti bytovou zprávu. Příkazy jsou rozděleny do skupin podle funkce: ●
Základní příkazy,
●
příkazy čtení,
●
příkazy zápisu,
●
příkazy mazání.
V tabulce 3.5 je uveden stručný seznam nejdůležitějších příkazů. Celý popis všech příkazů je v [7], je jich přibližně padesát. SPI režim nepoužívá všechny a ne všechny jsou podporovány. Na každý příkaz karta odpovídá odpovědí (response).
- 25 -
Tab. 3.5: Důležité příkazy MMC karty [7] Příkaz
Argument
Typ odpovědi Zkratka
CMD0
žádný
R1
CMD16 32 b délka bloku
R1
CMD17 32 b adresa bloku
R1
CMD24 32 b adresa bloku
R1
CMD58 žádný
R3
3.12.2
Popis
GO_IDLE_STATE Reset MMC karty Nastaví délku SET_BLOCKLEN komunikačního bloku READ_SINGLE_ Přečte z adresy blok dat BLOCK Zapíše na adresu blok WRITE_BLOCK dat READ_OCR Přečte registr OCR
Odpovědi
Odpovědi (response) na příkazy (commands) jsou v SPI režimu dva typy, a to R1, R2. Odpověď R2 je 16 bitová a je poslána když je přijat příkaz číslo 13. R1 je 8 bitová odpověď a je vyslána, když je přijat jakýkoliv jiný příkaz. Záleží vždy na příkazu, který vysíláme a jednotlivé bity vždy označují nějakou skutečnost. Formát odpovědí pro režim SPI je na obrázku 3.5 a popis jednotlivých stavových bitů je v tabulce 3.6. Odpověď R2 karta zašle po přijetí příkazu SEND_STATUS CMD13. Odpověď R2 je 16 bitů dlouhá a první byte je shodný s odpovědí R1. Formát odpovědi R2 je na obrázku 3.6 a popis jednotlivých bitů je v tabulce 3.7 7
0
Nečinný stav Reset po mazání Neplatný příkaz Chyba CRC Chyba mazání Neplatná adresa Chybný parametr
Obr. 3.5: Formát R1, R1b (odpověď na všechny příkazy kromě příkazu SEND_STATUS) Tab. 3.6: Význam jednotlivých bitů odpovědi R1 [7] Chybový stav
Definice
Nečinný stav
Karta je v nečinném stavu a provádí inicializaci.
Reset po mazání
Předčasné ukončení mazací sekvence.
Neplatný příkaz
Byl detekován nesprávný příkaz.
Chyba CRC
CRC kontrola posledního příkazu selhala.
Chyba mazání
Chyba během mazání.
- 26 -
Chybový stav
Definice
Neplatná adresa
Adresa neodpovídá délce bloku použitou příkazem.
Chybný parametr
Parametr příkazu je mimo povolený rozsah.
Tab. 3.7: Význam jednotlivých bitů odpovědi R2 [7] Chybový stav
Definice
Mimo rozsah
Tento status bit má dvě funkce. Je li nastaven, parametr příkazu je mimo rozsah nebo se mikropočítač pokouší změnit paměť ROM, copy bit nebo WP bit registru CSD.
Parametr mazání
Chyba při mazání.
Stav ochrany zápisu
Pokus o neoprávněný zápis do chráněného bloku.
ECC selhalo
Selhání opravného kódu karty selhalo.
Chyba karty
Chyba vnitřního řadiče karty.
Obecná chyba
Obecná neznámá chyba.
Ochrana zápisu
Tento bit je nastaven, když se mikropočítač pokouší smazat sektor chráněný proti zápisu.
Karta je zamčena
Bit je nastaven uživatelem.
7 0
Bajt 1
0
Bajt 2
7
při
zamknutí
0
0 Karta je zamčena Ochrana zápisu Obecná chyba Chyba karty ECC selhalo Stav ochrany zápisu Parametr mazání Mimo rozsah Nečinný stav Reset po mazání Neplatný příkaz Chyba CRC Chyba mazání Neplatná adresa Chybný parametr
Obr. 3.6: Formát odpovědi R2 (odpověď na příkaz SEND_STATUS: CMD13) [8]
- 27 -
karty
3.13
Čtení dat
SPI protokol podporuje čtení dat po blocích, využívá k tomu příkazy CMD17. Velikost bloku se definuje v registru CSD a může nabývat hodnoty 512 B až 2 KB. Jako argument příkazu se použije 32b adresa počátku bloku. Karta příkaz potvrdí odpovědí, ve které zhodnotí správnost adresy. Pokud adresa je bez chyby, karta pokračuje zasláním bloku dat doplněný o CRC. Blokový princip čtení dat je na obrázku 3.7.
DataIn
Příkaz
DataOut
Odpověď
Data
CRC
Operace čtení (CMD17)
Obr. 3.7: Čtení bloku dat (SPI režim) [8]
3.14
Zápis dat
Blokový zápis dat se v SPI režimu provádí příkazem CMD24. Velikost bloku se opět může definovat v registru CSD, jehož hodnota je nezávislá na velikosti bloku pro čtení. Po odeslání příkazu pro zápis, karta odešle odpověď informující o správnosti adresy a její připravenosti k zápisu. Poté se zahájí přenos datového bloku z mikropočítače do karty. Po odeslání celého bloku karta odešle odpověď o korektnosti přenosu. Karta poté vyšle příznak zaneprázdnění a čeká se než řadič karty dokončí zápis do paměti. V momentě, kdy je karta připravena k vykonání dalšího příkazu, přestane vysílat příznak zaneprázdněn. Blokový princip zápisu dat je na obrázku 3.8.
DataIn DataOut
Příkaz
Dataz Odpověď
Data odpověď Zaneprázdněn
Operace zápisu (CMD24)
Obr. 3.8: Blokový zápis dat (SPI režim) [8]
- 28 -
4 Souborový systém FAT16 Při řešení problému s ukládání dat na MMC kartu se nabízejí 2 možnosti. Výhodou přímého zápisu a čtení dat na paměťovou kartu, jak je popsáno výše, je především jednoduchost. Nevýhodou je, že při mazání části paměťového místa vznikne volné místo, které dále bude nevyužito nebo do tohoto prostoru se zapíší nová data. Může se ovšem stát, že nová data budou mít větší objem než vzniklá mezera, přepíší si tímto způsobem dále uložená užitečná data. Tento nedostatek řeší právě souborový systém jehož výhodou je i snadné čtení na osobním počítači. Paměťové karty jsou obvykle, stejně jako pevné disky osobních počítačů, formátovány souborovým systémem. Tato kapitola se bude zabývat specifikací souborového systému FAT16, který je kromě paměťových karet používaný na starších operačních systémech Windows a DOS. FAT (File Allocation Table) je způsob ukládání souborů na disk a informování o tom, kde je který soubor uložen a kde jsou jeho jednotlivé části. FAT16 (vznik datován do roku 1977) určuje použití 16ti bitových ukazatelů na alokační jednotky (clustery), pomocí kterých jsou soubory ukládány na disk. Cluster je tvořen jedním nebo více sektory (pouze mocniny dvou) maximálně však 64, z čehož vyplývá, že při velikosti sektoru 512 B je maximální možná velikost logického oddílu u souborového systému FAT16, při 16b adresování clusteru, 2 GB (216 *512*64). Struktura souborového systému FAT16 je znázorněna v tabulce 4.1. MBR obsahuje informace pro výpočet adresy, velikosti ostatních oddílů. FAT Boot record je prvním sektorem logického oddílu. Alokační tabulka FAT nese informace o umístěný clusterů v oblasti dat. Souborový systém obsahuje většinou 2 tabulky FAT, kvůli záloze. Kořenový adresář obsahuje takzvané vstupy, za kterým se již nachází pouze data. Tab. 4.1: Základní struktura FAT16 Oblast MBR – Master Boot Record FAT Boot Record Alokační tabulka FAT Kořenový adresář Data
4.1
MBR – Master Boot Record
Podobně jako na pevných discích v osobním počítači, první sektor disku obsahuje tabulku oddílů, které mohou být až 4. Mimo informace o oddílech je v tomto sektoru takzvaný kód zavaděče, což je program pro spuštění operačního systému, který nás v souvislosti s mikropočítačem nemusí zajímat. Poslední dva byty MBR obsahují speciální posloupnost 0x55AA. V tabulce 4.2 je naznačeno, jak jsou data v MBR sektoru uspořádány.
- 29 -
Tab. 4.2: Popis MBR sektoru (převzato z [7] File System Format) Adresa
Délka (byte)
Popis
Hodnota/Rozsah
0x0
446 B
Kód zavaděče
--
0x1be
16 B
1. oddíl
Viz tabulka 4.3
0xce
16 B
2. oddíl
Viz tabulka 4.3
0x1d
16 B
3. oddíl
Viz tabulka 4.3
0x1ee
16 B
4. oddíl
Viz tabulka 4.3
0x1fe
1B
signatura
0x55
0x1ff
1B
signatura
0xaa
Tab. 4.3: Rozmístění a význam dat pro vstup do každého oddílu (převzato z [7] File System Format) + ofset Délka
Popis
Hodnota/rozsah
0x0
1B
Bootovací příznak
0x00 (nebootovací) 0x80 (bootovací)
0x1
3B
První sektor oddílu
Adresa prvního sektoru
0x4
1B
Popis souborového 0 = prázdný systému 1 = FAT12 <16 MB 4 = FAT16 < 32 MB 5 = rozšířený DOS 6 = FAT16 <= 32 MB 0x10 – 0xff = jiný souborový systém
0x5
3B
Poslední sektor oddílu Adresa posledního sektoru
0x8
4B
Sektory mezi MBR a Počet sektorů mezi MBR a začátkem partition začátkem oddílu (lineární adresace LBA)
0xc
4B
Počet sektorů v oddílu Mezi 1 a maximálním množství sektorů na zařízení
Z údajů ve vstupu pro každý oddíl jsou podstatné jen typ oddílu, podle kterého lze identifikovat FAT16, počet sektorů mezi MBR sektorem a boot sektorem daného oddílu a ještě délka oddílu, ale tu lze nalézt i v boot sektoru vlastního oddílu. Všechny sektory jsou uloženy v pořadí little-endian (v paměti s nejnižší adresou je uložen nejméně významný byte).
4.2
Boot Record
Boot record je prvním sektorem logického oddílu. Obsahuje specifické informace o svazku jako např. verze, počet sektorů na cluster, počet rezervovaných sektorů před první FAT, počet FAT, počet sektorů kořenového adresáře, celkový počet sektorů na disku, počet sektorů v jedné FAT, název svazku (volume label). Boot sektor je popsán v tabulce 4.4. Je umístěn na adrese udané ve vstupu oddílu v MBR. LBA adresa se dá vypočítat z tabulky 4.3 jednoduše takto: (adresa_boot) = MBR + (Počet sektorů mezi MBR a začátkem oddílu). - 30 -
Tab. 4.4: Struktura FAT16 boot sektoru (převzato z [7] File System Format) adresa Délka +offset 0x0 0x3 0xb 0xd
Popis
Hodnota
0x10 0x11
Příkaz skoku Název oddílu Velikost sektoru Počet sektorů na cluster Počet sektorů mezi FAT 16 boot rec. a 2B začátkem 1. FAT 1 B Počet alokačních tabulek FAT 2 B Počet vstupů do kořenového adresáře
0x13
2 B Počet sektorů v oddílu
0x15 0x16 0x18 0x1a 0c1c 0x20 0x24 0x2b
1B 2B 2B 2B 4B 4B 2B 11 B
0xe
3B 8B 2B 1B
Popisovač média Počet sektorů v jedné FAT Počet sektorů na stopu Počet hlav Počet skrytých sektorů ve FAT Počet všech sektorů Počet sektorů na stopu ASCII řetězec - název disku ASCII řetězec - typ souborového 0x36 8 B systému 0x3e 448 B Kód zavaděče 0x1fe 1 B Signatura 0x1ff
4.3
1 B Signatura
0xeb 0xXX 0x90 ASCI řetězec 512 B XXX (1 až 64) 1 2 512 Záleží na velikosti paměťové karty, pokud má víc jak 65535 sektorů (32 MB), toto pole je prázdné a „Počet všech sektorů“ je nastaven. u pevného disku je to F8h XXX 32 (pro SD/MMC nedůležité) 2 (pro SD/MMC nedůležité) 0 XXX (závisí na kapacitě) 0x80 XXX "FAT16" XXX 0x55 0xaa
Alokační tabulka FAT
Tato tabulka popisuje přiřazení každého clusteru v oddílu (1 záznam odpovídá 1 clusteru). Obvykle existují 2 kopie (obě jsou uloženy bezprostředně za sebou) – ta druhá je použita v momentě, kdy první se stane nečitelnou. Začátek tohoto paměťového prostoru se vypočítá podle vzorce: (adreasa_FAT)=(adresa_boot) + (Počet sektorů mezi FAT 16 boot record a začátkem 1. FAT) * (Počet sektorů na cluster) Všechny potřebné informace se zjišťují z Boot sektoru, viz tabulka 4.4. FAT tabulka znázorňuje použité a prázdné clustery. Každá položka ve FAT tabulce souborového systému FAT16 má 16 bitů a reprezentuje jeden cluster. První 2 byty jsou vyhrazené, poté již následují využitelné clustery. Význam jednotlivých hodnot je umístěn v tabulce 4.5. Hodnota 0x0000 signalizuje prázdný cluster. Hodnoty 0x0002 – 0xFFEF signalizují cluster patřící určitému souboru. Tento údaj v clusteru odkazuje na další položku, - 31 -
čili další cluster patřící ke clusteru, a tak dále, dokud se nenarazí na hodnotu položky 0xFFFF. Tato položka značí konec souboru. Hodnota 0xFFF7 značí poškozený cluster. Tab. 4.5: Možné hodnoty clusterů ve FAT16 Hodnota FAT16
Popis
0x0000
Volný cluster
0x0002 až 0xFFEF
Použitý cluster a hodnota ukazující na další cluster
0xFFF0 až 0xFFF6
Rezervováno
0xFFF8 až 0xFFFF
Použitý cluster a také poslední cluster v souboru
0x0001
Rezervovaná hodnota
0xFFF7
Špatný sektor v clusteru
4.4
Kořenový adresář
Začátek paměťového prostoru kořenového adresáře, který se nachází za poslední tabulkou FAT, se vypočítá podle vzorce: (Začátek ROOT) = (začátek 1.FAT) + (Počet sektorů v jedné FAT) * (počet FAT)*512 Všechny tyto hodnoty se opět zjistí z Boot sektoru a vypočítají jako v odstavci 4.3 . Každý soubor nebo adresář je v ROOT vytvořen jako 32 B záznam, označují se jako vstup (entry). Každý záznam obsahuje informace jako název souboru nebo adresáře, přípona, atribut přístupových práv, atribut zda se jedná o soubor nebo adresář, datum vytvoření nebo poslední změny, počáteční cluster souboru nebo adresáře, délka souboru v bytech. Dalším typem vstupu je tzv. disk volume, který nemá prakticky žádný význam a vstup dlouhého jména. Bližší popis kořenového adresáře FAT16 je v [15]. Počet vstupů v kořenovém adresáři je celkem 512, velikost oblasti kořenového adresáře je tedy 512 * 32 B = 16 kB.
4.5
Oblast dat Oblast dat se nachází hned za ROOT adresářem a adresa se vypočítá podle vztahu:
Začátek dat =začátek ROOT + (počet vstupů ROOT / 16) Oblast dat se rozděluje do clusterů, což jsou uskupení sektorů. Počet sektorů na cluster je zapsán opět v Boot sektoru (1 až 64, násobky 2). Každému clusteru patří jedna položka (2 B) v alokační FAT tabulce.
- 32 -
5 Hardwarová konstrukce programátoru Srdcem celého zařízení je mikropočítač AVR Atmega32 (IO1) běžící na frekvenci 16 MHz, který řídí veškerou komunikaci: Komunikaci s uživatelem, tj. sledování stavu tlačítek a zobrazování textů na LCD displeji. Dále komunikaci s ethernetovým rozhraním a vysíláním/přijímáním požadavků do sítě Internet. Ukládání/čtení binárních programů, stažených z FTP serveru, na SD/MMC kartu. A konečně komunikaci s cílovým programovaným mikropočítačem protokolem ISP. Schéma a plošný spoj jsou v příloze na konci práce.
5.1
Napájecí zdroj
Programátor je možno napájet stejnosměrným nestabilizovaným napětím v rozsahu 7 až 35 V. Dioda D2 slouží jako ochrana proti přepólování a LED dioda D5 jako signalizace zapnutí programátoru. Jako zdroj +5 V je použit klasický integrovaný stabilizátor 7805 (IO3) a jako zdroj 3,3 V je použit integrovaný stabilizátor LF33CV (IO4). Napájení +5V vyžaduje mikropočítač AVR a displej. Napětí 3,3 V je pro napájení SD/MMC karty a ethernetového modulu NanoSocketLAN.
5.2
Ethernetový modul NanoSocketLAN
Miniaturní modul NanoSocketLAN, od firmy ConnectOne, je určený ke snadnému připojení jakékoli aplikace do sítě 10/100BaseT Ethernet LAN. NanoSocketLAN dovoluje nasazení LAN konektivity bez složitého programování TCP/IP stacku nebo potřeby ovladače pro mikropočítač. K mikropočítači AVR lze připojit pomocí rozhraní SPI nebo UART. V tomto projektu bylo zvoleno rozhraní UART. Sofistikovaný AT+i API od Connect One eliminuje potřebu jakýchkoli LAN ovladačů, bezpečnostních nebo síťových protokolů nebo jiných úloh pro mikropočítač. Fotografie modulu je na obrázku 5.1.
Obr. 5.1: Ethernetový modul NanoSocketLAN
- 33 -
5.2.1
Podporované protokoly ● ARP, ICMP, IP, UDP, TCP, DHCP, DNS, NTP, SMTP, POP3, MIME, HTTP, FTP a TELNET client
Bezpečnostní protokoly: SSL3/TLS1, HTTPS, FTPS, RSA, AES-128/256, 3DES, RC-4, SHA-1, MD-5 ●
●
Protokoly akcelerované hardwarem: AES, 3DES a SHA
●
Počet současně otevřených socketů: 10
Jsou tedy k dispozici všechny běžně používané protokoly a služby, navíc doplněné o podporu celé řady šifrování jako je AES 128/256, 3DES a další. Pro aplikaci programátoru bude jako hlavní aplikační protokol využit FTP a protokoly nižších vrstev potřebných pro jeho fungování (TCP, IP, DHCP, ARP).
5.2.2
Schéma zapojení vývodů
Pro spojení s vnějším světem jsou na modulu osazeny dvě jednořadé 10-pinové lišty s roztečí 2 mm (J8, J9), umístěné ze spodní strany. Význam jednotlivých vývodů je uveden v tabulce 5.1 a 5.2. J9
J8
1
10
1
10
Obr. 5.2: Zapojení vývodů NanoSocketLANu (pohled zdola) Tab. 5.1: Význam vývodů konektoru J8 NanoSocketLANu [9] pin
signál
typ
Popis
1
GND
napájení Zem
2
VDD
napájení +3,3 V (+/-10 %)
3
RXD0
Vstup
UART 0 příjem
4
TXD0
Výstup
UART 0 vysílání
5
nCTS0
Vstup
UART 0 (clear to send)
6
nRTS0
Výstup
UART 0 (request to send)
7
DATA_RDY Výstup
Data připravena (Síťová data připravena ke čtení). Může být nepřipojen.
- 34 -
pin
signál
typ
Popis
8
MSEL
Vstup
Výběr módu (Záchranný režim/ aktualizace firmware/ uživatelský režim). Může být nepřipojen.
9
nRESET
Vstup
Reset modulu NanoSocketLAN
10 ACT_LINK Výstup
LED indikátor
Tab. 5.2: Význam vývodů konektoru J9 NanoSocketLANu [9] pin
signál
typ
1
nSPI1_CS
Vstup
2
nSPI1_CLK Vstup
SPI1 hodinový signál (max 12 MHz)
3
SPI1_MISO Výstup
SPI1 MISO
4
SPI1_MOSI Vstup
SPI1 MOSI
5
SPI1_INT
Výstup
SPI1 buffer plný
6
Readiness
Výstup
IChip připraven (Indikuje, že boot sekvence je kompletní. Může být nepřipojen.)
7
DDM
Analog
USB zařízení
8
DDP
Analog
USB zařízení
9
SPEED
Výstup
LED indikátor 0 = 100 Mbit/s, 1 = 10 Mbit/s
10 GND
5.2.3
Popis SPI1 CS
Napájení Zem
UART rozhraní
Komunikace modulu NanoSocketLAN s mikropočítačem AVR bude probíhat přes rozhraní UART. Z důvodu rozdílných napájecích úrovních je zde ještě řešen napěťový převodník 5/3,3 V pomocí součástek R7 až R10 a tranzistoru T1. Do programátoru byl integrován navíc převodník USB/UART řešený obvodem FT232RL (IO2) pro vlastní počáteční konfiguraci NanoSocketLANu. Zapojení vychází z doporučení výrobce [13].
5.3
LCD displej
Pro komunikaci s uživatelem je na port D mikropočítače AVR připojen dvouřádkový LCD displej se 16 znaky typu MC1602E-SYL. Displej je řízen standardním řadičem HD44780 od firmy Hitachi. Vývod D0 portu D ovládá podsvícení displeje. Podsvícení zapnuto pro D0 = 0 a vypnuto pro D0 = 1. Datová komunikace s displejem probíhá po vodičích DB7 až DB4, je to 4b komunikace a zápis probíhá nadvakrát (nejdříve horní a pak dolní polovina bytu). Komunikaci řídí linky RS (výběr přenosu dat nebo příkazu), R/W (čtení nebo zápis) a E (povolovací vstup). Podrobný popis displeje, časové průběhy zápisu příkazu/dat, obsazení vývodů a podobné věci lze najít v datasheetu nebo v [14].
- 35 -
5.4
SD/MMC karta
Paměťová karta (sloužící pro uložení binárních programů) se vkládá do MMC konektoru, který je s mikropočítačem spojen 4 vodiči sběrnicí SPI. Pomocí odporových děličů (R11 až R16) je zde řešen napěťový převodník z +5 V na 3,3 V pro signály jdoucí z mikropočítače na SD/MMC karty. Převodník pro signál MISO (jdoucí z karty do mikropočítače) není třeba implementovat, protože napěťová úroveň 3,3 V je podle specifikace TTL, u zařízení s napájením 5 V, stále vyhodnocena jako log. 1.
5.5
Obvod tlačítek
Programátor disponuje šesti jednoduchými spínacími tlačítky (S1 až S6) připojenými na vstupně/výstupní port D mikropočítače (IO1), sloužící pro uživatelskou obsluhu programátoru. Význam jednotlivých tlačítek je v tabulce 5.3. Tab. 5.3: Význam ovládacích tlačítek tlačítko
význam
S1
ESC
S2
ENTER
S3
VLEVO
S4
NAHORU
S5
VPRAVO
S6
DOLŮ
5.6
ISP a JTAG konektory
Pro počáteční oživení a ladění programátoru je zde programovací ISP konektor (SV3) zapojený podle aplikační poznámky Atmelu [4] a ladící konektor JTAG (SV4). Konektory ISP6 (SV2) a ISP10 (SV1), opět zapojené podle [4], slouží pro vlastní programování mikropočítačů v externí aplikaci. Podrobnější popis ISP protokolu je v kapitole 2.
MOSI
ISP10
ISP6
1
1
2
2
Vcc
MISO
Vcc
GND
SCK
MOSI
RST
GND
RST
GND
SCK
GND
MISO
GND
Obr. 5.3: Zapojení vývodů konektoru ISP
- 36 -
6 Softwarové řešení programátoru Zdrojové kódy projektu jsou napsány ve vývojovém prostředí AVR-Studio s integrovaným GNU překladačem jazyka C pro mikropočítače AVR, který se jmenuje avr-gcc(WinAVR) verze 4.3.3(2010-01-10). V následujících kapitolách budou stručně popsány zdrojové kódy jednotlivých programových modulů, funkce autonomního programátoru a popis hlavní smyčky programu. Softwarové řešení je v příloze na CDROM.
6.1
LCD displej
V programátoru je použit displej 2x16 znaků, jehož komunikace je řízena řadičem HD44780 jehož specifikace je v [14]. LCD funkce napsané v jazyce C pro tento typ displeje (řadiče) jsou umístěné v souboru lcd.c. Tento soubor musí být vložen pomocí #include před použitím těchto LCD funkcí. V souboru lcd.h je deklarace, který port a pin mikropočítače je připojen s displejem. LCD funkce jsou: •
void LCDsendChar(uint8_t) zobrazí znak c na aktuální pozici displeje.
•
void LCDsendCommand(uint8_t)zapisuje byte dat do LCD instrukčního registru. Tato funkce může být použita pro modifikaci konfigurace LCD.
•
void LCDinit(void) inicializuje LCD displej. Tato funkce musí být zavolána před použitím LCD funkcí.
•
void LCDstring(uint8_t* data, uint8_t nBytes) zobrazuje řetězec data o délce nBytes, umístěný v paměti RAM, na aktuální pozici LCD displeje.
•
void CopyStringtoLCD(const uint8_t *FlashLoc, uint8_t x, uint8_t y) zobrazuje řetězec FlashLoc, umístěný v FLASH, na pozici x a y LCD displeje.
6.2
Obsluha UART
UART generuje přerušení, když je přijat nebo vyslán znak. V obsluze přerušení je přijatý nebo vyslaný znak uložen do kruhového bufferu jehož velikost v bytech se definuje proměnnými UART_RX_BUFFER_SIZE a UART_TX_BUFFER_SIZE v hlavičkovém souboru uart.h. Tyto proměnné musí obsahovat hodnotu mocniny dvou, jinak překladač skončí chybou. •
void uart_init( void ) inicializuje UART, nastaví přenosovou rychlost.
•
unsigned char uart_getc( void ) přijme znak z kruhového bufferu. V případě prázdného bufferu vrátí nulu, jinak vrátí přijatý znak.
•
void uart_putc( unsigned char data ) vloží znak do kruhové bufferu pro vysílání přes UART.
•
void uart_puts(const char *s ) vloží řetězec do kruhové bufferu k vysílání přes UART.
•
void uart_puts_p(const char *progmem_s ) vloží řetězec do kruhového bufferu k vysílání přes UART.
6.3
Obsluha SD/MMC karty
Pro práci s SD/MMC byla použita knihovna [16], která zajišťuje podporu pro čtení/zápis na paměťové karty SD/MMC včetně podpory souborového systému FAT16. - 37 -
Soubory v projektu pro práci s SD/MMC kartou jsou tyto: • • • • • • • • • • • •
6.3.1
byteordering.c byteordering.h fat.c fat.h fat_config.h partition.c partition.h partition_config.h sd_raw.c sd_raw.h sd_raw_config.h sd-reader_config.h
Nízkoúrovňové funkce
Tyto funkce, uložené v souborech sd_raw.c, sd_raw.h, sd_raw_config, zajišťují surový zápis/čtení dat na/z SD/MMC kartu a její inicializaci pomocí protokolu a příkazů popsaných v kapitole 3 (Vlastnosti a popis SD/MMC karty). •
uint8_t sd_raw_init() inicializuje SD/MMC paměťovou kartu, v případě úspěchu vrátí jedničku, jinak nulu.
•
uint8_t sd_raw_read (offset_t offset, uint8_t *buffer, uintptr_t length) přečte z adresy offset surová data o délce length a uloží jej do bufferu. V případě úspěchu vrátí jedničku, jinak nulu.
•
uint8_t sd_raw_write (offset_t offset, const uint8_t *buffer, uintptr_t length) zapíše surová data z bufferu a na adresu offset o délce length. Funkce vrátí nulu v případě chyby, jinak jedničku.
•
uint8_t sd_raw_sync( ) zapíše na kartu zbytek dat z bufferu. Nutno použít před vypnutím karty. V případě chyby vrací nulu, jinak jedničku.
6.3.2
Funkce pro tabulku oddílů
Tyto funkce obsahují podporu pro čtení informací v tabulce oddílu a přístup do oddílů. Jsou uloženy v souborech partition.c, partition.h a partition_config.h. V této části budou popsány pouze funkce, použité v hlavní smyčce programu main.c a ethernet.c. •
struct partition_struct * partition_open ( device_read_t device_read, device_read_interval_t device_read_interval, device_write_t device_write, device_write_interval_t device_write_interval, int8_t index ) funkce otevře oddíl čísla index, který je v rozsahu 0 až 3 a vrátí strukturu s přečtenými informacemi o diskovém oddílu. Zbylé parametry jsou ukazatele na funkce pro zápis a čtení dat na disk.
•
struct fat_fs_struct* fat_open(struct partition_struct* partition) funkce otevře FAT souborový systém. Vstupní parametr je struktura partition, popisující oddíl, na kterém se nachází souborový systém. Funkce vrací 0 v případě chyby, jinak 1.
•
struct fat_dir_struct* dd = fat_open_dir(fs, &directory) funkce otevře adresář. Vstupní parametr fs je struktura, která popisuje souborový systém, na kterém se nachází adresář.
- 38 -
•
6.3.3 •
•
•
•
• •
•
6.4
uint8_t partition_close ( struct partition_struct * partition ) funkce smaže deskriptor oddílu, vytvořený funkcí partition_open().
Funkce pro souborový systém FAT16 intptr_t fat_read_file ( struct fat_file_struct * fd, uint8_t * buffer, uintptr_t buffer_len ) funkce čte data ze souboru popsaný strukturou fd o délce buffer_len a ukládá je do bufferu. Funkce vrací počet přečtených znaků, 0 při konci souboru nebo -1 při chybě. uint8_t fat_create_file ( struct fat_dir_struct * parent, const char * file, struct fat_dir_entry_struct * dir_entry ) funkce vytvoří soubor. Vstupní parametry jsou název souboru file struktura adresáře parent, ve kterém má být soubor vytvořen. Výstupem je výstup adresáře dir_entry, což je struktura popisující nově vytvořený soubor. intptr_t fat_write_file ( struct fat_file_struct * fd, const uint8_t * buffer, uintptr_t buffer_len ) funkce zapíše data do souboru. Vstupním parametrem je struktura fd, popisující soubor, buffer obsahující data pro zápis do souboru a délka dat buffer_len. Funkce vrátí počet zapsaných bytů a v případě chyby -1. uint8_t fat_delete_file ( struct fat_fs_struct * fs, struct fat_dir_entry_struct * dir_entry ) smaže soubor nebo adresář. Vstupem je souborový systém fs a vstup souboru nebo adresáře fat_dir_entry_struct(), který se má smazat. void fat_close_file ( struct fat_file_struct * fd ) funkce zavře soubor. Vstupem je struktura fd popisujicí soubor, který chceme zavřít. void fat_close_dir ( struct fat_dir_struct * dd ) funkce smaže deskriptor adresáře, který byl vytvořen funkcí fat_open_dir(). Vstupem je deskriptor adresáře dd, který chceme zavřít. void fat_close ( struct fat_fs_struct * fs ) funkce zavře souborový systém FAT. Vstupní parametr fs, je souborový systém, který chceme uzavřít.
ISP programování
Funkce pro ISP programování byly vytvořeny na základě aplikační poznámky [4], kterou se zabývá celá kapitola číslo 2 . Nejdůležitější příkazy pro ISP programování jsou v tabulce 2.5. Funkce jsou v projektu uloženy v souboru isp.c. Definice připojení pinů vývodů MISO, MOSI, SCK, RST a hlavičky funkcí jsou umístěny v souboru isp.h. ISP funkce jsou: •
void spiinit(void) funkce inicializuje SPI rozhraní a vyšle instrukce pro vstup do programovacího režimu.
•
void read_signature(uint8_t signature[]) vstupním parametrem funkce je ukazatel na pole, do kterého funkce uloží 3 byty signatury mikropočítače.
•
uint8_t writeisp(uint8_t s_data) funkce pošle na sběrnici SPI byte s_data.
•
uint8_t readisp(void) funkce vrací přečtený byte ze sběrnice SPI.
•
void write_program_memory(uint16_t *data, uint16_t* addr, uint8_t pgmsize) funkce zapíše slovo data do stránkovací paměti programu na adresu addr. Vstupním parametrem je ještě velikost velikost stránky FLASH pgmsize, která se na základě signatury zjistí z databáze podporovaných mikropočítačů ze souboru supported_devices.c.
•
void write_program_memory_page(uint16_t *addr) funkce zapíše stránku programu do paměti FLASH na adresu danou vstupním parametrem addr.
- 39 -
•
void chip_erase(void) funkce smaže paměť FLASH, EEPROM a zámkové bity mikropočítače.
•
void write_data_memory(uint8_t data, uint16_t *addr) funkce zapíše jeden byte data do paměti EEPROM na adresu addr.
•
uint8_t read_data_memory(uint16_t *addr) funkce vrátí byte přečtený z paměti EEPROM z adresy addr.
•
uint16_t read_program_memory(uint16_t *addr) funkce vrátí slovo přečtené z paměti FLASH z adresy addr.
•
write_lock_bits(uint8_t lock_bits) funkce zapíše zámkové bity podle tabulky 2.1.
•
int write_fuse_bits(uint8_t low_byte, uint8_t high_byte, uint8_t ext_byte, uint8_t hasExtendedFuseBits) funkce zapíše dolní byte low_byte, horní byte high_byte a v případě že je hasExtendenFuseBits nenulový, tak i rozšířený byte ext_byte propojek.
•
uint8_t read_calibration_byte(uint8_t clock) funkce přečte kalibrační konstantu vnitřního RC oscilátoru. Vstupní parametr může nybývat hodnot 0x00 pro 1 MHz, 0x01 pro 2 MHz, 0x02 pro 4 MHz a 0x03 pro 8 MHz.
•
void leave_programming_mode(void) funkce ukončí programovací režim, vývodu ISP rozhraní nastaví jako vstup a RESET nastaví do log. 1.
6.5
Hlavní smyčka programu
V této části textu bude popsána funkce main(), nacházející se v souboru main.c. Stručný vývojový diagram hlavního programu je na obrázku 6.1.
6.5.1
Definice globálních proměnných
Program nejprve deklaruje globální proměnné: Pro práci s ISP to jsou signatura, propojkové bity, velikost stránky paměti FLASH, typ mikropočítače. Další proměnné pro práci se souborem jako název souboru a velikost souboru. Dále je zde deklarován buffer lcd_data pro LCD displej a v paměti FLASH uložené LCD řetězce MNxxx použité v lcdmenu. Jejich změnou můžeme snadno autonomní programátor přepsat do jiného jazyka. Jednotlivé položky menu a podmenu jsou uloženy v polích MENU a SUBMENU obsahující ukazatele právě na tyto řetězce. Struktura Menu_State obsahuje aktuální vybranou pozici menu a podmenu. Poté je zde ještě pole FuncPtrTable obsahující ukazatele na funkce k jednotlivým položkám uživatelského menu. Fptr je ukazatel na právě zvolenou funkci.
6.5.2
Inicializace
Program před vstupem do nekonečné hlavní smyčky funkcí povolí a inicializuje přerušení pro příjem/vysílání znaku po sběrnici UART uart_init() a přerušení časovače0. Přerušení časovače0 pravidelně kontroluje, zda bylo stisknuto některé tlačítko. Poté program zinicializuje LCD displej LCDinit() a zobrazí uvítací zprávu. Posledním krokem inicializuje je uživatelské menu menu_Init(), které nastaví pozici LCD menu a podmenu ve struktuře Menu_State na jedničku (první položka), ukazatel na funkci FPtr nastaví na počátek pole ukazatelů příslušných menu funkcí, na displej zobrazí první nápis nabídky menu a podmenu a poté program přejde do nekonečné smyčky.
- 40 -
6.5.3
Nekonečná smyčka
V nekonečné smyčce program cyklicky neustále čte stavy příznaků stisku tlačítek NAHORU, DOLŮ, VLEVO, VPRAVO, ENTER a ESC. V případě stisku tlačítka VLEVO/VPRAVO lze procházet položky menu a tlačítky NAHORU/DOLŮ se prochází položky podmenu. Při změně položky (stisku tlačítka) se vypočte nová pozice menu ve struktuře Menu_State s ohledem na krajní meze menu a na LCD displej vypíše příslušný nápis odpovídající dané položce v menu a zároveň se nastaví ukazatel Fptr na příslušnou vykonávací menu funkci. Stiskem tlačítka ENTER se tato funkce provede. start
VPRAVO?
ano
Pohyb v menu vpravo
ano
Pohyb v menu vlevo
ano
Pohyb v menu nahoru
ano
Pohyb v menu dolů
Globální proměnné
inicializace
VLEVO?
NAHORU?
DOLŮ?
ENTER
Obr. 6.1: Hlavní vývojový diagram - 41 -
ano
FPtr()
6.6
Funkce položek menu
Hiearchie LCD menu s jejich řetězci a názvy příslušných funkcí je přehledně zobrazena v tabulce 4.2. Menu řetězec je na prvním řádku LCD displeje, podmenu řetězec jen druhém řádku LCD displeje. Tab. 6.1: Hiearchie LCD menu Menu (1. řádek) <
>
<>
<>
Listovat .BIN?
Zapis FLASH?
Stahnout binarky
Listovat .conf?
Zapis EEPROM?
Podmenu (2. řádek)
Zapis FUSEbits? Zapis zamek(rw)? Smazat cip?
6.6.1
Výběr binárního souboru
Funkce ProchazeniBINsouboru() zinicializuje paměťovou kartu a souborový systém FAT16, viz kapitola 6.3 . Pomocí tlačítek nahoru/dolů a voláním funkce fat_read_dir() prochází soubory na kartě a zobrazuje na displej. Název právě zobrazeného souboru se zároveň ukládá do globální proměnné name_of_fileBIN. Dokončení výběru se provede tlačítky vlevo nebo vpravo nebo enter, přičemž se korektně zavře adresář, souborový systém FAT16 a oddíl..
6.6.2
Výběr konfiguračního souboru
Funkce ProchazeniCONFsouboru(), pro procházení konfiguračních souborů, funguje stejně jako předchozí funkce ProchazeniBINsouboru(). Po dokončení výběru se ze souboru pomocí funkcí open_file_in_dir() a fat_read_file() přečtou konfigurační údaje jako typ mikropočítače a propojkové bity. Údaje se uloží do globálních proměnných high_fuse, low_fuse, ext_fuse a device_number. Formát konfiguračního souboru musí být striktně v tomto tvaru: typ_mikropocitace low_fuse_byte high_fuse_byte extended_fuse_byte@@. Je to několik dekadických číslic oddělených mezerou a ukončených znakem dvěma zavináči. Podporované typy a čísla mikropočítačů jsou v souboru supported_devices.c.
6.6.3
Zápis paměti FLASH
Funkce ZapisFLASH() inicializuje ISP programování podle kapitoly 2 , přečte signaturu a porovná ji se signaturou v souboru supported_device.c. Pokud se signatury shodují, podobným způsobem jako výše se otevře soubor, jehož název je uložený v globální proměnné name_of_fileBIN. Pomocí chip_erase() smaže mikropočítač a funkce fat_read_file() načte do wordbufferu část binárního souboru, který je pomocí funkce write_program_memory a write_program_memory_page zapisován do paměti FLASH mikropočítače tak dlouho, dokud se nenarazí na konec souboru nebo dokud nebylo stisknuto tlačítko ESC. O množství zapsaných dat je uživatel během zápisu informován procentním údajem. Po zápisu se obsah paměti FLASH pomocí funkce read_program_memory() čte a verifikuje opět s binárním souborem. O úspěchu/neúspěchu zápisu je uživatel informován patřičnou zprávou. - 42 -
6.6.4
Zápis paměti EEPROM
Funkce ZapisEEPROM() funguje podobně jako zápis FLASH. Pro zápis EEPROM se využívá ISP funkce write_data_memory() a není zde třeba řešit stránkování paměti.
6.6.5
Zápis propojkových bitů, zámků a smazání čipu
Funkce ZapisFuses() zapíše propojkové bity uložené v globálních proměnných high_fuse, low_fuse, ext_fuse. Funkce ZapisLock2() zapíše ochranu proti čtení a zápisu. Funkce SmazatCip() smaže obsah paměti programu, dat i zámkové bity. Všechny programovací funkce jsou založeny na ISP protokolu, popsán v kapitole 2, jejichž definice jsou v souboru isp.c.
6.6.6
Stáhnutí binárních souborů z FTP serveru
Poslední menu funkce FtpDownload(), která stahuje z FTP serveru soubory se kvůli své větší velikosti, nachází v souboru ethernet.c. Pro komunikaci s Internetem je použit ethernetový modul, jehož hardware je popsán v kapitole 5.2 . Ethernetový modul je s mikropočítačem Atmega propojen sběrnicí UART. Kompletní programátorská příručka a podrobný popis příkazů je v [17]. Příkazy jsou do ethernetového modulu posílány prostým zápisem na UART, podobně jako při komunikaci se standardním modemem. Funkce FtpDownload() využívá pouze tyto čtyři FTP AT+i příkazy: •
AT+i[@]FOPN:<server>[,<port>]:<user>,<pass> otevře FTP spojení s FTP serverem. Parametr server může být IP adresa nebo jmenný název serveru, port je číslo portu v rozsahu 0 až 65535 (typicky však 21), user je uživatelské jméno FTP, pass je heslo FTP uživatele, zavináč značí pasivní režim FTP přenosu. V případě úspěšného otevření FTP spojení příkaz po UART pošle řetězec I/000 jinak I/ERROR.
•
AT+iFDNL:[,<path>] příkaz vypíše seznam souborů, oddělených znakem konec řádku. Úspěšný konec výpisu souborů je oznámen řetězcem I/ONLINE. F_hn je číslo otevřeného FTP spojení (v tomto případě 0), path je cesta k adresáři, ve kterém příkaz listuje soubory.
•
AT+iFRCV:,<path> příkaz stáhne soubor z FTP serveru. Modul po sběrnici UART vrátí řetězec I/O, poté obsah souboru a po dokončení přenosu po 5 sekundách vrátí řetězec I/ONLINE nebo v případě chyby I/ERROR. F_hn je opět číslo otevřeného FTP spojení, path je název a cesta k souboru.
•
AT+iFCLS: ukončí otevřené FTP spojení. F_hn je číslo spojení.
Funkce FTPDownload() stejně jako v případě programování paměti FLASH nebo EEPROM inicializuje souborový systém FAT16 SD/MMC karty, vymaže přijímací UART buffer. Poté příkazem AT+iFOPN otevře FTP spojení. Jméno serveru, jméno uživatele a heslo je napevno uloženo v paměti programu, konfigurovatelné v souboru ethernet.h. Pokud připojení neskončilo chybou (nebyl přijat řetězec I/ERROR), funkcí fat_delete_file() se smažou všechny soubory na paměťové SD/MMC kartě a program za současného vytváření souborů funkcí fat_create_file() příkazem AT+iFDNL stahuje z FTP serveru soubory (zatím pouze prázdné). O průběhu a počtu stažených souborů je uživatel informován prostřednictvím LCD displeje. Poté je cyklicky každý soubor funkcí open_file_in_dir() otevřen a data přicházející z UARTu vyvolaná příkazem AT+iRCV do souboru funkcí fat_write_file() zapisována. O průběhu stahování, případných chybách jako nedostupnosti FTP serveru, SD/MMC karty je uživatel informován. Stahování lze přerušit tlačítkem ESC.
- 43 -
7 Příručka k použití 7.1
Počáteční konfigurace modulu NanoSocketLAN
Před prvním použitím modulů Connect One je potřeba provést jeho základní konfiguraci. Tu je v tomto případě možné provést po sériové lince UART, která je realizována v programátoru za použití USB převodníku FT232RL. Pro konfiguraci ethernetevého modulu je třeba připojit zkratovací propojku JP1, smazat nebo vyjmout mikropočítač Atmega32 z patice, aby nedocházelo ke kolizím mezi RS232/TTL převodníkem z PC a mikropočítačem. Poté je možné programátor připojit USB kabelem k PC, spustit konfigurační software iChipConfig (odkaz ke stažení aktuální verze je v [18]) uvedený na obrázku 7.1 a stisknout tlačítko Quick Configuration.
Obr. 7.1: iChipConfig - nástroj pro konfiguraci ethernetového modulu Nabídka Quick Configuration slouží skutečně pouze k základní konfiguraci modulů. V našem případě je možné v části iChip LAN parameters zadat pevnou IP adresu modulu, masku sítě, případně i internetovou bránu (pro přístupu k serveru z libovolného místa na světě). Jinak je možné pouze aktivovat získání hodnot z DHCP serveru položkou „Use DHCP“. Tím je základní konfigurace ethernetového modulu pro použití v autonomním programátoru dokončena. Nyní je pouze potřeba provést zapsání stiskem tlačítka „Save“, následně uzavřít konfigurační okno a odpojit USB kabel od PC.
- 44 -
7.2
Naprogramování samotného programátoru
Do mikropočítače Atmega32 (IO1) je nutno pro používání samotného programátoru do paměti FLASH nahrát program, nacházející se v příloze na CD-ROM. Mikropočítač je možno buď vyjmout z patice DIL40 a naprogramovat jej v externím programátoru nebo použít zabudovaný ISP programovací konektor (SV3) nebo JTAG konektor (SV4) a mikropočítač Atmega32 naprogramovat přímo v aplikaci. Propojkové bity musí být nastaveny na vnější krystalový oscilátor 16 MHz (horní byte: 0x99, dolní byte: 0xFF).
7.3
První spuštění
Programátor se napájí stejnosměrným adaptérem o hodnotě 7 až 12V. Přičemž se rozsvítí zelená LED kontrolka, na displeji se na krátkou dobu zobrazí uvítací zpráva a poté je možné tlačítky VLEVO/VPRAVO procházet jednotlivé položky menu a tlačítky NAHORU/DOLU položky podmenu. Hierarchie menu položek je v tabulce 6.1.
7.4
Stáhnutí binárních souborů
Máme-li správně nakonfigurován ethernetový modul, nakonfigurovanou správnou IP adresu, jméno, heslo FTP serveru v souboru ethernet.h, naprogramovaný programátor, připojený ethernetový kabel, můžeme v menu vybrat položku „<>“ a stiskem tlačítka ENTER zahájit stahování binárních souborů, uložených v kořenovém adresáři vzdáleného FTP serveru. Stahování lze přerušit klávesou ESC.
7.5
Programování paměti FLASH nebo EEPROM
Programátor se s cílovým mikroprocesorem AVR propojí standardním šesti nebo desetipinovým programovacím ISP kabelem. Nejprve je třeba v položce menu „<>“ zvolit podmenu „Listovat .conf?“ a po stisku tlačítka ENTER tlačítky DOLŮ/NAHORU procházet soubory a tlačítkem ENTER nebo VLEVO/VPRAVO vybrat patřičný konfigurační soubor pro programovaný mikropočítač. Bez výběru konfiguračního souboru nelze programovat paměti. Poté podobným způsobem vybereme v podmenu „Listovat .bin?“ vybere odpovídající binární soubor. Poté můžeme v položce menu „<>“ zvolit „Zapis FLASH?“ nebo „Zapis EEPROM?“ a zahájit programování tlačítkem ENTER. Zápis lze přerušit tlačítkem ESC. Přepínačem ISPpower (JP2) lze programovaný mikropočítač napájet přímo z programátoru přes rozhraní ISP.
7.6
Zápis propojkových bitů, zámků, smazání čipu
Po výběru konfiguračního souboru (stejně jako při programování FLASH nebo EEPROM), lze v menu „<>“ volbou podmenu „Zapis FUSEBits?“ zapsat propojkové bity do cílového mikropočítače. Struktura konfiguračního souboru je v kapitole 6.6.2 . Položkou „Zapis zamek(rw)?“ lze do mikropočítače zapsat ochranu proti čtení. A položkou „Smazat cip?“ lze cílový mikropočítač smazat (obsah FLASH, EEPROM, zámkové bity).
- 45 -
8 Závěr Tato diplomová práce se zabývala problematikou programování mikropočítačů AVR metodou ISP. Dále pak návrhem a realizací autonomního programátoru jednočipových mikropočítačů AVR s ethernetovou konektivitou tak, aby daný programátor byl schopný si binární soubory programů sám stahovat z Internetu (FTP server), mít je uložené na SD/MMC kartě a proces programování mikropočítačů AVR byl možný bez použití osobního počítače. Počáteční práce se zabývala teoretickým studiem a podrobným popisem programovacího algoritmu. Z úvodní studie vyplynulo, že nejjednodušší a nejpoužívanější metodou programování procesorů AVR je sériové programování přímo v systému, odborníky označovaná jako ISP. Mezi největší výhody ISP patří možnost programování cílového mikropočítače přímo v dané aplikaci. K propojení ISP programátoru a cílové aplikace stačí pouze šestivodičové metalické spojení. Práce se proto zabývala pouze touto ISP metodou. Další část práce se zabývala teoretickým studiem SD/MMC karty a souborovým systémem FAT16, potřebný pro uložení binárních souborů uvnitř programátoru. Dále výběrem vhodného ethernetového rozhraní a jeho popisem. Po nastudování výše zmíněných teoretických problematik bylo v návrhovém prostředí Eagle vytvořeno elektrické schéma zapojení autonomního programátoru AVR s ethernetovou konektivitou a obslužný a řídící software pro hlavní mikropočítač Atmega32 programátoru, napsaný v jazyku C. Deska plošného spoje, seznam použitých součástek, software pro fyzickou realizaci autonomního programátoru AVR s ethernetovou konektivitou je k dispozici v příloze této práce. Návrh programátoru byl úspěšně dokončen a fyzicky zrealizován, všechny součástky připájeny a deska plošného spoje umístěna v krabičce. Obslužný software, napsaný jazyce C pro mikropočítače AVR, byl otestován a programátor úspěšně oživen. Programátor je schopen metodou ISP programovat a verifikovat (zpětně číst) paměti FLASH, EEPROM, zámkové bity, fuse bity u více než 60 typů mikropočítačů AVR. Binární soubory pro programované typy mikropočítačů AVR jsou stahovány ze sítě z FTP serveru a ukládány na SD paměťovou kartu. Rychlost stahování dat z FTP je limitována rychlostí UARTu, výpočetními prostředky mikropočítače Atmega32 na pouhých několik desítek kb/s, což u binárních souborů o velikosti několika kB není zase příliš velký časový problém. Velikost souboru je limitována omezením souborového systému FAT16 (4GB) a maximální počet souborů v kořenovém adresáři je 512. Možnosti zdokonalení programátoru do budoucna může být realizace jednoduchého WWW serveru přímo v programátoru s využitím modulu NanoSocketLAN, kterým by bylo možno programátor ovládat, stahovat a prohlížet binární soubory přes webové rozhraní. Dalším zdokonalením softwarového vybavení lze dosáhnout: Větší rychlosti stahování binárních souborů z FTP serveru, podpora binárních souborů ve formátu IntelHEX, organizace souborů do adresářů a projektů.
- 46 -
Literatura [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
Atmega32 : 8-bit Microcontroller with 32K Bytes In-System Programmable Flash. Datasheet [online]. 2010 [cit. 2010-8-11]. Dostupný z WWW: <www.atmel.com/dyn/resources/prod_documents/doc2503.pdf> AVR061 : STK500 Communication Protocol. Application note [online]. 2003 [cit. 2010-8-11]. Dostupný z WWW: . Katalogové listy mikropočítačů AVR AVR910 : In systém programming. Application note [online]. 2010 [cit.2010-8-11]. Dostupný z WWW: . MATOUŠEK, David. Práce s mikrokontroléry ATMEL AVR. 2. vyd. Praha : BEN – technická literatura, 2006. 376 s., CD-ROM. ISBN 80-7300-2094. VERNER, Lukáš. Jednoduchý programátor jednočipových procesorů. [s.l.], 2009. 57 s. Bakalářská práce. VUT-FEKT. SanDisk Corporation: MultiMediaCard and Reduced-Sized Multimedi Card Product Manual [online]. 2010 [cit. 2010-23-11] Dostupný z WWW: MultimediaCard Users Manual [online]. 2010 [cit. 2010-23-11] Dostupný z WWW: Datasheet NanoSocketLAN2010 [online]. 2010 [cit. 2010-23-11]. Dostupný z WWW: Product Breaf NanoSocketLAN [online] 2010. [cit. 2010-23-11]. Dostupný z WWW: PLÍVA, Zdeněk. EAGLE prakticky - řešení problémů při běžné práci. 1. vyd. Praha : BEN - technická literatura, 2007. 184 s. ISBN 978-80-7300-227-5. JURÁNEK, Antonín, HRABOVSKÝ, Miroslav. EAGLE - uživatelská a referneční příručka : návrhový systém systém pro plošné spoje pro začátečníky. 2. vyd. Praha : BEN - technická literatura, 2007. 192 s. ISBN 80-7300-213-2. FT232RL : jednočipový převodník USB <> UART. Datasheet [online]. 2010 [cit.2010-24-11].Dostupný z WWW: MATOUŠEK, David. Práce s inteligentními displeji LCD, 1. díl. Praha : BEN – technická literatura, 2006. 224 s., CD-ROM. ISBN 80-7300-121-7. FAT16 File system specification [online]. 2010 [cit. 2011-3-2]. Dostupný z WWW: SD-reader: MMC/SD/SDHC card library [online]. 2010 [cit. 2011-21-4]. Dostupný z WWW: AT+i Programmer's manual [online] 2010. [cit. 2011-22-4]. Dostupný z WWW: Miniaturní Ethernet moduly Nano LANReach™ a Nano SocketLAN™ [online]. 2010 [cit. 2011-19-5] Dostupný z WWW:
- 47 -
Seznam použitých zkratek Zkratka
Anglický význam
Český význam
AVR
Alf Vegard RISC
Alf Vegard RISC
EEPROM
Electronically Erasable Programmable Read-Only-Memory
Elektricky mazatelná programovatelná paměť typu ROM-RAM
ISP
In system Programming
Programování v systému
SPI
Serial Peripheral Interface
Sériové periferní rozhraní
LCD
Liquid Crystal display
Displej z tekutých krystalů
LED
Light Emitting Diode
Světlo zářící dioda
MCU
Micro Controller Unit
mikrokontrolér
PC
Personal Computer
Osobní počítač
RAM
Random Access Memory
Paměť s přístupem
USB
Universal seriál Bus
Univerzální sériová sběrnice
MBR
Master Boot Record
Hlavní spouštěcí záznam
FAT
File Allocation Table
Alokační tabulka souborů
TCP
Transmission Control Protocol
Přenosový řídící protokol
IP
Internet Protocol
Internetový protokol
FTP
File Transfer Protokol
Protokol pro přenos souborů
UART
Universal asynchronous receiver/transmitter
Univerzální asynchronní přijímač/vysílač
- 48 -
a
libovolným
Seznam příloh V následujících přílohách jsou uvedena schéma zapojení, desky plošných spojů, rozpiska použitých součástek, fotografie přístroje a obslužný software je na CDROM. A. Elektrické schéma zapojení 1. První část 2. Druhá část B. Deska plošných spojů C. Osazovací plánek 1. Horní strana 2. Spodní strana D. Rozpiska použitých součástek E. Fotografie přístroje F. CDROM 1. Elektronický text diplomové práce ve formátu pdf 2. Návrh konstrukce v elektronickém formátu Eagle 3. Zdrojový a binární kód obslužného programu 4. Fotografie přístroje
- 49 -
Příloha A: Elektrické schéma zapojení A.1 První část ze dvou
Obr. 12.1: Schéma zapojení 1. z 2 - 50 -
Příloha A: Elektrické schéma zapojení A.2 Druhá část ze dvou
Obr. 12.2: Schéma zapojení 2. z 2 - 51 -
Příloha B: Deska plošného spoje
Obr. 12.3: Deska plošného spoje
- 52 -
Příloha C: Osazovací plánek C.1 Horní strana
Obr. 12.4: Osazovací plánek ze strany součástek
- 53 -
C.2 Dolní strana
Obr. 12.5: Osazovací plánek ze strany spojů
- 54 -
Příloha D: Rozpiska použitých součástek Tab. 12.1: Rozpiska použitých součástek Rezistory Označení ve schématu
Hodnota [Ω]
pouzdro
Typ (z katalogu GM )
R1
1k5
0204
Metalizované rezistory do 0.5 W
R4
10
0204
Metalizované rezistory do 0.5 W
R5
330
0204
Metalizované rezistory do 0.5 W
R9
8k2
0204
Metalizované rezistory do 0.5 W
R11, R12, R13
1k8
SMD 1206
R1206, odpor SMD 0,25W 1% vel.1206
R14, R15, R16
3k3
SMD 1206
R1206, odpor SMD 0,25W 1% vel.1206
R3, R7, R8, R10 10k
0204
Metalizované rezistory do 0.5 W
R2, R17, R18, R19, R20, R21, R22
10k
SMD 1206
R1206, odpor SMD 0,25W 1% vel.1206
R23, R24, R25, R26, R27, R28
150
SMD 1206
R1206, odpor SMD 0,25W 1% vel.1206
Kondenzátory Označení ve schématu C1, C16
Hodnota [F] 100u
pouzdro
Typ (z katalogu GM )
-
E100M/50V2, elyt radiální 5x11mm RM2
C2,C3,C8,C9,C1 100n 3,C18
SMD 1206
CK1206, keramický kondenz.SMD 1206 50V
C4, C7, C17, C19
100n
B1
keramický kondenzátor RM=5mm
C11, C12, C14, C15
27p
SMD 1206
CK1206, keramický kondenz.SMD 1206 50V
C5, C6, C10
1u
-
E1M/25V2,elyt radiální 5x11mm RM2
Diody Označení ve schématu
typ
pouzdro
Typ (z katalogu GM )
D1
1N4148
MICROMELF
Univerzální dioda 75V 150mA MCL4148
D2
1N4007
DO-41
Usměrňovací dioda 1000V 1A
D3
Zelená LED
-
led 3mm 2mA 6.5mcd zelená dif.
Integrované obvody Označení ve schématu IO1
typ MEGA32
pouzdro DIL40
Typ (z katalogu GM ) ATmega32-16PU
- 55 -
IO2
FT232RL
SSOP28
jednočipový převodník USB <-> RS232
IO3
7805
TO220
plast. stab. +5V 1A
IO4
LF33CV
TO220
LowDrop stab. 3,3V 1A
Tranzistory Označení ve schématu
typ
pouzdro
Typ (z katalogu GM )
T1
BS170
TO92
N-VMOS 60V 0.3A 0.83W
T2
BC558B
TO92
Bipolární PNP tranzistor - Ic = 0,1 A
Konektory Označení ve schématu
typ
pouzdro -
Typ (z katalogu GM )
SV1, SV3, SV4
Konektorová lámací lišta 2x5 do DPS
S2G20
SV2
Konektorová lámací lišta 2x3 do DPS
K1
USB konektor
K2
Napájecí konektor
K3
-
-
-
JP1, JP2
Lišta 2x1 do DPS
-
S1G20
Označení ve schématu
typ
pouzdro
Typ (z katalogu GM )
LCD1
2x16 znaků
-
MC1602-E-SYL
Označení ve schématu
typ
pouzdro
Typ (z katalogu GM )
X1
16MHz
HC49US
QM 16.000MHZ, Krystal mini HC49US 50ppm 10/+60°C
typ
pouzdro
Typ (z katalogu GM )
BLM31PG500SN1L
SMD 1206
Ferrite bead
S2G20 -
USB1X90B PCB, USB zásuvka B do DPS, 90st. K375A, nap.vidl.2.1mm do PLS 90°
Displeje
Rezonátory
Indukčnosti Označení ve schématu L1
Přepínače, tlačítka Označení ve schématu
typ
pouzdro
Typ (z katalogu GM )
S1, S2, S3, S4, S5, S6
P-DT6RT
-
Tlačítko kulaté, červené, 35VDC/10mA, životnost 100 000cyklů, síla 250+/-50gf.
- 56 -
Příloha E: Fotografie přístroje
Obr. 12.6: Fotografie přístroje
- 57 -