ˇ ´ vysok´ ˇen´ı technick´ Cesk e e uc e v Praze ´ Fakulta elektrotechnicka
´ PRACE ´ DIPLOMOVA Z´ aznamn´ık dat pro RS-232
Praha, 2009
Autor: Martin Nov´ ak
Prohl´ aˇsen´ı
i
Podˇ ekov´ an´ı Zde bych r´ad podˇekoval vedouc´ımu sv´e diplomov´e pr´ace Ing. Liborovi Waszniowsk´emu, Ph.D. za cenn´e rady a podnˇety, Ing. Martinovi Kimrovi z firmy Kodys, s. r. o. za vstˇr´ıcnost a sv´emu kamar´adovi Ing. Janu Smrˇzovi za neocenitelnou podporu bˇehem cel´eho studia.
ii
Abstrakt Tato pr´ace popisuje kompletn´ı n´avrh embedded zaˇr´ızen´ı pro z´aznam komunikace dvou prvk˚ u sbˇernice RS-232. Autorem zad´an´ı je firma p˚ usob´ıc´ı v oblasti syst´em˚ u s vyuˇzit´ım ˇc´arov´ych k´od˚ u, jej´ıˇz motivac´ı je detekce chyb v komunikaci pˇri v´yvoji prvk˚ u syst´emu. Tento z´aznamn´ık dat ukl´ad´a komunikaci na pamˇet’ovou kartu Secure Digital, doplˇ nuje z´aznam o ˇcasov´e znaˇcky a obsahuje tak´e uˇzivatelsk´e rozhran´ı v podobˇe displeje a tlaˇc´ıtek. Pr´ace se zab´yv´a v´ybˇerem mikrokontrol´eru, volbou vhodn´ych v´yvojov´ych prostˇredk˚ u a n´avrhem hardware a software. Tˇeˇziˇstˇem pr´ace je oˇziven´ı mikrokontrol´eru Atmel AT91SAM7S256 s j´adrem ARM a v´yvojov´ych n´astroj˚ u GNU ARM a OpenOCD. Software je postaven na vlastn´ı koncepci s vyuˇzit´ım knihoven Newlib a EFSL.
iii
Abstract This thesis describes the development of a comprehensive embedded device for recording communication between two RS-232 bus elements. The assignment was set by a company engaged in the field of bar codes systems which also seeks means of error detection in communication during system elements development. This datalogger stores communication on a Secure Digital memory card and adds time stamps to the log and contains a user interface as well. The user interface provided for by means of a display and buttons. This paper deals with the selection of the micro-controller as well as suitable development tools and the design of software and hardware. The main focus of the thesis is bringing the Atmel AT91SAM7S256 micro-controller with ARM core into life in liaison with the GNU ARM and OpenOCD development tools. The software is based on the author’s own conception using the Newlib and EFSL libraries.
iv
v
vi
Obsah Seznam obr´ azk˚ u
xi
Seznam pouˇ zit´ ych zkratek
xiii
´ 1 Uvod
1
1.1
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Pouˇzit´e technologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Pr´ace a v´ysledky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3.1
N´avrh architektury . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3.2
N´avrh hardwaru
. . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3.3
Implementace softwaru . . . . . . . . . . . . . . . . . . . . . . . .
3
2 Specifikace poˇ zadavk˚ u na zaˇ r´ızen´ı
5
3 Architektura zaˇ r´ızen´ı
7
3.1
3.2
3.3
Hardwarov´a ˇc´ast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.1.1
Volba mikrokontrol´eru . . . . . . . . . . . . . . . . . . . . . . . .
7
3.1.2
Komunikaˇcn´ı sbˇernice, periferie . . . . . . . . . . . . . . . . . . .
9
3.1.3
Architektonick´e sch´ema zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . .
11
Softwarov´a architektura . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.2.1
Bare-metal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.2.2
Logika aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
Toolchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R R Suite . . . . . . . . . . . . . . . . . . . . . . RealView 3.3.1 ARM
13 13
3.3.2
13
IAR Embedded Workbench . . . . . . . . . . . . . . . . . . . . . TM
3.3.3
Keil
Development Tools . . . . . . . . . . . . . . . . . . . . . .
13
3.3.4
GNU ARM Toolchain . . . . . . . . . . . . . . . . . . . . . . . .
14
vii
4 Pouˇ zit´ e technologie 4.1
15
GNU ARM Toolchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
4.1.1
ELF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.1.2
GNU linker, linker script . . . . . . . . . . . . . . . . . . . . . . .
17
4.1.3
Zpracov´an´ı zdrojov´ych soubor˚ u pomoc´ı GNU ARM . . . . . . . .
19
Newlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
4.2.1
libc.a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
4.2.2
libm.a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
GNU debugger, JTAG a OpenOCD . . . . . . . . . . . . . . . . . . . . .
21
4.3.1
GNU debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
4.3.2
JTAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
4.3.3
OpenOCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
4.4
YAGARTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4.5
EFSL
24
4.2
4.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Hardware 5.1
5.2
Mikrokontrol´er AT91SAM7S256 . . . . . . . . . . . . . . . . . . . . . . .
27
5.1.1
ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.1.2
ARM7TDMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
5.1.3
Vlastnosti AT91SAM7S256
. . . . . . . . . . . . . . . . . . . . .
30
PCF8563 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
I2 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
N´avrh hardwaru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
5.3.1
RS-232 periferie . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
5.3.2
JTAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
5.3.3
V´yvojov´e a testovac´ı piny . . . . . . . . . . . . . . . . . . . . . .
36
5.3.4
LCD ˇradiˇc a konektor
. . . . . . . . . . . . . . . . . . . . . . . .
36
5.3.5
Ovl´adac´ı tlaˇc´ıtka . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
5.3.6
Spotˇreba zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
5.3.7
Nap´ajen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
5.3.8
RTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
5.3.9
Velikost chlad´ıc´ı plochy LDO . . . . . . . . . . . . . . . . . . . .
39
5.2.1 5.3
27
6 Software 6.1
41
Architektura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
41
6.2
Startup k´od . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
6.2.1
Low level init . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.2.2
Memory remap . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.2.3
Prim´arn´ı a sekund´arn´ı tabulka vektor˚ u pˇreruˇsen´ı . . . . . . . . .
43
6.2.4
Nastaven´ı z´asobn´ık˚ u a RAM sekc´ı . . . . . . . . . . . . . . . . . .
43
6.2.5
Model pˇreruˇsen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
6.2.6
Inicializace specifick´a dan´e aplikaci . . . . . . . . . . . . . . . . .
45
6.3
Hardware Abstraction Layer . . . . . . . . . . . . . . . . . . . . . . . . .
45
6.4
Ovladaˇce extern´ıch periferi´ı . . . . . . . . . . . . . . . . . . . . . . . . .
46
6.4.1
LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
6.4.2
RTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
6.4.3
Secure Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
Ostatn´ı utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
6.5.1
Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
6.5.2
Textbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
6.5.3
Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
6.5.4
Cyklick´y buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
Hlavn´ı aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
6.6.1
Softwarov´e aspekty ˇreˇsen´ı probl´emu . . . . . . . . . . . . . . . . .
50
6.6.2
Stavov´y diagram . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
6.6.3
Tok dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
6.6.4
Popis v´ysledn´eho z´aznamu . . . . . . . . . . . . . . . . . . . . . .
52
6.5
6.6
7 Testov´ an´ı 7.1 7.2
53
Zkouˇsky v zadavatelsk´e firmˇe . . . . . . . . . . . . . . . . . . . . . . . . ˇ sen´ı probl´em˚ 7.1.1 Reˇ u . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Z´avˇereˇcn´e testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
53
8 Z´ avˇ er
57
Literatura
61
A Obvodov´ e sch´ ema zaˇ r´ızen´ı
I
B Obsah pˇ riloˇ zen´ eho CD
V
ix
x
Seznam obr´ azk˚ u 1.1
V´ysledn´y prototyp z´aznamn´ıku. . . . . . . . . . . . . . . . . . . . . . . .
3
3.1
Architektonick´e sch´ema zaˇr´ızen´ı. . . . . . . . . . . . . . . . . . . . . . . .
11
3.2
Sch´ema architektury softwaru. . . . . . . . . . . . . . . . . . . . . . . . .
12
4.1
ELF layout (zdroj: [38]). . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.2
Zpracov´an´ı zdrojov´ych soubor˚ u pomoc´ı GNU ARM. . . . . . . . . . . . .
19
4.3
OpenOCD pracovn´ı m´od remote. . . . . . . . . . . . . . . . . . . . . . .
22
4.4
OpenOCD pracovn´ı m´od local script. . . . . . . . . . . . . . . . . . . . .
23
4.5
Pracovn´ı diagram GNU ARM toolchainu v distribuci YAGARTO. . . . .
24
4.6
Vnitˇrn´ı hierarchie knihovny EFSL. . . . . . . . . . . . . . . . . . . . . .
25
5.1
Blokov´e schema mikrokontrol´eru ˇrady AT91SAM7S64-512, pˇrevzato z [8].
32
5.2
DMA pˇr´ıstup pro periferie. . . . . . . . . . . . . . . . . . . . . . . . . . .
33
2
5.3
Komunikaˇcn´ı schema na sbˇernici I C, pˇrevzato z [21]. . . . . . . . . . . .
34
5.4
Z´avislost tepeln´e rezistence na velikosti chlad´ıc´ı plochy LDO. . . . . . . .
39
6.1
Startup sekvence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.2
Rozm´ıstˇen´ı ˇc´ast´ı k´odu v ROM a RAM. . . . . . . . . . . . . . . . . . . .
43
6.3
45
6.4
Proces obsluhy pˇreruˇsen´ı vyuˇz´ıvaj´ıc´ı obalov´e“funkce. . . . . . . . . . . . ” Pracovn´ı schema cyklick´eho bufferu. . . . . . . . . . . . . . . . . . . . . .
49
6.5
Stavov´y diagram aplikace. . . . . . . . . . . . . . . . . . . . . . . . . . .
51
6.6
Tok d˚ uleˇzit´ych dat v r´amci aplikace a cel´eho zaˇr´ızen´ı. . . . . . . . . . . .
52
7.1
Moˇzn´a u ´ prava zapojen´ı z´aznamn´ıku do s´ıtˇe. . . . . . . . . . . . . . . . .
54
xi
xii
Seznam pouˇ zit´ ych zkratek ALU
Arithmetical Logical Unit
API
Application Programming Interface
ARM
Advanced RISC Machines
CISC
Complex Instruction Set Computer
DMA
Direct Memory Access
DSP
Deska Ploˇsn´ych Spoj˚ u
EFSL
Embedded FileSystems Library
ELF
Executable and Linking Format
FIQ
Fast Interrupt reQuest
GCC
GNU Compiler Collection
GDB
GNU DeBugger
GNU
GNU’s Not Unix
HAL
Hardware Abstraction Layer
2
IC
Inter-Integrated Circuit
IDE
Integrated Development Enviroment
IRQ
Interrupt ReQuest
JTAG
Join Test Action Group
LDO
Low DropOut regulator
LMA
Load Memory Adress
OpenOCD
Open On-Chip Debugger
RISC
Reduced Instruction Set Computer
RTC
Real-Time Clock
SD
Secure Digital
SPI
Serial Peripheral Interface
UART
Universal Asynchronous Receiver Transmiter
VMA
Virtual Memory Adress
xiii
xiv
Kapitola 1 ´ Uvod 1.1
Motivace
Pr´ace popisuje v´yvoj zaˇr´ızen´ı, jehoˇz specifikace vych´az´ı z poˇzadavk˚ u firmy Kodys, s. r. o. Tato firma se zab´yv´a v´yvojem identifikaˇcn´ıch syst´em˚ u, kter´e vyuˇz´ıvaj´ı ˇc´arov´e k´ody a s´eriov´y komunikaˇcn´ı standard RS-232. Pˇri v´yvoji prvk˚ u takov´eho syst´emu hraje v´yznamnou roli detekce chyb v jejich komunikaci. Vznikla tedy potˇreba zaˇr´ızen´ı, kter´e bude monitorovat veˇskerou komunikaci mezi dvˇema uzly s´ıtˇe, umoˇzn´ı jej´ı rekonstrukci a t´ım identifikaci chyby i jej´ıho p˚ uvodce. Pro vlastn´ı vyuˇzit´ı takov´eho zaˇr´ızen´ı v praxi jsou d˚ uleˇzit´ymi vlastnostmi: spolehlivost, snadnost ovl´ad´an´ı, jednoduch´y form´at z´aznamu a v neposledn´ı ˇradˇe tak´e mal´e rozmˇery. Tyto poˇzadavky vedou na embedded zaˇr´ızen´ı, kter´e nazveme z´ aznamn´ık dat pro RS-232 (datalogger). Tento z´aznamn´ık ukl´ad´a obsah komunikace do textov´eho souboru na pamˇet’ovou kartu SD (Secure Digital) v bˇeˇznˇe ˇciteln´em form´atu. Pro pˇrehledn´e a rychl´e nastavov´an´ı parametr˚ u disponuje zaˇr´ızen´ı uˇzivatelsk´ym rozhran´ım v podobˇe displeje a tlaˇc´ıtek. Zaˇr´ızen´ı je nap´ajeno z extern´ıho zdroje nebo z baterie. Z´aznam je doplˇ nov´an o identifik´atory smˇeru komunikace, aby byla moˇzn´a jej´ı u ´ pln´a rekonstrukce. Souˇc´ast´ı z´aznamn´ıku je tak´e obvod re´aln´eho ˇcasu, aby mohl z´aznam obsahovat ˇcasov´e znaˇcky. 1
´ KAPITOLA 1. UVOD
2
1.2
Pouˇ zit´ e technologie
Z´akladem zaˇr´ızen´ı je jednoˇcipov´y mikrokontrol´er Atmel AT91SAM7S256 s j´adrem ARM. Tento integrovan´y obvod jiˇz obsahuje mnoˇzstv´ı periferi´ı usnadˇ nuj´ıc´ıch v´yvoj embedded 2 syst´em˚ u, z nichˇz vyuˇzijeme periferie UART, SPI a I C. Pamˇet’ov´a karta SD je k mikrokontrol´eru pˇripojena pˇres SPI rozhran´ı a obvod re´aln´eho ˇcasu komunikuje pˇres sbˇernici I2 C. Hlavn´ım softwarov´ym n´astrojem je v t´eto u ´ loze programovac´ı jazyk C s v´yvojov´ymi n´astroji GNU ARM v distribuci YAGARTO. K In-System programov´an´ı a debuggov´an´ı je pouˇzit OpenOCD a GDB s integrac´ı do Eclipse IDE. V´yhodou vˇsech tˇechto n´astroj˚ u je voln´a licence a kvalita do jist´e m´ıry srovnateln´a s komerˇcn´ımi alternativami. Pouˇzit´e technologie jsou pops´any v kapitole 4.
1.3
Pr´ ace a v´ ysledky
1.3.1
N´ avrh architektury
N´avrh architektury se t´yk´a pˇredevˇs´ım volby mikrokontrol´eru s ohledem na poˇzadavky u ´ lohy. Mezi hlavn´ı krit´eria patˇr´ı: vhodn´e periferie, dostatek pamˇeti, postaˇcuj´ıc´ı v´ykon, dostupnost v´yvojov´ych prostˇredk˚ u, apod. Zvolen´y obvod AT91SAM7S256 je postaven na 32-bitov´em j´adru ARM, kter´e je dnes t´emˇeˇr nejrozˇs´ıˇrenˇejˇs´ı v embedded aplikac´ıch. Jeho pˇrednost´ı je napˇr´ıklad RISC architektura s kvalitn´ı instrukˇcn´ı sadou, velk´a rozˇs´ıˇrenost tedy i dostupnost hardwaru i v´yvojov´ych n´astroj˚ u a n´ızk´a spotˇreba. Dalˇs´ı v´yhodou tohoto mikrokontrol´eru je perifern´ı DMA (Direct Memory Access) kan´al, kter´y byl s v´yhodou pouˇzit v t´eto aplikaci.
1.3.2
N´ avrh hardwaru
Pro potˇreby u ´ lohy byl vyvinut a kompletnˇe oˇziven vlastn´ı prototyp hardwaru. S pouˇzit´ım n´astroj˚ u OrCAD bylo vytvoˇreno obvodov´e sch´ema a rozvrˇzen´ı DSP. V´ysledkem je plnˇe funkˇcn´ı prototyp fin´aln´ıho produktu, jehoˇz fotografie je na obr´azku 1.1.
´ ´ 1.3. PRACE A VYSLEDKY
3
Obr´azek 1.1: V´ ysledn´ y prototyp z´aznamn´ıku.
1.3.3
Implementace softwaru
Software je zaloˇzen na vlastn´ı modul´arn´ı bare-metal koncepci (tedy bez vyuˇzit´ı operaˇcn´ıho syst´emu), jehoˇz nˇekter´e ˇc´asti jsou plnˇe pˇrenositeln´e na jin´e platformy. Program je rozdˇelen do nˇekolika vrstev a ˇc´ast´ı. Z´akladem je tzv. startup k´od, kter´y nastavuje z´akladn´ı funkˇcn´ı parametry, definuje model pˇreruˇsen´ı a pˇripravuje mikroprocesor na skok do hlavn´ı programov´e smyˇcky. V hlavn´ım programu se uplatˇ nuj´ı ovladaˇce periferi´ı obsaˇzen´ych na ˇcipu, na jejichˇz b´azi jsou vytvoˇreny drivery okoln´ıch periferi´ı, RTC, SD a LCD displeje. Ovladaˇce i vˇsechny prvky hlavn´ı aplikace jsou postaveny na vlastn´ı hardwarov´e abstrakci. Nad ovladaˇcem grafick´eho LCD displeje byl implementov´an n´astroj pro pˇrehledn´e a pohodln´e vytv´aˇren´ı uˇzivatelsk´eho rozhran´ı vˇcetnˇe kask´adov´eho menu. Uˇzivatelsk´e rozhran´ı tak dovoluje nastavit funkci zaˇr´ızen´ı, napˇr. parametry RS-232 sbˇernice, datum a ˇcas, apod. Pro pr´aci se souborov´ym syst´emem FAT na pamˇet’ov´em m´ediu byla pouˇzita opensourceknihovna EFSL (Embedded Filesystem Library), ˇc´asteˇcnˇe rozˇs´ıˇrena o potˇrebn´e funkce. Kvalitn´ım zdrojem standardn´ıch C funkc´ı byla open-source knihovna Newlib pro embedded aplikace.
4
´ KAPITOLA 1. UVOD
Kapitola 2 Specifikace poˇ zadavk˚ u na zaˇ r´ızen´ı Poˇzadavky na zaˇr´ızen´ı se odv´ıjej´ı z bˇeˇzn´e praxe v´ yvoj´aˇr˚ u firmy Kodys, s. r. o., se s´ıdlem v Praze. Zaˇr´ızen´ı mus´ı m´ıt tyto vlastnosti: • dva porty RS-232, • pˇrepos´ıl´an´ı veˇsker´e komunikace z jednoho portu na druh´y pˇri minim´aln´ım ovlivˇ nov´an´ı zbytku s´ıtˇe (tj. s minim´aln´ım zpoˇzdˇen´ım), • schopnost zaznamen´av´at tok dat v obou smˇerech, resp. pˇrich´azej´ıc´ı z obou tˇechto port˚ u, • ukl´ad´an´ı veˇsker´e komunikace na pamˇet’ovou kartu typu Secure Digital ve form´atu ˇciteln´em v bˇeˇzn´ych ˇcteˇck´ach, • schopnost rozliˇsit, ze kter´eho portu dan´a data pˇrich´azej´ı, • moˇznost doplˇ novat z´aznam o ˇcasov´e znaˇcky s mˇenitelnou periodou, • obsahovat uˇzivatelsk´e rozhran´ı v podobˇe displeje a jednoduch´e kl´avesnice pro nastaven´ı d˚ uleˇzit´ych parametr˚ u, • form´atovat z´aznam do textov´eho souboru, tedy pˇr´ımo ˇciteln´eho uˇzivatelem. Poˇzadovan´e moˇznosti nastaven´ı: • parametry linky RS-232 – baud rate, datov´e bity, stop bity, parita, • pˇresn´y ˇcas (datum), • perioda ˇcasov´ych znaˇcek v ˇr´adu sekund, 5
6
ˇ ˚ NA ZAR ˇ ´IZEN´I KAPITOLA 2. SPECIFIKACE POZADAVK U • doplˇ nov´an´ı z´aznamu o identifik´ator portu / surov´a data, • vymaz´an´ı obsahu pamˇet’ov´e karty.
Kapitola 3 Architektura zaˇ r´ızen´ı V´yˇse zm´ınˇenou funkˇcnost by nejsp´ıˇse bylo moˇzn´e zajistit napˇr´ıklad pˇrenosn´ym poˇc´ıtaˇcem s extern´ımi s´eriov´ymi porty (napˇr. do USB) a softwarem zajiˇst’uj´ıc´ım danou funkci. ˇ sen´ı je to ale pomˇernˇe neˇsikovn´e. Proti hovoˇr´ı rozmˇery, pˇr´ıliˇsn´a robustnost, spolehReˇ livost z´avisl´a na stavu a kvalitˇe operaˇcn´ıho syst´emu a pˇri vˇetˇs´ım poˇctu kus˚ u samozˇrejmˇe i cenov´e n´aroky. Elegantnˇejˇs´ı ˇreˇsen´ı, navrhovan´e i zadavatelem, je embedded zaˇr´ızen´ı, kde je hlavn´ım ˇcl´ankem vhodn´y jednoˇcipov´y mikrokontrol´er.
3.1 3.1.1
Hardwarov´ aˇ c´ ast Volba mikrokontrol´ eru
Krit´eria volby mikrokontrol´eru vych´az´ı z poˇzadavk˚ uu ´ lohy. D˚ uleˇzit´ymi vlastnostmi jsou: • vhodn´e periferie, dostatek pamˇeti, • postaˇcuj´ıc´ı v´ykon, rozumn´a spotˇreba, • dostupnost a cena, • dostupnost v´yvojov´ych n´astroj˚ u a knihoven, • pˇr´ıpadn´a rozˇsiˇritelnost. ˇ sen´ı zadan´eho probl´emu stoj´ı na pomez´ı 8-bitov´ych a 32-bitov´ych aplikac´ı. Potˇrebn´e Reˇ periferie jsou v z´asadˇe bytovˇe orientovan´e, coˇz vede na 8-bitovou architekturu, nicm´enˇe 7
ˇ ´IZEN´I KAPITOLA 3. ARCHITEKTURA ZAR
8
dobr´y v´ykon, propustnost a dostateˇcn´y pamˇet’ov´y prostor najdeme sp´ıˇse u 32-bitov´ych mikrokontrol´er˚ u. 32-bitov´e mikrokontrol´ery se d´ıky klesaj´ıc´ım cen´am integrovan´ych obvod˚ u dost´avaj´ı na pole 8-bitov´ych aplikac´ı. Pˇrednost´ı 32-bitov´e architektury je pˇredevˇs´ım vˇetˇs´ı propustnost a v´ykon pˇri niˇzˇs´ıch pracovn´ıch frekvenc´ıch d´ıky zpracov´an´ı vˇetˇs´ıho poˇctu dat v jedn´e instrukci. Podle ˇcl´anku Pavla P´ıˇsy o modern´ıch mikrokontrol´erech [25] je nedostatkem dneˇsn´ıch 32-bitov´ych procesor˚ u (v n´avaznosti na RISC architekturu) pomˇernˇe mal´a hustota k´odu, tedy velk´e pamˇet’ov´e n´aroky (pouzdra ˇcasto obsahuj´ı vˇetˇs´ı pamˇeti). Tyto nedostatky ˇc´asteˇcnˇe ˇreˇs´ı instrukˇcn´ı sady s kratˇs´ı nebo promˇennou d´elkou, napˇr. u Freescale ColdFire nebo ARM-Thumb jader. Nejrozˇs´ıˇrenˇejˇs´ımi ve 32-bitov´ych embedded aplikac´ıch jsou mikrokontrol´ery s procesorov´ym j´adrem ARM (zdroj: [2]). ARM je rodina procesor˚ u, kter´e si z´ıskaly oblibu d´ıky n´ızk´e spotˇrebˇe i pˇri vysok´em v´ykonu (j´ıˇz dos´ahly pˇredevˇs´ım absenc´ı mikrok´odu), RISCovou architekturou a snahou udrˇzet si co nejjednoduˇsˇs´ı design, tedy menˇs´ı poˇcet tranzistor˚ u. Nab´ız´ı tak´e velmi dobr´y power management a pˇrehlednou ochranu d˚ uleˇzit´ych registr˚ u d´ıky r˚ uzn´ym pracovn´ım reˇzim˚ um, coˇz je dobˇre pops´ano napˇr. v knize Steva Furbera [36]. Nej´ uspˇeˇsnˇejˇs´ı tˇr´ıdou ARM jader je ARM7TDMI (kapitola 5.1.2). Jedn´a se sice o lowendov´e j´adro, ale velmi dobˇre vybaven´e. Nab´ız´ı mj. tˇr´ı´ urovˇ nov´y pipeline, dvˇe instrukˇcn´ı sady (32 a 16-bitovou), moˇznost hardwarov´eho real-time debuggov´an´ı nebo hardwarov´e breakpointy a watchpointy. Jeho spotˇreba se pˇri 18 µm technologii pohybuje okolo 0.21 mW/MHz a pracovn´ı frekvence dosahuje aˇz 115 MHz [5]. V t´eto tˇr´ıdˇe najdeme i mikrokontrol´ery s pokroˇcil´ymi periferiemi, jako jsou USB, CAN nebo Ethernet. L´ıdry (zejm´ena ve v´ybˇeru obvod˚ u a dostupnosti) jsou zde rodiny obvod˚ u Philips LPC a konkurenˇcn´ı Atmel SAM7. Oba konkurenti jsou srovnateln´e v dostupnosti v´yvojov´ych prostˇredk˚ u. V´yhodou obvod˚ u LPC m˚ uˇze b´yt napˇr. lepˇs´ı podpora pro CAN sbˇernici, nebo rychlejˇs´ı flash pamˇet’ bez stav˚ u ˇcek´an´ı“ (frekvence ˇcten´ı instrukc´ı z flash pamˇeti u SAM7 je ” efektivnˇe pouze“ 30MHz – neplat´ı pro Thumb instrukce), viz manu´aly obvod˚ u [23] [8]. ” Mikrokontrol´ery Atmel SAM7 [8] ovˇsem maj´ı oproti sv´ym konkurent˚ um ojedinˇelou moˇznost vyuˇz´ıt DMA (Direct Memory Access) kan´al pro vybran´e periferie (mj. UART a SPI). Pouˇzit´ım DMA se periferie vyh´yb´a intervenci procesoru a odstraˇ nuje jeho znaˇcn´y v´ydaj pˇri obsluze pˇreruˇsen´ı, t´ım v´yraznˇe ˇsetˇr´ı hodinov´e cykly a energii. Tento model umoˇzn ˇ uje relativn´ı nez´avistlost periferi´ı na procesoru, d˚ usledkem je vˇetˇs´ı propustnost
´ C ˇ AST ´ 3.1. HARDWAROVA
9
dat pˇres periferie a efektivn´ı bˇeh procesoru bez zbyteˇcn´ych pˇreruˇsen´ı. V neposledn´ı ˇradˇe nab´ız´ı Atmel co do pˇrehlednosti a ucelenosti pro sv´e konkurenty pˇr´ıkladnou dokumentaci. Z v´yˇse uveden´ych d˚ uvod˚ u byl pro naˇsi u ´ lohu zvolen mikrokontrol´er z rodiny Atmel SAM7, konkr´etnˇe AT91SAM7S256 (v´ıce v kapitole 5.1).
3.1.2
Komunikaˇ cn´ı sbˇ ernice, periferie
Secure Digital Pamˇet’ov´a karta Secure Digital (SD) navazuje na zpˇetnˇe kompatibiln´ı standard MMC, se kter´ym sd´ıl´ı tvar a ˇc´asteˇcnˇe fyzickou vrstvu. Podle specifikace fyzick´e vrstvy [19] prob´ıh´a komunikace s kartou ve smyslu MASTER ↔ SLAVE, pˇriˇcemˇz hostitel je vˇzdy MASTER, karta vˇzdy SLAVE. Specifikace mj. dovoluje pˇripojen´ı/odpojen´ı za bˇehu (tzv. Hot insertion), pˇriˇcemˇz hostitel mus´ı zajistit tuto podporu pˇredevˇs´ım spr´avn´ym uspoˇr´ad´an´ım vodiˇc˚ u v konektoru, tzn. nap´ajec´ı vodiˇce mus´ı b´yt delˇs´ı, neˇzli datov´e. Tato pamˇet’ov´a karta dovoluje tˇri typy ochrany dat: • mechanick´y pˇrep´ınaˇc ochrany proti z´apisu (zodpovˇednost hostilete), • vnitˇrn´ı nastaven´ı ochrany proti z´apisu (zodpovˇednost karty), • ochrana ˇc´asti pamˇeti pomoc´ı hesla (zodpovˇednost uˇzivatele). Zaj´ımavost´ı je, ˇze mechanick´y pˇrep´ınaˇc ochrany proti z´apisu neovlivˇ nuje vnitˇrn´ı logiku, m˚ uˇze a nemus´ı tedy b´yt respektov´an hostitelem, viz manu´al SD karet SanDisk [31]. Zm´ınˇen´a specifikace popisuje dvˇe z´akladn´ı verze SD karet (jejich fyzick´ych vrstev). Jsou to: • Standard Capacity SD card (kapacita < 2GB), • High Capacity SD card (kapacita > 2GB). Obˇe verze podporuj´ı dva typy datov´ych sbˇernic, rychlejˇs´ı paraleln´ı a jednoduˇsˇs´ı s´eriovou. U obou typ˚ u sbˇernic nesm´ı frekvence hodin pˇres´ahnout 50MHz. • SD bus je paraleln´ı ˇsestivodiˇcov´a komunikaˇcn´ı sbˇernice, kter´a se skl´ad´a z tˇechto vodiˇc˚ u: – CLK – hodinov´y sign´al MASTER → SLAVE,
ˇ ´IZEN´I KAPITOLA 3. ARCHITEKTURA ZAR
10
– CMD – command sign´al MASTER ↔ SLAVE, – D0-D4 – datov´e vodiˇce MASTER ↔ SLAVE. • SPI bus je standardn´ı s´eriov´a ˇctyˇrvodiˇcov´a sbˇernice. Skl´ad´a se z tˇechto vodiˇc˚ u: – SCLK – hodinov´y sign´al MASTER → SLAVE, – MOSI – Master Output Slave Input data, MASTER → SLAVE, – MISO – Master Input Slave Output data, SLAVE → MASTER, – CS – Chip Select. Pr˚ umˇern´a rychlost pˇrenosu dat m˚ uˇze b´yt u SD bus aˇz 50MB/s a u SPI bus aˇz 6MB/s. Skuteˇcn´a rychlost z´apisu dat je ale vˇzdy v´yraznˇe menˇs´ı a je mj. z´avisl´a na kvalitˇe a kapacitˇe pamˇet’ov´e karty. Pro naˇse u ´ˇcely postaˇcuje standardn´ı SPI sbˇernice, kter´a m´a dostateˇcnou propustnost a potˇrebuje menˇs´ı poˇcet vodiˇc˚ u. Pouˇzit´y mikrokontrol´er nav´ıc obsahuje jej´ı hardwarovou implementaci v podobˇe SPI periferie, takˇze nen´ı nutn´e implementovat ovladaˇc dan´e sbˇernice. RTC Z´aznamn´ık dat je nutn´e doplnit o obvod re´aln´eho ˇcasu (Real Time Clock) pro moˇznost vkl´ad´an´ı ˇcasov´ych znaˇcek do z´aznamu. K dispozici je velk´e mnoˇzstv´ı takov´ych obvod˚ u, kter´e se liˇs´ı pˇredevˇs´ım v komunikaˇcn´ı sbˇernici. Pro naˇse u ´ˇcely bude vhodn´y RTC obvod komunikuj´ıc´ı pomoc´ı sbˇernice I2 C, protoˇze je tento standard podporov´an mikrokontrol´erem AT91SAM7S (periferi´ı Two-wire interface). Konkr´etnˇe byl vybr´an obvod Philips PCF8563, pops´an v kapitole 5.2. LCD Pˇri v´ybˇeru vhodn´eho LCD displeje budou rozhoduj´ıc´ımi n´asleduj´ıc´ı krit´eria: • dostatek prostoru pro poˇzadovanou funkˇcnost, tzn. dostateˇcn´e rozliˇsen´ı (pro grafick´y displej), nebo poˇcet ˇr´adk˚ u a sloupc˚ u (pro alfanumerick´y displej), • rozumn´e vnˇejˇs´ı rozmˇery displeje, • co nejjednoduˇsˇs´ı komunikaˇcn´ı rozhran´ı,
´ ARCHITEKTURA 3.2. SOFTWAROVA
11
• vstupn´ı napˇet´ı 3.3V, • dostupnost a cena. Krit´eria splˇ nuje vybran´y grafick´y displej ATM12864D s rozliˇsen´ım 128x64 bod˚ u, kter´y je ˇr´ızen LCD ˇradiˇcem KS0713. Tento ˇradiˇc podporuje kromˇe bˇeˇzn´e paraleln´ı komunikaˇcn´ı sbˇernice tak´e u ´ spornˇejˇs´ı s´eriovou, cel´e ˇr´ızen´ı displeje tak prob´ıh´a pomoc´ı pˇeti vodiˇc˚ u, viz kapitola 5.3.4.
3.1.3
Architektonick´ e sch´ ema zaˇ r´ızen´ı
Mikrokontrol´er AT91SAM7S256 obsahuje hardwarovou implementaci USB ˇradiˇce, proto je rozumn´e do zaˇr´ızen´ı um´ıstit USB konektor pro nap´ajen´ı a pˇr´ıpadn´e pozdˇejˇs´ı rozˇs´ıˇren´ı funkˇcnosti. Blokov´e sch´ema navrˇzen´e architektury zaˇr´ızen´ı je na obr´azku 3.1.
RS-232
RS-232 bus driver
RS-232
RS-232 bus driver
UART
UART
AT91SAM7S
SPI
I2C
RTC
USB
LCD serial bus
SD card
Obr´azek 3.1: Architektonick´e sch´ema zaˇr´ızen´ı.
3.2
Softwarov´ a architektura
V t´eto kapitole naznaˇc´ıme hlavn´ı rysy softwarov´eho ˇreˇsen´ı u ´ lohy.
USB
LCD display
ˇ ´IZEN´I KAPITOLA 3. ARCHITEKTURA ZAR
12
3.2.1
Bare-metal
Pro v´ykonnˇejˇs´ı jednoˇcipov´e mikroprocesory jsou k dispozici embedded real-time operaˇcn´ı syst´emy, kter´e umoˇzn ˇ uj´ı multitasking, multithreading apod. Jde napˇr. o komerˇcn´ı µC/OSII nebo voln´e eCos, FreeRTOS ˇci Embedded Linux. Naˇse u ´ loha i jej´ı zpracov´an´ı nevyˇzaduje pˇr´ıliˇs sloˇzitou softwarovou architekturu, resp. nevyˇzaduje zm´ınˇen´e pokroˇcil´e moˇznosti. Z toho d˚ uvodu byl zvolen softwarov´y model bez operaˇcn´ıho syst´emu, tzv. bare-metal. V´yhody jsou rychlejˇs´ı odezva pˇreruˇsen´ı, jednoduchost, pˇrehlednost, jednoduˇsˇs´ı psan´ı ovladaˇc˚ u a v neposledn´ı ˇradˇe tak´e studijn´ı u ´ˇcely.
3.2.2
Logika aplikace
N´avrh software je moˇzn´e rozdˇelit do tˇechto ˇc´ast´ı: 1. startup k´od (z´akladn´ı nastaven´ı, stack, memory remap, pˇr´ıprava na skok do hlavn´ı smyˇcky), 2. pˇr´ıpadn´a hardwarov´a abstrakce, 3. ovladaˇce periferi´ı, 4. uˇzivatelsk´e prvky a utlity, 5. hlavn´ı aplikace. Tyto ˇc´asti odpov´ıdaj´ı vrstv´am naznaˇcen´ym na sch´ematu 3.2. Podrobnosti najdeme v kapitole 6.
MAIN PROGRAM
User interface Interrupt routines Drivers HAL
Boot code, linker values
Obr´azek 3.2: Sch´ema architektury softwaru.
3.3. TOOLCHAIN
3.3
13
Toolchain
Pro ARM platformu je k dispozici cel´a ˇrada v´yvojov´ych n´astroj˚ u, z nichˇz zde uvedeme ty nejd˚ uleˇzitˇejˇs´ı.
3.3.1
R R ARM RealView Suite
ARM RealView je komerˇcn´ı v´yvojov´y n´astroj od spoleˇcnosti ARM Ltd. [5]. Obsahuje vlastn´ı C a C++ kompil´ator, kter´y patˇr´ı k tˇem nejlepˇs´ım, co se t´yˇce optimalizace a velikosti produkovan´eho k´odu. D´ale zahrnuje vlastn´ı v´yvojov´e prostˇred´ı ARM Workbench IDE, kter´e je postaveno na open-sourceprostˇred´ı Eclipse. To je obohaceno o dalˇs´ı n´astroje zjednoduˇsuj´ıc´ı n´avrh syst´emu, napˇr. utility pro pˇrehledn´e nastaven´ı parametr˚ u kompil´atoru a linkeru, n´astroje pro grafickou reprezentaci pamˇeti namapovan´e linkerem a dalˇs´ı. Obsahuje tak´e profilovac´ı n´astroj, kter´y je schopen realtime on-chip anal´yzy softwaru.
3.3.2
IAR Embedded Workbench
Tento bal´ık n´astroj˚ u od firmy IAR Systems [14] obsahuje vlastn´ı C a C++ kompil´ator, assembler, debugger naz´yvan´y C-SPY a tak´e vlastn´ı IDE prostˇred´ı. IAR tak´e nab´ız´ı vlastn´ı v´yvojov´e desky k vybran´ym mikrokontrol´er˚ um vˇcetnˇe USB-JTAG hardwaru. Zaj´ımavost´ı je n´astroj IAR visualSTATE, se kter´ym je moˇzn´e vytv´aˇret z´aklad aplikace pˇr´ımo z visu´aln´ıho n´avrhu stavov´eho automatu. Vˇsechny tyto v´yvojov´e prostˇredky jsou komerˇcn´ı.
3.3.3
KeilTM Development Tools
Komerˇcn´ı v´yvojov´e n´astroje nˇemeck´e firmy Keil Elektronik GmbH [16] spojuj´ı low-level n´astroje (kompil´ator, linker) RealView (kapitola 3.3.1) s vlastn´ım IDE a debuggerem R ), kter´y m´a mnoho pˇrednost´ı. Toto IDE napˇr. zahrnuje velmi pokroˇcil´e si(µVision mul´atory j´adra i d˚ uleˇzit´ych periferi´ı, dovede pˇrehlednˇe a rychle nastavovat parametry periferi´ı, apod. Tato firma tak´e nab´ız´ı vlastn´ı v´yvojov´y hardware vysok´e kvality.
ˇ ´IZEN´I KAPITOLA 3. ARCHITEKTURA ZAR
14
3.3.4
GNU ARM Toolchain
V posledn´ı dobˇe se st´av´a konkurenceschopnou komerˇcn´ım prostˇredk˚ um sada v´yvojov´ych open-source n´astroj˚ u projektu GNU (kapitola 4.1), kterou je moˇzn´e naj´ıt v rozliˇcn´ych distribuc´ıch, jako je CodeSourcery (ofici´aln´ı distribuce), Yagarto, WinARM a dalˇs´ı. Zaj´ımavou je distribuce YAGARTO, kter´a spojuje GNU ARM Toolchain, Eclipse IDE a debuggovac´ı n´astroj OpenOCD (Open-source On-Chip Debugger ). Tato kombinace dovoluje pohodln´e JTAG on-chip debuggov´an´ı pˇr´ımo v pokroˇcil´em prostˇred´ı Eclipse, ˇc´ımˇz se st´av´a mocn´ym n´astrojem. Nev´yhodou tˇechto n´astroj˚ u m˚ uˇze b´yt v porovn´an´ı s komerˇcn´ımi alternativami urˇcit´a nedokonalost“, napˇr. nutnost ruˇcnˇe upravovat komunikaˇcn´ı a konfiguraˇcn´ı skripty (lin” kerscript, debugger, OpenOCD, makefile), coˇz m˚ uˇze b´yt zdlouhav´e a n´aroˇcn´e. K dispozici jsou pouze z´akladn´ı generick´e varianty tˇechto skript˚ u. Velikou v´yhodou je ovˇsem fakt, ˇze jde o software s volnou licenc´ı. V´ıce nalezneme v kapitole 4.1. GNU ARM Toolchain v distribuci YAGARTO byl zvolen v´yvojov´ ym n´astrojem pro naˇsi u ´ lohu.
Kapitola 4 Pouˇ zit´ e technologie V t´eto kapitole pˇribl´ıˇz´ıme pouˇzit´e technologie, v´ yvojov´e prostˇredky, softwarov´e n´astroje a knihovny.
4.1
GNU ARM Toolchain
Projekt s n´azvem GNU [12] bˇeˇz´ı od roku 1984 za u ´ˇcelem vzniku unixov´eho operaˇcn´ıho syst´emu se svobodnou licenc´ı, kter´y vˇsak nebude obsahovat ˇz´adn´y k´od z p˚ uvodn´ıho UNIXu (GNU je rekurzivn´ı zkratka GNU’s Not Unix ). Dnes je projekt zamˇeˇren obecnˇe na svobodn´y software inspirovan´y operaˇcn´ımi syst´emy unixov´eho typu. Software oznaˇcen´y GNU se ˇr´ıd´ı licenc´ı GPL (General Public License). GNU ARM Toolchain [13] je sada open-source v´yvojov´ych n´astroj˚ u pro platformu s j´adrem ARM. Jeho v´yhodou je samozˇrejmˇe voln´a licence. Je rozdˇelen do tˇechto ˇc´ast´ı: • sada kompil´ator˚ u gcc (GNU Compiler Collection), • debugger gdb, • sada bin´arn´ıch utilit (linker, assembler, archiver), • bal´ık standardn´ıch knihoven newlib, • grafick´a nadstavbu nad gdb s n´azvem Insight. Kompil´ator gcc je schopen kompilovat z jazyk˚ u C, C++, Objective-C, ObjectiveC++, Java, Fortran a Ada, viz manu´al gcc kompil´atoru [29]. 15
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
16
4.1.1
ELF
Pro strukturu v´ystupn´ıch soubor˚ u pouˇz´ıv´a GNU ARM Toolchain standard ELF (Executable and Linking Format), z ˇcehoˇz vych´az´ı i n´azvy bin´arn´ıch soubor˚ u toolchainu (napˇr. arm-elf-gcc.exe). ELF postupnˇe nahrazuje starˇs´ı strukturu COFF (viz [39]). ELF struktura se t´yk´a soubor˚ u: • .o – objektov´e soubory (v´ystupy kompil´atoru a assembleru) – object files, • .out .elf – spustiteln´e soubory (v´ystupy linkeru) – executable files, • .a .so – arch´ıvy a sd´ılen´e knihovny – archives, shared libraries, • .dmp – core dumps. Vnitˇrn´ı struktura souboru podle t´eto normy je naznaˇcena na obr´azku 4.1. ELF soubor obsahuje tyto ˇc´asti: • ELF header – hlaviˇcka souboru, ELF header
• Program header table – popisuje segmenty, Program header table
ˇc´asti dat pouˇzit´e pˇri bˇehu programu, • Section header table – popisuje jednotliv´e sekce dat, • datov´e sekce. Kaˇzd´a sekce poj´ım´a data stejn´eho typu, napˇr. v sekci .text se nach´az´ı spustiteln´a data, promˇenn´e najdeme v sekci .data. V sekci .bss
{ {
.text
.rodata ... .data Section header table
jsou promˇenn´e, kter´e v programu nemaj´ı poˇc´ateˇcn´ı hodnotu, je zde tedy (narozd´ıl od sekce .data)
Obr´azek 4.1: ELF layout (zdroj: [38]).
pouze uvedena velikost potˇrebn´e pamˇeti. Toto rozdˇelen´ı do sekc´ı, nam´ısto vˇsech dat pohromadˇe (napˇr. u spustiteln´ych soubor˚ u MS-DOS), m´a sv´e v´yhody v jednotn´em zpracov´an´ı jednotliv´ych sekc´ı, ˇcehoˇz se nav´ıc dobˇre vyuˇz´ıv´a pˇri linkov´an´ı programu (kapitola 4.1.2).
17
4.1. GNU ARM TOOLCHAIN
4.1.2
GNU linker, linker script
Linker je vyuˇz´ıv´an v jedn´e z fin´aln´ıch f´az´ı pˇr´ıpravy spustiteln´eho souboru. Zpracov´av´a vˇsechny soubory .o a .a (viz 4.1.1), spojuje pˇr´ısluˇsn´e sekce, vyb´ır´a pouze pouˇzit´e symboly a funkce, spojuje veˇsker´e reference mezi jednotliv´ymi soubory apod. GNU linker dok´aˇze zpracov´avat COFF i ELF soubory a pro jednotn´y pˇr´ıstup k soubor˚ um pouˇz´ıv´a knihovny GNU BFD (Binary File Descriptor library). Linker script Bˇeh linkeru je kontrolov´an tzv. linker scriptem, kter´y mj. urˇcuje, jak se jednotliv´e sekce vstupn´ıch soubor˚ u mapuj´ı do v´ystupn´ıho souboru a tak´e definuje rozvrˇzen´ı cel´eho v´ystupu v pamˇeti. Tyto u ´ koly se v´yraznˇe mˇen´ı s platformou, proto jsou porozumˇen´ı a u ´ prava linker scriptu esenci´aln´ımi u ´ kony. Z toho d˚ uvodu zde uvedeme alespoˇ n z´akladn´ı operace a pˇr´ıklady jazyka linker scriptu (pˇrevzato z knihy o GNU linkeru Steva Chamberlaina [34]). • skript m˚ uˇze zakl´adat promˇenn´e pˇr´ıkazem symbol = expression; vˇcetnˇe vˇsech variant pˇriˇrazen´ı zn´am´ych z jazyka C, napˇr. _stack_end = 0x20FFFC; Vˇsechny promˇenn´e zaloˇzen´e linkerskriptem jsou pˇr´ıstupn´e z linkovan´ych objekt˚ u jako extern´ı glob´aln´ı promˇenn´e. • Pˇr´ıkazem MEMORY definujeme n´azvy, adresy a velikosti pamˇet´ı dostupn´ych na v´ystupn´ı platformˇe. Pˇr´ıkaz m´a strukturu: MEMORY {
name [(attr)] : ORIGIN = origin, LENGTH = len
}
napˇr´ıklad: MEMORY {
ROM : ORIGIN = 0x00100000, LENGTH = 256k RAM : ORIGIN = 0x00200000, LENGTH = 64k
}
• Prvn´ı instrukci programu, kter´a se m´a spustit, tzv. entry point, m˚ uˇzeme nastavit pomoc´ı pˇr´ıkazu
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
18 ENTRY(symbol)
symbol tedy pˇredstavuje napˇr. n´avˇeˇst´ı v assembleru, nebo jm´eno funkce. Pokud tento pˇr´ıkaz nepouˇzijeme, za entry point bude povaˇzov´an symbol start (pokud je definovan´y), nebo prvn´ı instrukce sekce .text (pokud sekce existuje), nebo adresa 0. • pˇr´ıkaz SECTIONS definuje mapov´an´ı vstupn´ıch sekc´ı na v´ystupn´ı sekce a jejich um´ıstˇen´ı v pamˇeti. Form´at pˇr´ıkazu je SECTIONS {
sections-command ...
}
pˇr´ıklad struktury pˇr´ıkazu sections-command: .output_section [adress] [(type)] : [AT(LMA_adress)] { *(.input_section) ... _end_output_section = .; } >mem_region [AT >LMA_mem_region] Kaˇzd´a v´ystupn´ı sekce m´a tzv. VMA (Virtual Memory Adress), coˇz je adresa, kterou bude m´ıt sekce pˇri bˇehu programu, a LMA (Load Memory Adress), coˇz je adresa, kam je sekce uloˇzena. Typick´ym pˇr´ıkladem je sekce .data (promˇenn´e), kterou chceme m´ıt v pamˇeti RAM pˇri bˇehu programu. Pamˇet’ RAM je ale vˇzdy smaz´ana pˇri odpojen´ı syst´emu od nap´ajen´ı, chceme tedy m´ıt jej´ı inicializaˇcn´ı obsah v pamˇeti ROM (LMA) a pˇri startu programu jej zkop´ırovat do pamˇeti RAM (VMA). Mem region je n´azev pamˇeti pro VMA a nepovinn´y parametr adress urˇcuje jej´ı adresu. Jestliˇze nen´ı uveden, je pro adresu VMA pouˇzito lok´aln´ı poˇc´ıtadlo dan´eho odd´ılu pamˇeti. Nepovinn´e parametry AT(LMA adress) resp. [AT >LMA mem region] urˇcuj´ı adresu LMA resp. n´azev pamˇeti pro LMA. Symbol .“ je promˇenn´a pˇredstavuj´ıc´ı lok´aln´ı poˇc´ıtadlo adresy v dan´em odd´ılu ” pamˇeti. V naznaˇcen´em pˇr´ıkladu je do glob´aln´ı promˇenn´e end output section pˇriˇrazen obsah t´eto promˇenn´e, tzn. adresa v pamˇeti, kde konˇc´ı dan´a sekce (je to posledn´ı pˇr´ıkaz).
19
4.2. NEWLIB
4.1.3
Zpracov´ an´ı zdrojov´ ych soubor˚ u pomoc´ı GNU ARM
Na obr´azku 4.2 je vidˇet sekvence zpracov´an´ı zdrojov´ych soubor˚ u jednotliv´ymi ˇc´astmi v´yvojov´eho n´astroje a vznik spustiteln´eho bin´arn´ıho souboru.
.c
arm-elf-gcc
.o arm-elf-ar
.S
arm-elf-as
lib.a
.o
lib.a
arm-elf-objcopy
.bin
arm-elf-objdump
.dmp
linker_script .out (.elf)
.o arm-elf-ld .o .a
Obr´azek 4.2: Zpracov´an´ı zdrojov´ ych soubor˚ u pomoc´ı GNU ARM.
Zdrojov´e soubory .c a .S (assembler) jsou zkompilov´any do objektov´ych ELF soubor˚ u .o, kter´e je moˇzn´e tzv. archivovat, tedy vytvoˇrit z nich ELF knihovnu .a. Objektov´e soubory spolu s knihovnami jsou pak slinkov´any do v´ystupn´ıho spusti” teln´eho“ ELF souboru .out (nebo .elf). Z tohoto v´ystupu je jiˇz vytvoˇren bin´arn´ı soubor .bin pro c´ılovou platformu. V´yhodn´ym je tak´e dump soubor .dmp, ve kter´em najdeme pˇrehledn´e informace o v´ystupu a pr˚ ubˇehu zpracov´an´ı, tedy informace o sekc´ıch, adresy promˇenn´ych a funkc´ı, apod.
4.2
Newlib
Newlib je standardn´ı C knihovna urˇcen´a pˇredevˇs´ım pro embedded syst´emy. Nyn´ı j´ı spravuje firma Red Hat. Dˇel´ı se na dvˇe ˇc´asti:
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
20
4.2.1
libc.a
Obsahuje standardn´ı C funkce, jejichˇz definice najdeme ve standardn´ıch hlaviˇck´ach: • stdlib.h – standardn´ı funkce – abs, atoi, malloc, . . . , • ctype.h – makra a funkce znakov´ych typ˚ u – isascii, tolower, . . . , • stdio.h – input, output – read, write, printf, . . . , • string.h – stringov´e a pamˇet’ov´e funkce – strlen, memcpy, . . . , • wchar.h – wide character string funkce – wcslen, wmemcpy, . . . , • signal.h – pr´ace se sign´aly – raise, signal, . . . , • time.h – ˇcasov´e funkce – time, localtime, . . . , • locale.h – lok´aln´ı nastaven´ı – NULL, decimal point, . . . , • iconv.h – konverze ˇretˇezc˚ u – iconv, iconv open, . . . ,
4.2.2
libm.a
Obsahuje nadstandardn´ı matematick´e funkce, zejm´ena pro v´ypoˇcty s plovouc´ı ˇr´adovou ˇc´arkou, jako napˇr. log, sqrt, acosh, apod. Definice funkc´ı najdeme v hlaviˇcce: • math.h. Pˇrednost´ı knihovny Newlib je to, ˇze m˚ uˇze b´yt zkompilov´ana pro t´emˇeˇr jakoukoliv platformu. Pro spr´avn´y bˇeh cel´e knihovny je tˇreba implementovat pouze nˇekolik n´ızko´ urovˇ nov´ych syst´emov´ych funkc´ı (viz kniha o n´astroj´ıch GNU pro embedded syst´emy od Rob Savoye [32]). Tyto funkce se naz´yvaj´ı System Calls, mj. jde napˇr´ıklad o read, write pro moˇznost pˇresmˇerov´an´ı v´ystupu printf a odvozen´ych funkc´ı, nebo sbrk pro zvˇetˇsov´an´ı haldy, ˇcehoˇz vyuˇz´ıv´a funkce malloc (a j´ı pˇr´ıbuzn´e) pro dynamick´e alokov´an´ı pamˇeti (informace pˇrevzaty z manu´alu knihovny Newlib Steva Chamberlaina [35]).
4.3. GNU DEBUGGER, JTAG A OPENOCD
4.3 4.3.1
21
GNU debugger, JTAG a OpenOCD GNU debugger
GNU debugger je program, kter´y je dok´aˇze sledovat, co se dˇeje uvnitˇr“ jin´eho programu. ” Je to pˇredevˇs´ım n´astroj k hled´an´ı a odstraˇ nov´an´ı chyb v programu, kter´y je schopen ˇctyˇr z´akladn´ıch vˇec´ı: • spustit program, ovlivˇ novat jeho chov´an´ı, • zastavit program pˇri dan´ych podm´ınk´ach, • prozkoumat stav programu pˇri zastaven´ı, • lok´alnˇe mˇenit program (obsah promˇenn´ych), tedy experimentovat s chybami. Takto lze testovat program bud’ lok´alnˇe, nebo vzd´alenˇe pomoc´ı s´eriov´e linky ˇci TCP/IP spojen´ı, ˇcehoˇz se vyuˇz´ıv´a zejm´ena k debuggov´an´ı embedded syst´em˚ u. GNU debugger pouˇz´ıv´a pro vzd´alen´e debuggov´an´ı tzv. GDB Remote Serial Protocol (informace pˇrevzaty z GDB manu´alu Richarda Stallmana [30]).
4.3.2
JTAG
JTAG (Joint Test Action Group) je vlastn´ı n´azev standardu IEEE 1149.1, vyvinut´eho pro tzv. boundary scan, tj. vzd´alen´e testov´an´ı vodiv´ych spoj˚ u DSP a blok˚ u uvnitˇr integrovan´ych obvod˚ u (viz [38]). JTAG je s v´yhodou moˇzn´e pouˇz´ıt tak´e jako transportn´ı mechanismus mezi program´atorem a debuggovac´ı jednotkou uvnitˇr integrovan´eho obvodu, tedy pouˇz´ıt jej k debuggov´an´ı embedded syst´em˚ u. JTAG vyuˇz´ıv´a v z´asadˇe tˇechto pˇet sign´al˚ u: • TDI (Test Data In), • TDO (Test Data Out), • TCK (Test Clock), • TMS (Test Mode Select), • TRST (Test Reset) – nepovinn´y.
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
22
4.3.3
OpenOCD
Open On-Chip Debugger (OpenOCD) je open-source software zamˇeˇren na debuggov´an´ı a In-System programov´an´ı (programov´an´ı integrovan´eho obvodu, kter´y je jiˇz zakomponov´an v syst´emu - na DPS). Podporuje nˇekolik typ˚ u JTAG hardwaru, napˇr. paraleln´ı Wiggler, USB pˇrevodn´ıky zaloˇzen´e na FTDI FT2232, Amontec JTAG Accelerator a dalˇs´ı (viz OpenOCD manu´al [27]). Tento software se ale st´ale vyv´ıj´ı a roste poˇcet typ˚ u podporovan´eho hardwaru. OpenOCD je zat´ım zamˇeˇreno na ARM platformy s j´adry ARM7, ARM9, XScale a Cortex-M3. Program pracuje jako daemon, kter´y akceptuje pˇr´ıchoz´ı pˇripojen´ı pˇres telnet nebo GDB port, napˇr. tedy pˇrekl´ad´a poˇzadavky GDB debuggeru na JTAG sign´aly. Runtime konfigurace tohoto programu se prov´ad´ı pomoc´ı extern´ıho skriptu (pˇr´ıklad viz [27]). Zde jsou pops´any dva nejˇcastˇejˇs´ı pracovn´ı modely OpenOCD: Remote – GDB, telnet Program je nastaven konfiguraˇcn´ım skriptem pˇri spuˇstˇen´ı programu. Pak je moˇzn´e pˇripojit se k nˇemu pomoc´ı TCP/IP nebo GDB portu. Tento m´od je urˇcen pro debuggov´an´ı nebo ruˇcn´ı pr´aci“ (pos´ıl´an´ı pˇr´ıkaz˚ u pˇres telnet). Pracovn´ı sch´ema v m´odu remote je na ” obr´azku 4.3.
target
JTAG hardware
config.cfg OpenOCD
GDB, telnet Obr´azek 4.3: OpenOCD pracovn´ı m´ od remote.
Lok´ aln´ı skript V konfiguraˇcn´ım skriptu lze vnutit OpenOCD skript s pˇr´ıkazy, kter´e m´a prov´est. To je vhodn´e pˇredevˇs´ım pro naprogramov´an´ı flash pamˇeti uvnitˇr integrovan´eho obvodu. V pˇr´ıkazov´em skriptu staˇc´ı zadat sekvenci typu naˇcti soubor firmware.bin“, naprogra” ” muj pamˇet’“ a skonˇci“. Cel´y proces pak lze prov´est vhodn´ym makefilem, .bat souborem, ” nebo jedn´ım pˇr´ıkazem na pˇr´ıkazov´e ˇr´adce.
23
4.4. YAGARTO Pracovn´ı sch´ema v m´odu local script je na obr´azku 4.4. config.cfg JTAG hardware
target
OpenOCD
cmd_script.ocd Obr´azek 4.4: OpenOCD pracovn´ı m´ od local script.
4.4
YAGARTO
YAGARTO (Yet Another GNU Arm TOolchain) je neofici´aln´ı distribuce (kompilace) bal´ıku GNU ARM Toolchain obsahuj´ıc´ı: • GCC kompil´ator, GNU Binutils, Newlib a Insight debugger, • vlastn´ı kompilaci OpenOCD, • Eclipse IDE, Eclipse CDT a Zylin CDT plugin pro GDB embedded debuggov´an´ı. Distribuce je urˇcena pro Windows a zkompilov´ana pomoc´ı MinGW (viz [11]), narozd´ıl od ofici´aln´ı distribuce (CodeSourcery) zkompilovan´e pomoc´ı Cygwin tedy nepotˇrebuje dalˇs´ı vrstvu knihoven, pouˇz´ıv´a nativn´ı Windows API. Jej´ı nev´yhodou je, ˇze zat´ım nepodporuje j´adra Cortex-M3. V´yhodou je integrace OpenOCD a pokroˇcil´eho prostˇred´ı Eclipse IDE s pluginem Zylin CDT, se kter´ym je moˇzn´e velmi pohodlnˇe debuggovat program pˇr´ımo na ˇcipu v prostˇred´ı Eclipse (samozˇrejmˇe s vyuˇzit´ım GNU GDB). Mikroprocesory Atmel AT91SAM d´ale nab´ız´ı moˇznost vyuˇz´ıt k pˇreps´an´ı flash pamˇeti program SAM-BA (SAM Boot Assistant), kter´y je schopen pˇripojit se k implicitn´ımu bootloaderu na ˇcipu a naprogramovat flash pamˇet’ pomoc´ı USB, RS-232 nebo JTAGu (se speci´aln´ım hardwarem). Tento proces lze tak´e integrovat do Eclipse IDE. SAM-BA lze spustit z pˇr´ıkazov´e ˇr´adky s vhodn´ymi parametry a TCL skriptem s pˇr´ıkazy pro naprogramov´an´ı c´ıle. Pracovn´ı diagram vˇsech n´astroj˚ u obsaˇzen´ych v distribuci je zn´azornˇen na obr´azku 4.5.
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
24
Eclipse IDE
Makefile
GNU ARM Toolchain
main.bin
Build Program w SAM -BA SAM-BA
Program w OpenOCD Debug
USB, RS-232, or special JTAG HW
script.tcl
OpenOCD Zylin CDT plugin
Makefile
load_config.cfg load_script.ocd
main.elf OpenOCD GNU GDB
dbg_config.cfg
JTAG hardware
target system
Obr´azek 4.5: Pracovn´ı diagram GNU ARM toolchainu v distribuci YAGARTO.
4.5
EFSL
Embedded FileSystems Library (EFSL) je open-source knihovna funkc´ı pro podporu souborov´ych syst´em˚ u na r˚ uzn´ych embedded zaˇr´ızen´ıch. Knihovna se neust´ale vyv´ıj´ı, zat´ım podporuje souborov´e syst´emy rodiny Microsoft FAT tedy FAT12, FAT16 a FAT32. Nutn´e a postaˇcuj´ıc´ı minimum voln´e operaˇcn´ı pamˇeti pro bˇeh knihovny je 1 kilobyte. Pˇrednost´ı knihovny je schopnost pracovat t´emˇeˇr s jak´ ymkoliv druhem m´edia, ze kter´eho se d´a ˇc´ıst/zapisovat. Takov´ym m´ediem m˚ uˇze b´yt disk, pamˇet’ov´a karta, ˇc´ast pamˇeti, nebo tˇreba soubor (viz EFSL manu´al [17]). Knihovna udrˇzuje cache sektor˚ u (do uˇzivatelem definovan´e velikosti) a je schopna minimalizovat pˇr´ıstupy do FAT tabulky, t´ım ˇsetˇr´ı pˇr´ım´y pˇr´ıstup k m´ediu. Vnitˇrn´ı struktura (vrstvy, hierarchie) knihovny vych´az´ı z re´aln´e hierarchie syst´emu s pevn´ym diskem, viz obr´azek 4.6.
25
4.5. EFSL
File
Filesystem
Partition
Disc
IO manager
HwInterface
Obr´azek 4.6: Vnitˇrn´ı hierarchie knihovny EFSL.
Vrstvy File, Filesystem, Partition a Disc odr´aˇz´ı sv´e re´aln´e jmenovce (parametry, zp˚ usob adresov´an´ı), vrstva IO manager spravuje cache sektor˚ u a v pˇr´ıpadˇe potˇreby prov´ad´ı z´apis/ˇcten´ı z hardwarov´e vrstvy. HwInterface zajiˇst’uje fyzick´y pˇrenos dat z/do m´edia a jej´ı implementace je (v z´asadˇe) zodpovˇednost´ı uˇzivatele. Pˇred pouˇzit´ım knihovny je nutn´e: • implementovat nˇekolik read/write funkc´ı (nebo pouˇz´ıt existuj´ıc´ı, napˇr. obsaˇzen´e v knihovnˇe) umoˇzn ˇ uj´ıc´ıch z´apis/ˇcten´ı sektoru (512 byt˚ u) pamˇeti ze zvolen´eho m´edia, • upravit konfiguraˇcn´ı hlaviˇcku, zde mj. definovat endpoint (tedy kter´e read/write funkce se maj´ı pouˇz´ıt), nastavit velikost cache, nastavit, zda dok´aˇze syst´em podporovat datum a ˇcas, apod. • v pˇr´ıpadˇe, ˇze c´ılov´y syst´em podporuje pˇresn´e datum a ˇcas (napˇr. obsahuje obvod re´aln´eho ˇcasu), implementovat 6 funkc´ı k jeho z´ısk´an´ı, • knihovnu zkompilovat, nebo j´ı zahrnout do rozpracovan´eho projektu. Pro naˇsi aplikaci byla pouˇzita verze, kter´a zahrnuje i ovladaˇc Secure Digital karty pˇres SPI rozhran´ı. Tento ovladaˇc byl upraven k vyuˇzit´ı HAL a pouˇzit v naˇs´ı aplikaci (v´ıce v kapitole 6.4.3). D´ale byla pro u ´ˇcely naˇs´ı u ´ lohy (viz kapitola 2) do vrstvy Filesystem implementov´ana chybˇej´ıc´ı funkce pro smaz´an´ı cel´eho obsahu adres´aˇre vˇcetnˇe vˇsech podadres´aˇr˚ u, vhodn´a tedy napˇr´ıklad pro smaz´an´ı obsahu cel´eho m´edia (viz dokumentace softwaru v pˇr´ıloze B).
26
ˇ E ´ TECHNOLOGIE KAPITOLA 4. POUZIT
Kapitola 5 Hardware V t´eto kapitole pˇribl´ıˇz´ıme detaily hardwarov´eho ˇreˇsen´ı, pˇredevˇs´ım vlastnosti pouˇzit´eho mikrokontrol´eru, ostatn´ıch integrovan´ych obvod˚ u a aspekty n´avrhu hardwarov´e ˇc´asti zaˇr´ızen´ı.
5.1
Mikrokontrol´ er AT91SAM7S256
5.1.1
ARM
Prvn´ı procesor s n´azvem ARM vznikl r. 1985 ve spoleˇcnosti Acorn Computers Ltd. ve Velk´e Brit´anii. Vytvoˇrila jej skupina postgradu´aln´ıch student˚ u v ˇcele se Stevem Furberem na z´akladˇe Berkeley RISC designu. ARM byla p˚ uvodnˇe zkratka pro Acorn RISC Machines (nyn´ı Advanced RISC Machines). Jednalo se o v˚ ubec prvn´ı RISC procesor urˇcen´y pro komerˇcn´ı vyuˇzit´ı (informace pˇrevzaty z knihy o architektuˇre ARM od Steva Furbera [36]). RISC Veˇsker´e tehdejˇs´ı dostupn´e procesory mˇely architekturu CISC (Complex Instruction Set Computer), kter´a s sebou nese mnoho nev´yhod. Rysy RISC (Reduced Instruction Set Computer) architektury (narozd´ıl od CISC) jsou pˇredevˇs´ım: • instrukˇcn´ı sada se sest´av´a z menˇs´ıho poˇctu jednoduch´ych instrukc´ı, kter´e maj´ı jednotnou ˇs´ıˇrku a form´at, 27
28
KAPITOLA 5. HARDWARE • instrukce jsou vykon´av´any (vˇetˇsinou) v jednom hodinov´em cyklu, • k dispozici jsou identick´e registry, kter´e je moˇzn´e pouˇz´ıt v jak´emkoliv kontextu, coˇz zjednoduˇsuje pr´aci kompil´atoru, • load-store architektura, kde instrukce zpracov´avaj´ıc´ı data pracuj´ı pouze nad registry a jsou oddˇelen´e od instrukc´ı, kter´e pˇristupuj´ı do pamˇeti (load /store), • menˇs´ı poˇcet hardwarov´ych datov´ych typ˚ u.
Z tˇechto vlastnost´ı plynou v´yhody, jako napˇr. jednoduˇsˇs´ı architektura d´ıky jednotn´emu dek´odov´an´ı a zpracov´an´ı instrukc´ı, tedy menˇs´ı poˇcet tranzistor˚ u, v´ıce m´ısta pro registry, jednoduˇsˇs´ı a rychlejˇs´ı n´avrh a tak´e pˇrekvapivˇe vˇetˇs´ı v´ykon (aˇc s pouˇzit´ım jednoduch´ych instrukc´ı) d´ıky schopnosti procesoru bˇeˇzet na vyˇsˇs´ı frekvenci. Nev´yhody RISC procesor˚ u jsou pˇredevˇs´ım chab´a hustota k´odu kv˚ uli jednotn´e ˇs´ıˇrce instrukc´ı a jejich pˇr´ıliˇsn´e jednoduchosti a tak´e obecnˇe neschopnost zpracov´avat x86 k´od – coˇz je nev´yhoda pouze ve svˇetˇe IBM compatible poˇc´ıtaˇc˚ u (zdroj: ˇcl´anek Pavla P´ıˇsy o modern´ıch mikrokontrol´erech [25]). Vlastnosti ARM je nativnˇe 32-bitov´e RISC j´adro, pouˇz´ıv´a Von Neumannovu architekturu, tedy jednu sbˇernici a pole registr˚ u pro adresy i data. Obsahuje ALU (Arithmetical Logical Unit) pro sˇc´ıtac´ı operace a MAC (Multiply-Accumulate Unit) pro n´asoben´ı, nepouˇz´ıv´a mikrok´od. Jeho z´akladn´ı instrukˇcn´ı sada obsahuje 23 instrukc´ı ˇs´ıˇrky 32 bit˚ u. Nˇekter´e ARM architektury podporuj´ı i dalˇs´ı instrukce, nebo jin´e instrukˇcn´ı sady (viz [3]). M´ ody Procesor pracuje v tzv. m´odech. Ty se dˇel´ı na privilegovan´e, jimiˇz jsou: Abort, Fast Interrupt Request (FIQ), Interrupt Request (IRQ), Supervisor, Undefined a neprivilegovan´e User a System m´od. Privilegovan´e m´ody umoˇzn ˇ uj´ı jak´ykoliv pˇr´ıstup do Status Registru, neprivilegovan´e m´ody z nˇej umoˇzn ˇ uj´ı pouze ˇc´ıst, tzn. nemohou pˇr´ımo mˇenit m´od. Stav procesoru vˇcetnˇe aktu´aln´ıho m´odu je uloˇzen v registru Processor Status Register. Procesor obsahuje 16 registr˚ u, pˇriˇcemˇz kaˇzd´y m´od m´a vlastn´ı Stack Pointer a Link Register (viz kapitola 5.1.1). FIQ m´a v´ıce vlastn´ıch registr˚ u (viz [2]).
´ AT91SAM7S256 5.1. MIKROKONTROLER
29
Unik´ atn´ı vlastnosti • Podm´ıneˇ cn´ e vykon´ an´ı kaˇ zd´ e instrukce – prvn´ı 4 bity instrukce obsahuj´ı podm´ınku jej´ıho zpracov´an´ı, coˇz je vˇetˇsinou dom´enou skokov´ych instrukc´ı. Tento model ˇsetˇr´ı skoky, kter´e jsou pomalejˇs´ı (mus´ı se vypr´azdnit pipeline), viz [26]. • Barrel-shifter – umoˇzn ˇ uje pˇredzpracov´an´ı jednoho operandu
OP1
OP2
ve smyslu shiftovac´ıch operac´ı (shift, rotation) a obecn´e zpra-
Barrel shifter
cov´an´ı v ALU v jednom kroku. To dovoluje menˇs´ı poˇcet komplexnˇejˇs´ıch instrukc´ı. Instrukˇcn´ı sada jinak zcela postr´ad´a instrukce pro shiftovac´ı operace (viz [26]).
ALU • M´ ody pˇ reruˇ sen´ı – jednoduch´y ale rychl´y syst´em pˇreruˇsen´ı s dvˇema u ´ rovnˇemi priorit, vlastn´ımi m´ody a registry.
RESULT
• Link register – speci´aln´ı registr urˇcen (napˇr´ıklad) pro n´avratovou adresu z funkce. • Thumb, Jazelle DBX – nˇekter´e vyˇsˇs´ı ˇrady ARM procesor˚ u um´ı zpracov´avat v´ıc instrukˇcn´ıch sad. Pˇredevˇs´ım sadu s n´azvem Thumb, kter´a m´a 16-bitovou ˇs´ıˇrku a dovoluje tak lepˇs´ı hustotu k´odu. Zaj´ımavost´ı je Jazelle DBX (Direct Bytecode eXecution), coˇz je hardwarov´a podpora Java Bytek´odu, tedy jak´ysi hardwarov´y Java Virtual Machine (viz [2]). Pˇ reruˇ sen´ı a v´ yjimky V j´adrech ARM m˚ uˇze doj´ıt k osmi typ˚ um pˇreruˇsen´ı, kter´e se v literatur´ach [2] [36] oznaˇcuj´ı jako v´yjimky. Kdyˇz dojde k v´yjimce, procesor nastav´ı program counter na pˇr´ısluˇsnou pozici v tabulce vektor˚ u pˇreruˇsen´ı (v´yjimek) um´ıstˇen´e na adrese 0x0. Tyto v´yjimky jsou stejn´e pro vˇsechny druhy ARM procesor˚ u. Jedn´a se o: 1. Reset – pˇri softwarov´em nebo hardwarov´em resetu (spouˇst´ı se v m´odu Supervisor), 2. Undefined – pˇri pokusu spustit nezn´amou instrukci (spouˇst´ı se v m´odu Undefined), 3. Software Interrupt – softwarov´e pˇreruˇsen´ı (spouˇst´ı se v m´odu Supervisor), 4. Prefetch Abort, Data Abort – odm´ıtnut´ı pˇri snaze vykonat instrukci na nezn´am´e adrese, nebo z´ıskat data z nezn´am´e adresy (spouˇst´ı se v m´odu Abort),
30
KAPITOLA 5. HARDWARE 5. Reserved – reservovan´a v´yjimka pro pozdˇejˇs´ı designy, 6. Interrupt Request – pˇreruˇsen´ı r˚ uzn´ych typ˚ u, od periferi´ı, extern´ı pˇreruˇsen´ı (spouˇst´ı se v m´odu IRQ), 7. Fast Interrupt Request – rychl´e pˇreruˇsen´ı, urˇcen´e pro rychlou odezvu na extern´ı sign´al (spouˇst´ı se v m´odu FIQ).
5.1.2
ARM7TDMI
Toto low-end low-cost j´adro, kter´e pouˇz´ıvaj´ı procesory AT91SAM7S, je moment´alnˇe jedno z nejrozˇs´ıˇrenˇejˇs´ıch. Jeho design vych´az´ı z j´adra ARM6. P˚ uvod jeho n´azvu vych´az´ı z toho, ˇze obsahuje: • podporu pro 16-bitovou instrukˇcn´ı sadu Thumb, • podporu pro on-chip Debuggov´an´ı, • vylepˇsenou n´asobiˇcku (Multiplier) s 64-bitov´ym v´ystupem, • blok EmbeddedICE podporuj´ıc´ı hardwarov´e breakpointy a watchpointy. Procesor zpracov´av´a instrukce s pomoc´ı tˇr´ı´ urovˇ nov´e pipeline (Fetch, Decode, Execution), m´a rozhran´ı pro coprocesor, JTAG rozhran´ı, aj. (viz [2]).
5.1.3
Vlastnosti AT91SAM7S256
Jednoˇcipov´y mikroprocesor Atmel AT91SAM7S256 mimo jin´e obsahuje: • 256kB flash pamˇeti pro uloˇzen´ı programu, 64kB pamˇeti SRAM, • Power Management Controller – vyp´ın´an´ı periferi´ı, zmˇeny frekvence procesoru, idle m´od, • Advanced Interrupt Controller – osm u ´ rovn´ı priorit pˇreruˇsen´ı, vektorov´an´ı obsluhy, • Debug Unit – dvouvodiˇcov´y UART, debuggovac´ı v´ypis, m˚ uˇze komunikovat s debuggovac´ı jednotkou, • Periodic Interval Timer – 20-bitov´y + 12-bitov´y ˇc´ıtaˇc,
´ AT91SAM7S256 5.1. MIKROKONTROLER
31
• Watchdog – 12 bitov´y ˇc´ıtaˇc, reset, pˇreruˇsen´ı, • Real-Time Timer – free running“ 32-bitov´y ˇc´ıtaˇc vteˇrin, intern´ı RC oscil´ator, ” • Parallel I/O Controller – pˇreruˇsen´ı pˇri zmˇenˇe stavu I/O, open-drain, pull-ups, • Peripheral DMA Channel – DMA pro 11 perifer´ı´ı, • USB 2.0 Full-speed, 12 Mb/s, 328 byt˚ u FIFO, • Serial Synchronous Controller – kompatibiln´ı s I2S, • 2× USART, baud rate gener´ator, IrDA m´od, RS-485 m´od, Hardwarov´e ˇr´ızen´ı toku, full-modem na jedn´e lince, • Serial Peripheral Interface – master/slave, 8-16 bit ˇs´ıˇrka, 4x Chip Select, • 3× Timer/Counter – 16 bit˚ u, extern´ı hodinov´e vstupy, • 4× PWM Channel – 16 bit˚ u, • Two Wire Interface – master m´od, kompatibiln´ı s I2C, • 8× ADC – 10 bit˚ u, • implicitn´ı boot program uloˇzen´y ve zvl´aˇstn´ı pamˇeti ROM, kter´y je moˇzn´e kdykoliv obnovit.
Tento mikroprocesor m´a vyveden´ych 32 I/O vodiˇc˚ u, kter´e toleruj´ı TTL u ´ rovnˇe. Vstupn´ı napˇet´ı j´adra je 1,8V, vstupn´ı napˇet´ı pamˇeti a periferi´ı je 3,3V. Pouzdro obsahuje napˇet’ov´y regul´ator 3,3V → 1,8V. Na obr´azku 5.1 je blokov´e schema cel´eho mikrokontrol´eru, procesor je zde zn´azornˇen pouze jako blok.
32
KAPITOLA 5. HARDWARE
TDI TDO TMS TCK
ICE
JTAG SCAN
ARM7TDMI Processor
JTAGSEL
1.8 V Voltage Regulator
System Controller
TST FIQ
VDDCORE
AIC
PCK0-PCK2
PLL
XIN XOUT
OSC
SRAM
Embedded Flash Controller
Address Decoder
Abort Status
Misalignment Detection
PMC
64/32/16/8/4 Kbytes
VDDFLASH
Flash
RCOSC VDDCORE
VDDCORE
512/256/ 128/64/32/16 Kbytes
BOD POR
ROM
Peripheral Data Controller
NRST
APB
WDT
SAM-BA
PIO
RTT DBGU
PDC FIFO
PDC
USB Device
PIOA PDC
PWMC
USART0 PDC PDC
PDC
SSC
PIO
PDC
USART1
Timer Counter PDC
PIO
RXD0 TXD0 SCK0 RTS0 CTS0 RXD1 TXD1 SCK1 RTS1 CTS1 DCD1 DSR1 DTR1 RI1 NPCS0 NPCS1 NPCS2 NPCS3 MISO MOSI SPCK ADTRG AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
PGMRDY PGMNVALID PGMNOE PGMCK PGMM0-PGMM3 PGMD0-PGMD15 PGMNCMD PGMEN0-PGMEN2
Fast Flash Programming Interface
11 Channels
PIT
DRXD DTXD
ERASE
Peripheral Bridge Reset Controller
Transceiver
PLLRC
VDDIO
Memory Controller
PIO
IRQ0-IRQ1
VDDIN GND VDDOUT
TC0
PDC
TC1 SPI
TC2 PDC PDC
TWI
ADC
ADVREF
Obr´azek 5.1: Blokov´e schema mikrokontrol´eru ˇrady AT91SAM7S64-512, pˇrevzato z [8].
DDM DDP
PWM0 PWM1 PWM2 PWM3 TF TK TD RD RK RF TCLK0 TCLK1 TCLK2 TIOA0 TIOB0 TIOA1 TIOB1 TIOA2 TIOB2 TWD TWCK
33
5.2. PCF8563 Peripheral DMA Controller
Zaj´ımavost´ı tohoto obvodu je DMA (Direct Memory Access) kontrol´er, kter´y m˚ uˇze pˇren´aˇset data pˇr´ımo mezi periferiemi a pamˇet´ı. DMA kan´al je pro dan´e periferie organizov´an v p´arech, tedy kaˇzd´emu smˇeru (vys´ıl´an´ı/pˇrij´ım´an´ı) je urˇcen jeden kan´al. Kaˇzd´y kan´al obsahuje dvojici pointer register – counter register a dvojici next pointer register – next counter register. Chceme-li zah´ajit pˇrenos, staˇc´ı do pointer registru zapsat adresu v pamˇeti odkud chceme vys´ılat data (resp. kam pˇrij´ımat) a do counter registru zapsat poˇcet byt˚ u k pˇrenosu (nebo jin´ych jednotek pˇrirozen´ych dan´e periferii). Pˇrenos dat pak jiˇz prob´ıh´a zcela automaticky. Pokaˇzd´e se inkrementuje pointer register a dekrementuje counter register. Na konci se bud’ vyvol´a pˇr´ısluˇsn´e pˇreruˇsen´ı (pokud je povoleno), nebo nahraj´ı nov´e hodnoty z next pointer a next counter registr˚ u, t´ım se opˇet ˇsetˇr´ı intervence procesoru. Pˇri setk´an´ı DMA poˇzadavk˚ u z v´ıce periferi´ı v jeden okamˇzik je uplatnˇena urˇcit´a hierarchie priorit. V´ıce informac´ı je k dispozici v dokumentaci k dan´emu mikrokontrol´eru [8]. Schema spojen´ı mezi periferi´ı a pamˇet´ı pˇres DMA kan´al je naznaˇcen na obr´azku 5.2. Peripheral
DMA Controller
THR
DMA CH 0
RHR
DMA CH 1
Control
Status & Control
Control
Memory Controller
Obr´azek 5.2: DMA pˇr´ıstup pro periferie.
5.2
PCF8563
Tento integrovan´y obvod re´aln´eho ˇcasu (RTC) udrˇzuje pˇresn´y ˇcas a datum (konkr´etnˇe rok, mˇes´ıc, den, hodinu, minutu a vteˇrinu). Jeho hodinov´y sign´al je ˇr´ızen extern´ım krystalem s typickou frekvenc´ı 32.768kHz. Statick´e parametry obvodu jsou: • Maxim´aln´ı vstupn´ı napˇet´ı obvodu je VDDmax = 5.5V, minim´aln´ı je VDDmin = 1.8V
34
KAPITOLA 5. HARDWARE pˇri udrˇzen´ı komunikace na sbˇernici, a VDDmin = 1V pˇri udrˇzen´ı ˇc´ıtaˇce v chodu, kde VDD je vstupn´ı napˇet´ı obvodu. • Vstupn´ı proud ID je ovlivnˇen vstupn´ım napˇet´ım a frekvenc´ı na sbˇernici. Maxim´aln´ı hodnota je ID = 800µA pro fSCL = 400kHz a VDD = 5.5V, kde ID je vstupn´ı proud, VDD je vstupn´ı napˇet´ı a fSCL je hodinov´a frekvence I2 C sbˇernice. Zdrojem tˇechto informac´ı je dokumentace k dan´emu obvodu [21].
5.2.1
I2 C
Tento obvod komunikuje s mikrokontrol´erem po s´eriov´e synchronn´ı dvouvodiˇcov´e 8-bitovˇe orientovan´e sbˇernici I2 C (Inter-Integrated Circuit). Ta je de facto standardem pˇripojen´ı obvod˚ u jako jsou pamˇeti EEPROM, RAM, LCD displeje, analogovˇe digit´aln´ı pˇrevodn´ıky nebo RTC obvody. Sbˇernice je urˇcena pro obousmˇernou komunikaci typu MASTER/SLAVE, skl´ad´a se pouze ze dvou vodiˇc˚ u: • SDA - datov´y I/O vodiˇc, adresa i data, • SCL - hodinov´y sign´al. Tyto vodiˇce je nutn´e pˇripojit na nap´ajec´ı napˇet´ı pˇres pull-up rezistory. SLAVE zaˇr´ızen´ı je adresov´ano bud’to 7-bitovou nebo 10-bitovou vnitˇrn´ı adresou, coˇz urˇcuje poˇcet zaˇr´ızen´ı, kter´e je moˇzn´e na sbˇernici pˇripojit (viz specifikace I2 C sbˇernice [22]). Obvod PCF8563 m´a pevnou 7-bitovou adresu (osm´y bit vˇzdy urˇcuje z´apis, nebo ˇcten´ı), pˇri komunikaci se chov´a jako standardn´ı EEPROM. Jeho pamˇet’ je rozdˇelena na ˇsestn´act 8-bitov´ych registr˚ u obsahuj´ıc´ıch stavov´e, kontroln´ı, ˇcasov´e a alarmov´e registry. acknowledgement from slave
idth
S
SLAVE ADDRESS
0 A
R/W
acknowledgement from slave
WORD ADDRESS
A
DATA
acknowledgement from slave A
P
n bytes
auto increment memory word address
Obr´azek 5.3: Komunikaˇcn´ı schema na sbˇernici I2 C, pˇrevzato z [21].
´ 5.3. NAVRH HARDWARU
35
Komunikace je vˇzdy navozena masterem startovac´ı sekvenc´ı, n´asleduje nepovinn´a vnitˇrn´ı adresa c´ılov´eho zaˇr´ızen´ı a data. U kaˇzd´eho bytu je potvrzov´an pˇr´ıjem. Z´akladn´ı komunikaˇcn´ı diagram je na obr. 5.3. Pˇrenos vˇzdy zaˇc´ın´a adresou SLAVE zaˇr´ızen´ı, n´asleduje adresa v jeho vnitˇrn´ı pamˇeti a data.
5.3
N´ avrh hardwaru
N´avrh hardwarov´e ˇc´asti vych´az´ı ˇc´asteˇcnˇe z v´yvojov´e desky SAM7S-P64 od firmy Olimex (viz [24]). Obvodov´e schema cel´eho zaˇr´ızen´ı je v pˇr´ıloze A.
5.3.1
RS-232 periferie
Zaˇr´ızen´ı obsahuje dva porty RS-232 pˇripojen´e k UART periferi´ım mikroprocesoru pˇres budiˇce sbˇernice resp. pˇrevodn´ıky napˇet’ov´ych u ´ rovn´ı (TTL ↔ EIA-232), konkr´etnˇe jde o dva obvody ADM3203, kaˇzd´y z nichˇz obsahuje dva dvousmˇern´e kan´aly. Tyto integrovan´e obvody pracuj´ı se vstupn´ım napˇet´ım 3.3V, z extern´ıch souˇc´astek je nutn´ych pouze pˇet kondenz´ator˚ u s kapacitou 100nF, viz dokumentace k ADM3202 [1].
5.3.2
JTAG
Zaˇr´ızen´ı je doplnˇeno standardn´ım 20-pinov´ym konektorem typu JTAG ARM (viz [33]) pro programov´an´ı vnitˇrn´ı flash pamˇeti mikroprocesoru a on-chip debuggov´an´ı. Tento konektor obsahuje kromˇe z´akladn´ıch JTAG sign´al˚ u: • TDI (input), TDO (output), TCK (input), TMS (input) – datov´e, hodinov´e komunikaˇcn´ı sign´aly, • nTRST (input/output) – reset debuggovac´ı jednotky, tak´e sign´aly: • nSRST (System Reset – input/output) – reset cel´eho syst´emu, • RTCK (Return Test Clock – output) – synchronizace pˇri velk´ ych zmˇen´ach pracovn´ı frekvence mikroprocesoru,
36
KAPITOLA 5. HARDWARE • DBGRQ (Debug Request – input) a DBGACK (Debug Acknowledge – output) – poˇzadavek a ˇr´ızen´ı debuggov´an´ı. Sign´aly DBGRQ a DBGACK jsou v j´adrech ARM externˇe vyvedeny pouze ve v´yji-
meˇcn´ych pˇr´ıpadech, vˇetˇsinou jsou prov´adˇeny internˇe jako JTAG sign´aly (viz [4]). Stejnˇe tak je tomu u mikroprocesor˚ u rodiny AT91. Tyto sign´aly tedy z konektoru nejsou d´ale vyvedeny. Zpˇetnovazebn´ı sign´al RTCK, kter´y ˇr´ıd´ı frekvenci TCK v z´avislosti na frekvenci mikroprocesoru nen´ı pouˇz´ıv´an v j´adrech ARM7TDMI, nam´ısto toho je tˇreba zvolit dostateˇcnˇe n´ızkou frekvenci TCK, aby bylo moˇzn´e komunikovat i pˇri niˇzˇs´ıch frekvenc´ıch mikroprocesoru. Tento sign´al je v naˇsem zaˇr´ızen´ı pˇr´ımo spojen s TCK. Mikroprocesory ˇrady AT91 nemaj´ı zv´aˇst’ vyveden pin pro reset debuggovac´ı jednotky, ale pouze pin pro reset cel´eho syst´emu vˇcetnˇe vˇsech periferi´ı. Tento open-drain vstupnˇe/v´ystupn´ı pin (NRST) m˚ uˇze b´yt ovl´ad´an bud’to vnitˇrnˇe resetovac´ı jednotkou jako reset vˇsech periferi´ı a sign´al pro extern´ı debuggovac´ı zaˇr´ızen´ı, nebo externˇe pro reset cel´eho syst´emu (viz dokumentace mikrokontrol´eru [8] a blokov´e schema 5.1). JTAG sign´al nTRST je tedy bez´ uˇceln´y, pouˇzit´y je pouze sign´al nSRST, kter´y je pˇr´ımo pˇripojen k pinu NRST (s vnitˇrn´ım permanentn´ım pull-up rezistorem). Cel´e zaˇr´ızen´ı je tak´e doplnˇeno resetovac´ım tlaˇc´ıtkem zapojen´ym mezi zm´ınˇen´y vodiˇc a zem.
5.3.3
V´ yvojov´ e a testovac´ı piny
Na DPS jsou z mikrokontrol´eru tak´e vyvedeny piny • ERASE – pro smaz´an´ı obsahu flash pamˇeti, • TST – pro obnoven´ı boot programu SAM-BA v pamˇeti flash, • JTAGsel (BDS) – pro boundary scan, vˇsechny tyto piny obsahuj´ı permanentn´ı vnitˇrn´ı pull-down rezistor, viz dokumentace mikrokontrol´eru [8].
5.3.4
LCD ˇ radiˇ c a konektor
Pouˇzit´y LCD displej Displaytech 64128 je ˇr´ızen ˇradiˇcem KS0713 . Tento ˇradiˇc jiˇz obsahuje obvody nutn´e pro buzen´ı samotn´eho displeje, stejnˇe jako vlastn´ı hodinov´y sign´al.
´ 5.3. NAVRH HARDWARU
37
Potˇrebuje pouze jedno nap´ajen´ı pro buzen´ı logiky i displeje, a to 3.3 V. Minimalizuje se tak poˇcet extern´ıch souˇc´astek cel´eho displeje (ˇz´adn´e nejsou nutn´e). ˇ c tak´e obsahuje vnitˇrn´ı pamˇet’, kter´a je pˇresn´ym logick´ym otiskem zobrazen´eho Radiˇ pole, coˇz zjednoduˇsuje uvaˇzov´an´ı a n´avrh ovladaˇce. S mikrokontrol´erem m˚ uˇze komunikovat pomoc´ı: • paraleln´ıho rozhran´ı – 14 sign´alov´ych vodiˇc˚ u, v´ybˇer ze dvou reˇzim˚ u (6800, 8080), z´apis i ˇcten´ı do vnitˇrn´ı grafick´e pamˇeti, • s´eriov´eho rozhran´ı – 5 sign´alov´ych vodiˇc˚ u, jednoduˇsˇs´ı protokol, pouze z´apis do vnitˇrn´ı grafick´e pamˇeti. Kv˚ uli jednoduchosti a menˇs´ımu poˇctu nutn´ych vodiˇc˚ u bylo pouˇzito s´eriov´e rozhran´ı. To je zaloˇzeno na pˇeti sign´alech: • SID (Serial Data Input), • SCLK (Serial Clock), • CS (Chip Select), • RESET, • DI (Data/Instruction). Informace jsou pˇrevzaty z dokumentace k displeji Displaytech 64128 [18] a k ˇradiˇci KS0713 [10]. Cel´e rozhran´ı displeje vˇcetnˇe nap´ajen´ı a v´yvod˚ u podsvˇecovac´ı diody je um´ıstˇeno do standardn´ıho 10-pinov´eho konektoru, aby bylo moˇzn´e um´ıstit displej libovolnˇe na konstrukˇcn´ı krabiˇcce.
5.3.5
Ovl´ adac´ı tlaˇ c´ıtka
Uˇzivatelsk´y vstup zaˇr´ızen´ı tvoˇr´ı ˇctveˇrice ovl´adac´ıch tlaˇc´ıtek, kaˇzd´e z nichˇz je pˇripojeno mezi zem a I/O pin mikroprocesoru s vnitˇrn´ım pull-up rezistorem. Z praktick´ych d˚ uvod˚ u jsou fyzicky um´ıstˇeny na samostatn´e DPS zpod pˇredn´ıho panelu konstrukˇcn´ı krabiˇcky a k hlavn´ı DPS pˇripojeny pˇres standardn´ı 6 pinov´y konektor obsahuj´ıc´ı tak´e v´yvody pro moˇzn´e podsv´ıcen´ı tlaˇc´ıtek.
38
KAPITOLA 5. HARDWARE
5.3.6
Spotˇ reba zaˇ r´ızen´ı
Celkovou teoretickou spotˇrebu zaˇr´ızen´ı m˚ uˇzeme odhadnout na z´akladˇe statick´ych parametr˚ u pouˇzit´ych souˇc´astek. Majoritn´ı pod´ıl na celkov´e spotˇrebˇe bude m´ıt: • mikroprocesor – max ICORE =50mA, ˙ max IF LASH =10mA ˙ (viz [8]), • budiˇce RS-232 – zkratov´y proud na v´ystupu vys´ılaˇce je IT xSC =15mA ˙ (viz [1]), • Secure Digital karta – proud pˇri z´apisu do pamˇeti je IW =75mA ˙ (viz [31]), • podsvˇecovac´ı led diody displeje a tlaˇc´ıtek – odpory omezuj´ı toto celkov´e maximum na pˇribliˇznˇe ILED =100mA. ˙ Celkov´y maxim´aln´ı vstupn´ı proud do zaˇr´ızen´ı tedy m˚ uˇze b´yt teoreticky okolo IC =300mA ˙ (skuteˇcn´a hodnota je o mnoho menˇs´ı).
5.3.7
Nap´ ajen´ı
Veˇsker´e logick´e obvody byly vybr´any pro vstupn´ı napˇet´ı VDD = 3.3V. Nap´ajen´ı obvodu je zajiˇstˇeno pouze jedn´ım line´arn´ım regul´atorem TPS79533 (tzv. Low-dropout linear voltage regulator, LDO). V´ystupn´ı napˇet´ı tohoto regul´atoru je samozˇrejmˇe VOU T = 3.3V, vstupn´ı napˇet´ı VIN m˚ uˇze b´yt v rozsahu od VOU T + VDO aˇz 6V, kde VDO je tzv. Drop-out Voltage (minim´aln´ı rozd´ıl v´ystupn´ıho a vstupn´ıho napˇet´ı), kter´e u obvodu TPS79533 ˇcin´ı pouze VDO = 110mV pˇri pln´em zat´ıˇzen´ı (viz dokumentace obvodu [15]). Nap´ajen´ı cel´eho zaˇr´ızen´ı je moˇzn´e bud’to extern´ım stejnosmˇern´ym zdrojem (5V–6V), z USB portu (5V), nebo ze tˇr´ı bateri´ı typu LR3 (celkem 4.5V). Vodiˇce z tˇechto tˇr´ı zdroj˚ u jsou pˇres ochrann´e diody D1, D2 a D3 spojeny do jednoho uzlu a pˇres hlavn´ı vyp´ınaˇc svedeny do LDO (viz schema obvodu v pˇr´ıloze A). Toto ˇreˇsen´ı jednak zaruˇcuje, ˇze proud nem˚ uˇze prot´ekat mezi zdroji, a z´aroveˇ n je vˇzdy vybr´an zdroj s nejvyˇsˇs´ım napˇet´ım (napˇr. pˇri pˇripojen´ı nap´ajen´ı z USB se automaticky odpoj´ı baterie).
5.3.8
RTC
Napˇet’ov´y vstup obvodu re´aln´eho ˇcasu je spojen s katodami vstupn´ıch ochrann´ych diod, coˇz zaruˇcuje nap´ajen´ı obvodu i pˇri vypnut´ı zaˇr´ızen´ı (z baterie pˇri odpojen´ı vnˇejˇs´ıch zdroj˚ u).
´ 5.3. NAVRH HARDWARU
5.3.9
39
Velikost chlad´ıc´ı plochy LDO
Line´arn´ı napˇet’ov´y regul´ator vyd´av´a tepelnou energii, jej´ıˇz velikost je u ´ mˇern´a celkov´e promrhan´e“ energii, tedy rozd´ılu vstupn´ıho a v´ystupn´ıho napˇet´ı (viz dokumentace k TPS795xx ” [15]). Takto vyd´avanou pr˚ umˇernou energii je moˇzn´e vyj´adˇrit jako PD max = (VIN − VOU T ) · IOU T + VIN · IQ ,
(5.1)
kde PD max (Dissipated Power) je v´ykon promarnˇen´e energie, VIN resp. VOU T je vstupn´ı resp. v´ystupn´ı napˇet´ı regul´atoru, IOU T je v´ystupn´ı proud a IQ (Quiescent Current) je klidov´y proud. Tuto energii lze odv´adˇet bud’to d˚ ukladn´ym odvˇetr´av´an´ım, pˇr´ıdavn´ym chladiˇcem, nebo dostateˇcnˇe velkou mˇedˇenou plochou pod regul´atorem, coˇz je n´aˇs pˇr´ıpad. Potˇrebnou velikost takov´e plochy lze odhadnout z grafu 5.4, kde RΘJA je tzv. tepeln´a rezistence mezi spojem a pouzdrem integrovan´eho obvodu, kterou lze odhadnout jako RΘJA =
TJ − TA , PD max
(5.2)
kde TJ je teplota chlazen´eho spoje a TA je teplota okol´ı.
RθJA − Thermal Resistance (5C/W)
180 160
No Air Flow
140 120 100 80 60 40 20 0 0.1
1 PCB Copper Area (in2)
10
Obr´azek 5.4: Z´ avislost tepeln´e rezistence na velikosti chlad´ıc´ı plochy LDO.
Vstupn´ı napˇet´ı VIN uvaˇzujeme maxim´alnˇe VIN max = 6V, v´ystupn´ı napˇet´ı je VOU T = 3.3V. Maxim´aln´ı v´ystupn´ı proud uvaˇzujeme okolo IOU T = 300mA (viz kapitola 5.3.6) a hodnota IQ v rovnici 5.1 se pro obvod TPS79533 pohybuje okolo IQ =1µA, ˙ m˚ uˇzeme ji tedy zanedbat.
40
KAPITOLA 5. HARDWARE Budeme-li uvaˇzovat TJ = 125◦ C a napˇr. TA = 25◦ C, teplotn´ı rezistenci spoˇc´ıt´ame jako RΘJA =
(VIN
TJ − TA ◦ =120 ˙ C/W − VOU T ) · IOU T
(5.3)
a obsah potˇrebn´e chlad´ıc´ı plochy bude pˇribliˇznˇe Shs = 1.5cm2 .
(5.4)
Kapitola 6 Software V t´eto kapitole pˇribl´ıˇz´ıme detaily softwarov´eho ˇreˇsen´ı naˇs´ı u ´ lohy. Nejdˇr´ıve probereme spouˇstˇec´ı sekvenci procesoru a jeho nutn´a nastaven´ı. D´ale pak model pˇreruˇsen´ı, popis implementovan´ych ovladaˇc˚ u a utilit a na z´avˇer koncepci hlavn´ı aplikace.
6.1
Architektura
Zvolili jsme tedy architekturu bez operaˇcn´ıho syst´emu, tzv. bare-metal, rozdˇelen´ı programu do logick´ych ˇc´ast´ı najdeme v kapitole 3.2. Nejd˚ uleˇzitˇejˇs´ı n´ızko´ urovˇ nov´e ˇc´asti programu jsou zaloˇzeny na s´erii ˇcl´ank˚ u [20] Mirko Samka ze spoleˇcnosti Quantum Leaps. Z tˇechto zdroj˚ u je pouˇzit pˇredevˇs´ım upraven´y startup (startovac´ı) k´od, upraven´y model pˇreruˇsen´ı a struktura z´asobn´ıku vˇcetnˇe jeho um´ıstˇen´ı v pamˇeti. Velikosti, adresy pamˇet´ı (ROM, RAM), um´ıstˇen´ı jednotliv´ych ELF sekc´ı (kapitola 4.1.1) a odvozen´e d˚ uleˇzit´e glob´aln´ı promˇenn´e jsou definov´any v linkerscriptu (kapitola 4.1.2), fyzick´e um´ıstˇen´ı z´asobn´ık˚ u je definov´ano ve startup k´odu.
6.2
Startup k´ od
Procesor pˇri spuˇstˇen´ı automaticky skoˇc´ı do pamˇeti na adresu 0x0 (v tu chv´ıli ROM, viz 6.2.2), kde je um´ıstˇen assemblerovsk´y k´od, generick´y pro ARM platformu. Na zaˇc´atku je samozˇrejmˇe um´ıstˇena tabulka vektor˚ u pˇreruˇsen´ı (doˇcasn´a), kde prvn´ı poloˇzkou je skok do resetovac´ı procedury. 41
42
KAPITOLA 6. SOFTWARE reset
Low level init
ASM startup Board specific init
Clock, power settings Interrupt vector table , Memory remap
Fills secondary jump table, registers default IRQ, FIQ and Exception handlers
MAIN PROGRAM
Obr´azek 6.1: Startup sekvence.
Resetovac´ı sekvence je naznaˇcena na obr´azku 6.1 a pops´ana n´ıˇze. Pˇred skokem do hlavn´ı aplikace se nejprve provede n´ızko´ urovˇ nov´a inicializace, pot´e nastaven´ı pˇr´ısluˇsn´e dan´e platformˇe a nastaven´ı z´asobn´ık˚ u a RAM sekc´ı.
6.2.1
Low level init
Resetovac´ı procedura nejdˇr´ıve provede skok do tzv. low level inicializace, kter´a nen´ı generick´a, je z´avisl´a na specifick´e ARM platformˇe. Zde se provede d˚ uleˇzit´e nastaven´ı hodin, power managementu a napln´ı se v pamˇeti RAM prim´arn´ı i sekund´arn´ı tabulka vektor˚ u pˇreruˇsen´ı (kapitola 6.2.3) doˇcasn´ymi hodnotami. Nakonec se provede d˚ uleˇzit´y krok, tzv. pˇremapov´an´ı pamˇeti (memory remap).
6.2.2
Memory remap
Mikroprocesory rodiny AT91SAM7S obsahuj´ı dva typy pamˇet´ı, permanentn´ı pomalejˇs´ı flash ROM a rychlejˇs´ı SRAM. Tyto pamˇeti jsou v kaˇzd´em okamˇziku pˇr´ıstupn´e na adres´ach 0x100000 (ROM) a 0x200000 (RAM). Obˇe tyto pamˇeti lze pomoc´ı periferie memory controller stˇr´ıdavˇe mapovat na adresu 0x0. Toho se vyuˇz´ıv´a k um´ıstˇen´ı vektor˚ u pˇreruˇsen´ı do rychl´e RAM, coˇz je v´yhodou v moˇznosti pˇreprogramov´an´ı vektoru pˇreruˇsen´ı, rychlejˇs´ım odezv´am a niˇzˇs´ı spotˇrebˇe.1 viz obr´azek 6.2. 1
Ne vˇsechny ARM procesory podporuj´ı pˇremapov´an´ı pamˇeti, nˇekter´e dovoluj´ı pˇremapovat pouze ˇca´st
pamˇeti. Napˇr. procesory rodiny Philips LPC dovoluj´ı na adresu 0x0 namapovat pouze 64 byt˚ u pamˇeti RAM, coˇz je ale dostateˇcn´e pro prim´ arn´ı i sekund´ arn´ı tabulku vektor˚ u pˇreruˇsen´ı, viz [20].
´ 6.2. STARTUP KOD
43
Flash ROM
RAM stacks
free space
heap .data section loader .bss section
.data section .text section .fastcode section secondary jump table startup interrupt vector table
0x100000 0x000000
Interrupt vector table
0x200000 0x000000
Obr´azek 6.2: Rozm´ıstˇen´ı ˇc´ast´ı k´odu v ROM a RAM.
6.2.3
Prim´ arn´ı a sekund´ arn´ı tabulka vektor˚ u pˇ reruˇ sen´ı
Na adrese 0x0 se nach´az´ı tabulka vektor˚ u pˇreruˇsen´ı s osmi pozicemi (viz kapitola 5.1.1). Na kaˇzd´e jej´ı pozici by se mˇela nach´azet instrukce skoku do obsluˇzn´e rutiny pˇreruˇsen´ı. Pouˇziteln´a skokov´a instrukce (B label, viz [26]) ale dovoluje pouze relativn´ı skok do ± 25-bitov´e vzd´alenosti. Z toho d˚ uvodu je ihned za prim´arn´ı tabulkou um´ıstˇena tzv. sekund´arn´ı tabulka vektor˚ u pˇreruˇsen´ı obsahuj´ıc´ı adresy obsluˇzn´ych rutin. V prim´arn´ı tabulce jsou pak instrukce LDR pc, [pc, #0x18], kter´e do registru pc (program counter ) zkr´atka zkop´ıruj´ı adresu um´ıstˇenou na pˇr´ısluˇsn´e pozici v sekund´arn´ı tabulce. Tato adresa pak m˚ uˇze b´yt jak´akoliv 32-bitov´a hodnota. V´yhodou sekund´arn´ı tabulky je tak´e moˇznost jednoduch´e zmˇeny obsluˇzn´e rutiny pouh´ym pˇrepisem adresy v sekund´arn´ı tabulce.
6.2.4
Nastaven´ı z´ asobn´ık˚ u a RAM sekc´ı
Resetovac´ı sekvence pokraˇcuje po low level inicializaci nastaven´ım z´asobn´ık˚ u pro vˇsechny procesorov´e m´ody. Procesor je vˇzdy pˇrepnut do dan´eho m´odu a do registru SP (Stack
44
KAPITOLA 6. SOFTWARE
Pointer ), kter´y je r˚ uzn´y pro jednotliv´e m´ody, je vloˇzena ˇz´adan´a hodnota. Pouˇzit´y model poˇc´ıt´a se z´asobn´ıky um´ıstˇen´ymi u ´plnˇe na konci pamˇeti RAM, rostouc´ımi smˇerem dol˚ u, pˇriˇcemˇz z´asobn´ık pro User m´od (uˇzivatelsk´y m´od pˇr´ısluˇsn´y hlavn´ı aplikaci) je um´ıstˇen nejn´ıˇze a roste smˇerem do prostoru haldy, viz obr´azek 6.2. Velikosti z´asobn´ık˚ u jsou definov´any pomoc´ı maker ve startup k´odu. ELF sekce, kter´e maj´ı b´yt um´ıstˇeny v pamˇeti RAM (viz kapitola 4.1.1), jsou pot´e nastaveny pomoc´ı promˇenn´ych z linkerscriptu. Sekce .data (promˇenn´e) a .fastcode (kritick´e ˇc´asti k´odu) jsou zkop´ırov´any z ROM zavadˇeˇc˚ u do RAM a pro sekci .bss (neinicializovan´e promˇenn´e) je v pamˇeti RAM vyhrazen a smaz´an potˇrebn´y prostor, viz kapitola 4.1.2.
6.2.5
Model pˇ reruˇ sen´ı
Rodina procesor˚ u ARM podporuje dva typy pˇreruˇsen´ı (IRQ a FIQ) a nˇekolik druh˚ u v´yjimek (viz kapitola 5.1.1). Mikrokontrol´ery rodiny AT91SAM7S podporuj´ı nˇekolik zdroj˚ u IRQ a jeden zdroj FIQ pˇreruˇsen´ı. Obsahuj´ı tak´e periferii Advanced Interrupt Controller (AIC), kter´a podporuje tzv. auto-vectoring obsluˇzn´ych rutin pˇreruˇsen´ı. Ke kaˇzd´emu typu pˇreruˇsen´ı je v t´eto periferii pˇr´ımo registrov´ana obsluˇzn´a funkce, kter´a m˚ uˇze b´ yt vol´ana standardn´ım jednoduch´ym zp˚ usobem z IRQ (FIQ) pozice prim´arn´ı tabulky vektor˚ u pˇreruˇsen´ı, viz dokumentace mikrokontrol´eru [8]. Tyto obsluˇzn´e funkce ale nemohou b´yt obyˇcejn´ymi C funkcemi. Mus´ı se deklarovat se speci´aln´ım atributem jako IRQ (FIQ) handler. Jejich k´od je pak kompil´atorem doplnˇen o vstupn´ı a v´ystupn´ı sekvenci, kter´a uchov´a ˇc´ast registr˚ u na z´asobn´ıku. Tento model bohuˇzel nen´ı vhodn´y pro vnoˇren´e pˇreruˇsen´ı, protoˇze nejsou uloˇzeny vˇsechny registry potˇrebn´e pro vnoˇren´ı dalˇs´ıho pˇreruˇsen´ı, pˇredevˇs´ım nen´ı z´alohov´an registr SPSR (Stored Program Status Register ), viz [9] a [6]. Mirko Samek proto navrhuje v jiˇz zm´ınˇen´em ˇcl´anku [20] model zahrnuj´ıc´ı v´yhody vnoˇren´ych pˇreruˇsen´ı s vyuˇzit´ım vektor˚ u v AIC, kde obsluˇzn´e rutiny mohou b´yt obyˇcejn´e C funkce. Tento model nav´ıc zachov´av´a priority jednotliv´ych zdroj˚ u IRQ pˇreruˇsen´ı definovan´e v AIC. Na obr´azku 6.3 je zn´azornˇen zm´ınˇen´y proces obsluhy pˇreruˇsen´ı. Pˇri ud´alosti pˇreruˇsen´ı skoˇc´ı program do generick´e assemblerovsk´e obalov´e“ funkce, ” kter´a uloˇz´ı na z´asobn´ık vˇsechny potˇrebn´e registry vˇc. SPSR, pot´e skoˇc´ı do obalov´e“ funkce ” specifick´e pro konkr´etn´ı aplikaci. Tato funkce povol´ı pˇreruˇsen´ı (t´ım umoˇzn´ı vnoˇren´ı dalˇs´ıho
45
6.3. HARDWARE ABSTRACTION LAYER
Secondary vector table
IRQ MAIN LOOP
Primary vector table
AIC vector
Generic ASM IRQ wrapper function
Board specific IRQ wrapper
C handler
Obr´azek 6.3: Proces obsluhy pˇreruˇsen´ı vyuˇz´ıvaj´ıc´ı obalov´e“ funkce. ”
pˇreruˇsen´ı) a zavol´a obsluˇznou C funkci pˇres ukazatel, kter´y je uloˇzen v AIC pro pˇr´ısluˇsn´y zdroj pˇreruˇsen´ı. Tento model je v naˇsem programu pouˇz´ıv´an pro vˇsechny druhy pˇreruˇsen´ı a v´yjimek.
6.2.6
Inicializace specifick´ a dan´ e aplikaci
Proces vyznaˇcen´y na obr´azku 6.1 jako board specific init pak vypln´ı sekund´arn´ı tabulku vektor˚ u pˇreruˇsen´ı ukazateli na assemblerovsk´e wrapper“ funkce (viz kapitola 6.2.5) a ” nastav´ı implicitn´ı obsluhy v AIC na externˇe definovan´e uˇzivatelsk´e funkce, viz pˇr´ıloha B.
6.3
Hardware Abstraction Layer
Pˇri programov´an´ı ve vyˇsˇs´ım jazyce (napˇr. jazyk C) je v´yhodn´e pouˇz´ıt urˇcitou abstrakci pˇr´ıstupu k hardwaru. V´ysledn´y k´od je pak pˇrehlednˇejˇs´ı, bezpeˇcnˇejˇs´ı a je moˇzn´e jej snadno a rychle modifikovat. Hardwarovou abstrakci m˚ uˇzeme rozdˇelit do nˇekolika vrstev, kter´ymi m˚ uˇze b´yt: 1. pojmenov´an´ı perifern´ıch registr˚ u, d˚ uleˇzit´ych pamˇet’ov´ych m´ıst, a vytvoˇren´ı jejich trivi´aln´ıch logick´ych struktur, 2. z´akladn´ı funkce pro n´ızko´ urovˇ nov´e nastaven´ı periferi´ı a z´akladn´ı perifern´ı ˇctec´ı a z´apisov´e funkce, 3. vyˇsˇs´ı uˇzivatelsky pˇr´ıvˇetiv´a spr´ava periferi´ı, jednoduch´e ovladaˇce periferi´ı obsaˇzen´ych na ˇcipu.
46
KAPITOLA 6. SOFTWARE Nˇekter´e ˇc´asti (zejm´ena prvn´ı dvˇe) b´yvaj´ı realativnˇe dostupn´e od v´yrobce. Tˇret´ı ˇc´ast
je vˇetˇsinou z´aleˇzitost´ı uˇzivatele. V r´amci t´eto pr´ace byla rozpracov´ana knihovna obsahuj´ıc´ı zm´ınˇenou funkˇcnost pro vybran´e periferie. Jako z´aklad byla pouˇzita knihovna maker a jednoduch´ych inline funkc´ı (AT91lib) od spoleˇcnosti Atmel, vydan´a v r´amci AT91SAM7S Evaluation Kit Software Package [7]. Vybran´e ˇc´asti byly setˇr´ıdˇeny, upraveny a doplnˇeny. V r´amci v´yˇse zm´ınˇen´eho bodu 3 byla knihovna doplnˇena napˇr. funkcemi, kter´e zjednoduˇsuj´ı spr´avu ˇcasovaˇc˚ u a funkcemi pro pˇrehlednou spr´avu pˇreruˇsen´ı a jejich obsluˇzn´ych rutin, v´ıce v pˇr´ıloze B. ´ Uplnost ani detailn´ı popis v´ysledn´e knihovny nen´ı u ´ˇcelem t´eto pr´ace.
6.4
Ovladaˇ ce extern´ıch periferi´ı
V t´eto kapitole nast´ın´ıme ˇreˇsen´ı ovladaˇc˚ u vybran´ ych extern´ıch periferi´ı. Podrobnosti jsou v pˇr´ıloze B. Vˇsechny ovladaˇce jsou nadstavbou nad hardwarovou abstrakc´ı, popsanou v kapitole 6.3.
6.4.1
LCD
V naˇsem zaˇr´ızen´ı je pouˇzit LCD displej s ˇradiˇcem KS0713 (viz kapitola 3.1.2). Ten je s mikrokontrol´erem spojen pˇres s´eriov´e rozhran´ı. V tomto reˇzimu nelze z pamˇeti displeje ˇc´ıst, lze jen zapisovat. Z toho d˚ uvodu obsahuje n´aˇs softwarov´y ovladaˇc grafickou pamˇet’, zrcadlovou k vnitˇrn´ı pamˇeti ˇradiˇce. Displej m´a rozliˇsen´ı 128×64 pixel˚ u, nutn´a velikost grafick´e pamˇeti je proto 1024 byt˚ u. ˇ c KS0713 nepodporuje textov´y reˇzim, proto je ovladaˇc opatˇren jeho emulac´ı. Radiˇ Tento reˇzim vyuˇz´ıv´a extern´ı font obsahuj´ıc´ı vˇsechny z´akladn´ı ASCII znaky. Zobrazovat jednotliv´e znaky pak lze napˇr. jednoduˇse pomoc´ı funkce void lcd putchar(char c). Velikost ˇr´adkov´an´ı a ˇs´ıˇrka sloupce je pevn´a a vych´az´ı z organizace vnitˇrn´ı pamˇeti ˇradiˇce a ze zp˚ usobu komunikace. V´yhodou textov´eho reˇzimu je rychlost a jednoduchost, nev´yhodou jsou pevn´e atributy zobrazovan´eho textu. Podporu pro tento reˇzim lze zapnout pˇri kompilov´an´ı, v´ıce v softwarov´e dokumentaci v pˇr´ıloze B. V grafick´em reˇzimu (pouˇz´ıvan´em v naˇs´ı aplikaci) nen´ı dostupn´y ˇz´adn´y implicitn´ı font
ˇ EXTERN´ICH PERIFERI´I 6.4. OVLADACE
47
ani funkce pro psan´ı znak˚ u. Implementace t´eto funkˇcnosti je pak jiˇz na uˇzivateli. Veˇsker´e zmˇeny v grafick´e pamˇeti ovladaˇce je moˇzn´e jednor´azovˇe aktualizovat na displej, pˇriˇcemˇz lze obnovit cel´y displej, nebo jen nˇekterou jeho ˇc´ast, viz pˇr´ıloha B.
6.4.2
RTC
Ovladaˇc RTC obvodu je kombinac´ı obecn´eho API a ovladaˇce konkr´etn´ıho obvodu tj. PCF8563, popsan´eho n´ıˇze. Toto API napˇr. obsahuje datovou strukturu rtc t, kterou je moˇzn´e jednoduˇse naplnit aktu´aln´ımi hodnotami data a ˇcasu pomoc´ı funkce void rtc read(rtc t *rtc), viz pˇr´ıloha B. Tato funkce naˇcte aktu´aln´ı data z RTC obvodu, kter´e pˇrekonvertuje z BCD k´odu do decim´aln´ıho, a napln´ı jimi danou strukturu. API tak´e obsahuje funkci, kter´a navr´at´ı zform´atovan´ y v´ystup do podoby ˇcasov´e znaˇcky pouˇzit´e v z´aznamu viz kapitola 6.6.4. PCF8563 Obvod PCF8563 komunikuje s mikrokontrol´erem po sbˇernici I2 C, pˇripojen´e k periferii TWI (Two-Wire Interface). API ovladaˇce podporuje pouze z´akladn´ı ˇctec´ı a z´apisov´e funkce. Vnitˇrn´ı ukazatel do pamˇeti obvodu lze nastavit, nen´ı tedy nutn´e pokaˇzd´e ˇc´ıst jeho celou vnitˇrn´ı pamˇet’.
6.4.3
Secure Digital
Pro komunikaci s pamˇet’ovou kartou byl pouˇzit upraven´y ovladaˇc obsaˇzen´y v knihovnˇe EFSL (kapitola 4.5). Tento ovladaˇc vyuˇz´ıv´a SPI periferii. Jeho u ´ pravy zahrnuj´ı: • pouˇzit´ı hardwarov´e abstrakce (kapitola 6.3), • doplnˇen´ı o detekci vloˇzen´ı karty (Card Detect pin) a detekci ochrany proti z´apisu (Write Protected pin), • moˇznost pouˇz´ıt DMA kan´al pro z´apis/ˇcten´ı cel´eho sektoru (nastaven´ı pˇri kompilaci).
48
KAPITOLA 6. SOFTWARE Tento ovladaˇc implementuje fyzickou vrstvu SPI SD protokolu (dle specifikace [19])
pro SD karty typu Standard Capacity, tj. do kapacity 2 GB. Karty s vˇetˇs´ı kapacitou nejsou t´ımto ovladaˇcem rozpozn´any a jsou odm´ıtnuty.
6.5
Ostatn´ı utility
6.5.1
Window
Utilita window slouˇz´ı jako pom˚ ucka, jestliˇze informac´ı na str´ance“ je v´ıce, neˇz je moˇzn´e ” zobrazit na displeji. Okno (window) obsahuje vlastn´ı pamˇet’ pro zobrazovan´a data. Velikost okna m˚ uˇze b´yt vˇetˇs´ı i menˇs´ı, neˇz je rozliˇsen´ı displeje. Kaˇzd´emu oknu pˇr´ısluˇs´ı pouze definovan´a podoblast displeje. V programu je moˇzn´e definovat v´ıce oken, jejichˇz zobrazovan´e oblasti se mohou libovolnˇe pˇrekr´yvat. Uˇzivatel tedy m˚ uˇze m´ıt napˇr. vyhrazeny nez´avisl´e ˇc´asti displeje pro r˚ uzn´e u ´ˇcely, nebo m˚ uˇze m´ıt nˇekolik oken (a jejich oblasti) pˇres sebe a libovolnˇe mezi nimi pˇrep´ınat.
6.5.2
Textbox
Textbox je nadstavbou nad utilitou window a umoˇzn ˇ uje zobrazit text na libovoln´e pozici v jej´ı pamˇeti. Tato utilita vyuˇz´ıv´a extern´ı font, uchov´av´a pouze samotn´y text, nikoliv grafick´a data. Parametry textu (ˇr´adkov´an´ı, mezery mezi znaky) i font je moˇzn´e libovolnˇe nastavit, k dispozici je tak´e napˇr. funkce pro inverzi cel´eho textboxu, vhodn´a pro zv´yraznˇen´ı.
6.5.3
Menu
Tato utilita slouˇz´ı k vytvoˇren´ı kask´adov´eho uˇzivatelsk´eho menu. Kaˇzd´a poloˇzka menu pouˇz´ıv´a k zobrazen´ı vlastn´ı textbox, obsahuje tak´e ˇctveˇrici ukazatel˚ u na nastaviteln´e callback funkce (nahoru, dol˚ u, doleva, doprava).
6.6. HLAVN´I APLIKACE
6.5.4
49
Cyklick´ y buffer
Cyklick´y buffer je speci´aln´ım typem vyrovn´avac´ı pamˇeti typu FIFO (First In, First Out). Vyuˇz´ıv´a datov´e pole a dva ukazatele (producent a konzument). Jestliˇze kter´ykoliv ukazatel naraz´ı na konec datov´eho pole, nastav´ı se opˇet na zaˇc´atek, viz obr´azek 6.4. consumer byte
byte
producer
byte
0
Obr´azek 6.4: Pracovn´ı schema cyklick´eho bufferu.
Pouˇzit´a implementace dovoluje velikost bufferu pouze: Nbf = 2x , x ∈ 1, 2, ...
(6.1)
kde Nbf je velikost bufferu v bytech a x je libovoln´e nenulov´e kladn´e ˇc´ıslo. V´yhoda tohoto omezen´ı (rovnice 6.1) je v rychlosti vnitˇrn´ıch pˇrepoˇct˚ u. Napˇr. rozd´ıl mezi adresou producenta a konzumenta ∆P C lze pak jednoduˇse spoˇc´ıtat pomoc´ı logick´eho ANDu jako: ∆P C = (AP − AC + Nbf ) & M,
(6.2)
kde AP resp. AC je adresa producenta resp. konzumenta a maska M = Nbf − 1. Dan´a implementace tak´e detekuje pˇreteˇcen´ı bufferu.
6.6
Hlavn´ı aplikace
V hlavn´ı aplikaci se pˇred skokem do nekoneˇcn´e smyˇcky nejdˇr´ıve: 1. inicializuj´ı vˇsechny potˇrebn´e periferie a utility, 2. nav´aˇze spojen´ı s extern´ımi periferiemi (SD, RTC, LCD), 3. vygeneruje cel´y strom uˇzivatelsk´eho menu a zobraz´ı hlavn´ı podmenu, 4. nastav´ı obsluhy a povol´ı pˇreruˇsen´ı.
(6.3)
50
KAPITOLA 6. SOFTWARE
6.6.1
Softwarov´ e aspekty ˇ reˇ sen´ı probl´ emu
Zpracov´an´ı dat v t´eto u ´ loze m´a n´asleduj´ıc´ı rysy:
• data ze s´eriov´ych linek pˇrich´az´ı po jednotliv´ych bytech. Tyto byty je nutn´e co nejdˇr´ıve pˇreposlat na protˇejˇs´ı port a zaznamenat.
• Z´apis do souboru (byt’ bez pˇr´ım´eho uloˇzen´ı na m´edium) knihovnou EFSL stoj´ı urˇcit´e fixn´ı ˇcasov´e n´aklady (viz [17]). Je tedy vhodn´e ukl´adat data po vˇetˇs´ıch celc´ıch.
Z tˇechto d˚ uvod˚ u je v´ysledn´y z´aznam pˇripravov´an do vyrovn´avac´ı pamˇeti, ze kter´e je po bloc´ıch ukl´ad´an do c´ılov´eho souboru.
6.6.2
Stavov´ y diagram
Na obr´azku 6.5 je vidˇet z´akladn´ı stavov´y diagram cel´e aplikace. V hlavn´ı nekoneˇcn´e smyˇcce programu se v pˇr´ıpadˇe potˇreby ukl´ad´a obsah vyrovn´avac´ı pamˇeti do pˇripraven´eho souboru (po bloc´ıch definovan´e velikosti). Jako vyrovn´avac´ı pamˇet’ byla zvolena FIFO pamˇet’ ve formˇe cyklick´eho bufferu (kapitola 6.5.4). Pˇreruˇsen´ı hlavn´ı smyˇcky m˚ uˇze zp˚ usobit:
• pˇredevˇs´ım UART periferie pˇr´ıchoz´ım znakem,
• RTT (Real-Time Timer) periferie, kter´a mˇeˇr´ı zvolen´y interval vkl´ad´an´ı ˇcasov´ych znaˇcek,
• zmˇena logick´e hodnoty na vybran´ych extern´ıch I/O pinech, coˇz jsou sign´aly uˇzivatelsk´ych tlaˇc´ıtek a pin detekce vloˇzen´ı (nebo vynd´an´ı) pamˇet’ov´e karty, Card Detect.
6.6. HLAVN´I APLIKACE
power on
51
startup sequence
Main application Initialization
character redirect
save character to buffer
UART interrupt
RTT interrupt
save timestamp to buffer
Main loop while(1) {
saving buffer to memory card
pin interrupt
}
buttons
main menu
card detect
buttons service logging state
sd check
settings settings settings
Obr´azek 6.5: Stavov´ y diagram aplikace.
6.6.3
Tok dat
Tok dat je zˇreteln´y na obr´azc´ıch 6.6 a 6.5. Pˇri pˇreruˇsen´ı periferie RTT se pˇriprav´ı ˇcasov´a znaˇcka z aktu´aln´ıch dat v RTC. Pˇr´ıchoz´ı byte z UART periferie se pˇres DMA uloˇz´ı na urˇcen´e m´ısto a vyvol´a se pˇreruˇsen´ı. Tento byte je ihned pˇresmˇerov´an na DMA kan´al protˇejˇs´ı UART periferie a je uloˇzen (v pˇr´ıpadˇe potˇreby s metadaty – ˇcasov´a znaˇcka, smˇer toku) do vyrovn´avac´ı pamˇeti. Z vyrovn´avac´ı pamˇeti se pak ukl´adaj´ı veˇsker´a fin´aln´ı data pˇres knihovnu EFSL, SD ovladaˇc, DMA kan´al a SPI periferii na pamˇet’ovou kartu.
52
KAPITOLA 6. SOFTWARE
RS-232
UART0
RAM
DMA
RTC driver
I2C
RTC
SD DMA driver
SPI
SD
Main application
cyclic buffer
RS-232
UART1
DMA
EFSL
Obr´azek 6.6: Tok d˚ uleˇzit´ ych dat v r´ amci aplikace a cel´eho zaˇr´ızen´ı.
6.6.4
Popis v´ ysledn´ eho z´ aznamu
Zmˇena smˇeru toku dat je uvozena sekvenc´ı pˇr´ısluˇsnou dan´emu smˇeru, tedy znak line feed a DCE>/DTE> (zkratky odpov´ıdaj´ı typ˚ um zaˇr´ızen´ı podle normy EIA-232D viz standardy ˇ TIA asociace [37]). Casov´ e znaˇcky (hodiny, minuty, vteˇriny) jsou vkl´ad´any ve form´atu . Pro u ´ plnost zde uv´ad´ıme struˇcn´y pˇr´ıklad v´ysledn´eho z´aznamu v souboru na pamˇet’ov´e kartˇe: DCE>message 1 from device 1 DTE>message 1 from device 2 mess<10:35:26>age 2 from device 2 DCE>message 2 from device 1<10:35:27> ...
Kapitola 7 Testov´ an´ı V t´eto kapitole naznaˇc´ıme proveden´e testy zaˇr´ızen´ı a jejich v´ysledky. Nast´ın´ıme tak´e, jak se v´ysledky test˚ u prom´ıtly do fin´aln´ı koncepce.
7.1
Zkouˇsky v zadavatelsk´ e firmˇ e
V zadavatelsk´e firmˇe (viz kapitola 2) bylo zaˇr´ızen´ı otestov´ano na modelu re´aln´eho prostˇred´ı. Zaznamen´avala se komunikace mezi poˇc´ıtaˇcem a sn´ımaˇcem ˇc´arov´ych k´od˚ u. Komunikace se t´ykala konfigurace sn´ımaˇce a sbˇeru dat. Parametry RS-232 linky byly 9600baud, sud´a parita, sedm datov´ych bit˚ u a dva stopbity. Zkouˇsky prok´azaly tyto nedostatky: 1. obˇcasn´e zpoˇzdˇen´ı komunikace, 2. obˇcasn´e vynech´an´ı znaku v komunikaci, 3. zpoˇzdˇen´ı komunikace pˇri I/O pˇreruˇsen´ı, 4. zpoˇzd’ov´an´ı a ztr´aty komunikace pˇri z´aznamu s ˇcasov´ymi znaˇckami.
7.1.1
ˇ sen´ı probl´ Reˇ em˚ u
Software Zpozorovan´e probl´emy byly odstranˇeny u ´ pravami koncepce hlavn´ıho programu. 53
´ ´I KAPITOLA 7. TESTOVAN
54
1. Obˇcasn´e zpoˇzdˇen´ı cel´e komunikace mohlo b´yt zp˚ usobeno prioritami DMA kan´al˚ u. Z dokumentace mikrokontrol´eru AT91SAM7S [8] plyne, ˇze veˇsker´e pˇrij´ımac´ı DMA kan´aly maj´ı vˇetˇs´ı prioritu, neˇz vys´ılac´ı. M˚ uˇze se tedy napˇr. st´at, ˇze pˇri siln´em ˇcten´ı (napˇr. FAT tabulky) z pamˇet’ov´e karty je upˇrednostnˇena SPI pˇred UART periferi´ı. Tento probl´em byl vyˇreˇsen t´ım, ˇze se pouˇzil SPI DMA kan´al pouze pro z´apis. 2. Obˇcasn´e vynech´an´ı znaku v komunikaci bylo zˇrejmˇe zp˚ usobeno mj. zamyk´an´ım pˇreruˇsen´ı pˇri zpracov´an´ı pˇr´ıchoz´ıho znaku, coˇz pˇri kolizi znak˚ u z obou smˇer˚ u m˚ uˇze v´est aˇz ke ztr´atˇe jednoho z nich. Vyuˇzilo se tedy modelu vnoˇren´ych pˇreruˇsen´ı bez jejich zamyk´an´ı a t´ım se odstranil tento d˚ uleˇzit´y probl´em. 3. Pˇr´ıˇcinou zpoˇzdˇen´ı komunikace pˇri I/O pˇreruˇsen´ı zˇrejmˇe byla ˇspatnˇe nastaven´a priˇ sen´ım tedy bylo, d´at nejvyˇsˇs´ı prioritu obsluze pˇr´ıchoz´ıho znaku. orita pˇreruˇsen´ı. Reˇ 4. Probl´emy s pouˇzit´ım ˇcasov´ych znaˇcek byly opˇet d˚ usledkem jen nevhodnˇe nastaven´ych priorit pˇreruˇsen´ı. Hardware Pot´ıˇze vedly vzhledem k jejich d˚ uleˇzitosti tak´e k n´avrhu hardwarov´eho ˇreˇsen´ı nˇekter´ych probl´em˚ u. Celou koncepci zaˇr´ızen´ı je moˇzn´e zmˇenit na pasivn´ı z´aznamn´ık“, kter´y bude ” pouze ˇc´ıst pˇr´ıchoz´ı data, porty vˇsak budou hardwarovˇe propojeny. Z principu se tak odstran´ı i teoretick´y vliv z´aznamn´ıku na komunikaci.1 Tuto u ´ pravu lze prov´est vhodn´ym napojen´ım st´avaj´ıc´ıho z´aznamn´ıku do s´ıtˇe, viz obr´azek 7.1. GND RI RTS CTS DTR DSR DCD RxD TxD
GND RI RTS CTS DTR DSR DCD RxD TxD DATALOGGER
Obr´azek 7.1: Moˇzn´ au ´prava zapojen´ı z´aznamn´ıku do s´ıtˇe.
1
Koncepce aktivn´ıho z´ aznamn´ıku“ byla zvolena s ohledem na dˇr´ıvˇejˇs´ı poˇzadavky na zaˇr´ızen´ı. ”
´ ERE ˇ CN ˇ E ´ TESTY 7.2. ZAV
7.2
55
Z´ avˇ ereˇ cn´ e testy
Testy fin´aln´ı podoby zaˇr´ızen´ı (pouze se softwarov´ymi korekcemi, viz kapitola 7.1) prob´ıhaly s pomoc´ı poˇc´ıtaˇce se dvˇema s´eriov´ymi porty. S v´yhodou byl pouˇzit termin´alov´y program Realterm [28] pro spr´avu a komunikaci pˇres s´eriov´e porty a tak´e vlastn´ı program pro testov´an´ı pˇrenesen´ych dat a z´aznamu, jehoˇz zdrojov´y k´od je v pˇr´ıloze B. Program Realterm se um´ı jednak chovat jako
termin´al“ (tak je moˇzn´e testovat ” z´akladn´ı funkˇcnost napˇr. zad´av´an´ım znak˚ u z kl´avesnice) a tak´e umoˇzn ˇ uje pˇres s´eriov´y port pos´ılat soubory a ukl´adat pˇr´ıchoz´ı data do souboru (ˇc´ımˇz je moˇzn´e testovan´y syst´em dostateˇcnˇe zat´ıˇzit). Soubory je moˇzn´e pos´ılat bud’ kontinu´alnˇe, nebo po ˇr´adc´ıch s definovan´ym ˇcasov´ym odstupem. Funkˇcnost zaˇr´ızen´ı tedy vyzkouˇs´ıme tak, ˇze proti sobˇe vyˇsleme dva soubory. Spr´avnost pˇrenesen´ych dat i z´aznamu pot´e ovˇeˇr´ıme ve zm´ınˇen´em programu. Takov´y pˇrenos je pro z´aznamn´ık n´aroˇcn´y pˇredevˇs´ım proto, ˇze se neust´ale stˇr´ıd´a smˇer toku dat. T´emˇeˇr kaˇzd´y byte tedy mus´ı b´yt doplnˇen o identifik´ator portu (viz kapitola 6.6.4) a t´ım se dos´ahne maxim´aln´ıho moˇzn´eho toku ukl´adan´ych dat. Opakovan´e testy jiˇz neprok´azaly, ˇze by zaˇr´ızen´ı ovlivˇ novalo pr˚ ubˇeh komunikace, pˇrenosy pˇri vˇsech rychlostech a nastaven´ıch byly korektn´ı. Z´aznam dat je pˇri tomto testu korektn´ı aˇz do rychlosti 38400baud. Pˇri vyˇsˇs´ıch rychlostech m˚ uˇze doj´ıt k pˇreteˇcen´ı vyrovn´avac´ı pamˇeti a z´aznam je pak neplatn´y (detekce pˇreteˇcen´ı se prov´ad´ı v kaˇzd´em pˇr´ıpadˇe a uˇzivatel m´a tuto informaci k dispozici, viz dokumentace zaˇr´ızen´ı v pˇr´ıloze B). Pˇreteˇcen´ı vyrovn´avac´ı pamˇeti je vˇsak pˇri vˇsech rychlostech v re´aln´em provozu t´emˇeˇr vylouˇceno, jelikoˇz bˇeˇzn´a smyslupln´a komunikace je stˇr´ıdav´a“. ” Chyby se tedy podaˇrilo odstranit a zaˇr´ızen´ı je moˇzn´e oznaˇcit za funkˇcn´ı i bez hardwarov´e u ´ pravy v kapitole 7.1.
56
´ ´I KAPITOLA 7. TESTOVAN
Kapitola 8 Z´ avˇ er Tato pr´ace se zab´yv´a n´avrhem embedded zaˇr´ızen´ı pro z´aznam komunikace po s´eriov´e lince RS-232 na pamˇet’ovou kartu typu Secure Digital dle specifikace firmy z pr˚ umyslov´e praxe. Podaˇrilo se vyvinout funkˇcn´ı prototyp zaˇr´ızen´ı, coˇz bylo hlavn´ım c´ılem pr´ace. Hardwarov´a ˇc´ast se op´ır´a o mikrokontrol´er Atmel AT91SAM7S s j´adrem ARM, na jehoˇz b´azi byl navrˇzen a zkonstruov´an hardware vlastn´ı koncepce. Zaˇr´ızen´ı disponuje uˇzivatelsk´ym rozhran´ım a je zcela autonomn´ı. Softwarov´a architektura nevyuˇz´ıv´a operaˇcn´ı syst´em, m´ısto toho byla vyvinuta vlastn´ı struktura software typu bare-metal s vyuˇzit´ım knihoven Newlib a EFSL. Architektura vyuˇz´ıv´a generick´e ˇc´asti k´odu pro ARM platformu. Jedn´ım z nejd˚ uleˇzitˇejˇs´ıch krok˚ u byla u ´ spˇeˇsn´a aplikace volnˇe ˇsiˇriteln´ych v´yvojov´ych n´astroj˚ u GNU ARM a OpenOCD. V´ysledkem byl snadn´y v´yvoj software vˇcetnˇe moˇznosti on-chip debuggov´an´ı pˇres JTAG rozhran´ı a GDB pˇr´ımo z prostˇred´ı Eclipse IDE. Na z´akladˇe vlastn´ı hardwarov´e abstrakce byly vytvoˇreny nebo upraveny potˇrebn´e ovladaˇce periferi´ı a vyvinuty utility usnadˇ nuj´ıc´ı n´avrh uˇzivatelsk´eho rozhran´ı a cel´eho programu. Kl´ıˇcovou vlastnost´ı pro bezchybnou funkˇcnost programu bylo uplatnˇen´ı DMA kan´alu pro periferie a model pˇreruˇsen´ı bez zamyk´an´ı. Praktick´e zkouˇsky byly zdrojem softwarov´ych u ´ prav a n´avrhu hardwarov´eho zjednoduˇsen´ı, viz kapitola 7. V´ysledn´e testy zaˇr´ızen´ı jsou dobr´e. N´amˇetem na zlepˇsen´ı m˚ uˇze b´yt zm´ınˇen´a hardwarov´a u ´ prava a vyuˇzit´ı USB portu napˇr. pro ˇziv´e sledov´an´ı komunikace, pˇr´ıstup k z´aznamu, nebo pro vzd´alenou spr´avu zaˇr´ızen´ı.
57
58
´ ER ˇ KAPITOLA 8. ZAV
Literatura [1] Analog Devices Inc. ADM3202/ADM3222/ADM1385 - Product Datasheet. Analog Devices Inc., 2001. [2] Chris Wright Andrew N. Sloss, Dominic Symes. ARM System Developers Guide. Elsevier, 2004. [3] ARM Ltd. ARM Architecture Reference Manual. ARM Limited, 2000. [4] ARM Ltd. ARM JTAG signals, 2008. http://infocenter.arm.com/help/. [5] ARM Ltd. The ARM Ltd. official web site, 2008. http://www.arm.com/. [6] ARM
Ltd.
Arm:
Writing
interrupt
handlers,
2008.
software
package,
2008.
http://www.arm.com/support/faqdev/1456.html. [7] Atmel
Corporation.
At91
http://atmel.com/dyn/products/tools card.asp?tool id=4343. [8] Atmel Corporation. AT91SAM7S ARM Thumb-based Microcontrollers. Atmel Corp., 2008. [9] Atmel Corporation. Interrupt Management: Auto-vectoring and Prioritization. Atmel Corporation, 1998. [10] Samsung Electronics. KS0713 LCD driver datasheet. Samsung Electronics, 1998. [11] Michael Fischer.
YAGARTO GNU ARM distribution official web site, 2008.
http://yagarto.de/. [12] Free Software Foundation. Free software foundation (GNU) official web site, 2008. http://www.gnu.org/. 59
60
LITERATURA
[13] GNU ARM Project.
GNU ARM Toolchain project official web site, 2008.
http://www.gnuarm.com/. [14] IAR Systems. The IAR System official web site, 2008. http://www.iar.com/. [15] Texas Instruments. TPS795xx family LDO specification. Texas Instruments, 2006. [16] Keil Elektronik GmbH. Keil elektronik official web site, 2008. http://www.keil.com/. [17] Michael De Nil Lennart Ysboodt. Embedded Filesystem Library manual. EFSL, 2005. [18] Displaytech Ltd. Displaytech 64128 LCD Product Specifications. Displaytech Ltd., 1998. [19] Toshiba Corporation Matsushita Electric Industrial Co. Ltd., SanDisk Corporation. Secure Digital Physical Layer Specification. Secure Digital Association, 2006. [20] Mirko Samek. Building Bare-Metal ARM Systems with GNU. Embedded.com, 2007. [21] NXP B. V. PCF8563 Product Specification. Philips NXP B. V., 1999. [22] NXP B. V. I2C - bus specification and user manual. Philips NXP B. V., 2007. [23] NXP B. V. LPC2131/32/34/36/38 Product Datasheet. Philips NXP B. V., 2007. [24] Olimex Ltd. AT91SAM7-P64 Get Started Guide. Olimex Ltd., 2005. ˇ e [25] Pavel P´ıˇsa. Modern´ı mikrokontrol´ery a vyuˇzit´ı v´yvojov´eho prostˇred´ı GNU. Cesk´ Vysok´e Uˇcen´ı Technick´e v Praze, 2001. [26] Stephen Welsh Peter Knaggs. ARM Assembly Language Programming. School of Design, Engeneerign and Computing, Bournemouth University, Poole, UK, 2004. [27] Dominic Rath. Open On-Chip Debugger. Spen, 2008. [28] Realterm.
Realterm
Terminal
Program
official
web
site,
2008.
http://realterm.sourceforge.net/. [29] Richard M. Stallman and the GCC Developer Community. Using the GNU Compiler Collection. GNU Press, a division of the Free Software Foundation, 2005.
61
LITERATURA
[30] Stan Shebs Richard M. Stallman, Roland Pesch. Debugging with gdb. GNU Press, a division of the Free Software Foundation, 2004. [31] SanDisk Corporation. SanDisk SD Card Product Manual. SanDisk Corporation, 2004. [32] Rob Savoye. Embed With GNU. Cygnus Support, 1995. [33] SECONS s. r. o. Jtag pinouts list, 2008. http://www.jtagtest.com/pinouts/. [34] Ian Lance Taylor Steve Chamberlain. Using the GNU Linker. GNU Press, a division of the Free Software Foundation, 2003. [35] Jeff Johnson Steve Chamberlain, Roland Pesch. The Red Hat Newlib C Library. Red Hat Inc., 2004. [36] Steve Furber. ARM System-On-Chip Architecture. Addison Wesley, Pearson Education Ltd., 2000. [37] TIA.
Telecomunications
industry
association
standards,
2008.
http://www.tiaonline.org/standards/. [38] wikipedia.org. Encyclopedia wikipedia, 2008. http://en.wikipedia.org/. [39] Eric Youngdale. The elf object file format: Introduction. The Linux Journal, 1995.
62
LITERATURA
Pˇ r´ıloha A Obvodov´ e sch´ ema zaˇ r´ızen´ı SD SDCARD MISO SCK VDD MOSI CS
8 7 6 5 4 3 2 1 9
UART1_DCE
DAT1 DAT0/MISO GND CLK VCC GND CMD/MOSI DAT3/CS
SHIELD SHIELD SHIELD SHIELD PRESENT WP
DAT2
15 14 13 12 11 10
1 6 2 7 3 8 4 9 5
RXD0_LINE RTS0_LINE TXD0_LINE CTS0_LINE CD WP
UART2_DTE
11
11
1 6 2 7 3 8 4 9 5
TXD1_LINE CTS1_LINE RXD1_LINE RTS1_LINE
10
DB9_F
10
DB9_M
U4 CTS0_LINE RXD0_LINE
13 8
RTS0 TXD0
11 10 1 3 4 5 2 6
C15 100nF
C16 100nF
R1IN R2IN
R1OUT R2OUT
T1IN T2IN
T1OUT T2OUT
C1+ C1C2+ C2V+ V-
12 9
CTS0 RXD0
14 7
RTS0_LINE TXD0_LINE
13 8
TXD1 RTS1
11 10 1 3 4 5 2 6
C26 100nF
U2
C30 100nF
ADM3202
C18 100nF
RXD1_LINE CTS1_LINE
C19 100nF VDD
I
R1OUT R2OUT
T1IN T2IN
T1OUT T2OUT
C1+ C1C2+ C2V+ V-
ADM3202
C17 100nF
VDD
R1IN R2IN
C31 100nF
12 9
RXD1 CTS1
14 7
TXD1_LINE RTS1_LINE
ˇ ´ILOHA A. OBVODOVE ´ SCHEMA ´ ˇ ´IZEN´I PR ZAR
II
LCD 2 4 6 8 10
1 3 5 7 9
LCD_DATA LCD_DI LCD_CS
VDD
LCD_K 1
VDD LCD_CLK LCD_A LCD_RST
JUMPER
R17
TST 2
HEADER 5X2
ERASE
51
CD
52
TCK
53
TXD0
TDI 33 TDI
RXD0
34
NPCS3/RXD0/PA5
PCK0/TXD0/PA6
SCL
35
TCLK0/TWCK/PA4
LCD_DATA 37
36
TIOB2/DTR1/PA27
TCLK1/DSR1/PA28
RST
LCD_DI
39 NRST
40 TST
LCD_CLK
LCD_CS 41
SDA
42
44
43
45 VDDIO
38
PWM3/RTS0/PA7
JTAGSEL
ADTRG/CTS0/PA8
TMS
NPCS1/DRXD/PA9
PA31/NPCS1/PCK2
NPCS2/DTXD/PA10
TCK
PWM0/NPCS0/PA11
32
RTS0
31
CTS0
30
RTC_AL
29
CS
28
BT_PWM
27
MISO
1
PIN
TMS
46
TDO
50
TCLK2/RI1/PA29
49
NPCS2/IRQ1/PA30
2
TDO
NPCS3/TWD/PA3
BDS
SCK0/PWM2/PA2
JUMPER
TIOB0/PWM1/PA1
1
TIOA0/PWM0/PA0
VDD
GND
WP
LCD_RST 47
MOSFET P Q3
48
22
54
VDDCORE
55
DDP
58
GND
Y1 63
PWM3/SPCK/PA14
XOUT
TIOA1/TF/PA15
XIN
TIOB1/TK/PA16
CTS1
25 24 23
RTS1
22
MOSI SCK
21 20 19
USB_DET
18
16
PA20/RF/IRQ0
17
USB_PUP
PA23/SCK1/PWM0
PA22/TXD1/NPCS3
15
BT0
PA19/RK/FIQ/AD2
14
TXD1
BT2
13
VDDCORE 12
VDDOUT
VDDIN
GND
26
U7
Y3 1 2 3 4
RTC_AL 32.768kHz
OSC1 OSC0 INT GND
VDD CLKOUT SCL SDA
8 7 6 5
VDD
VPWR JTAG
SCL SDA
VDD R18 BT_PWM
BUTTONS 2 4 6
1 3 5
BT0 BT2
Q4 MOSFET P
22
2 4 6 8 10 12 14 16 18 20
1 3 5 7 9 11 13 15 17 19
R12 47k
R13
R14
R15
R16
47k
47k
20k
47k
TDI TMS
TCK TDO RST
RST_BUTTON RST JTAG HEADER
HEADER 3X2 90
R11 47k
C_RTC 100nF
PCF8563
BT1 BT3
8
AD7
7
AD6
VBAT
5
6
AD4
GND
AD5 4
C21 10nF
1
C20 1nF
3
C14 10pF
2
ADVREF
1k5 C13 10pF
10
R10
18.432MHz
PA21/RXD1/PCK1
VDDIO
VDDPLL
PA18/RD/PCK2/AD1
PLLRC
64
11
62
PWM2/MOSI/PA13
RXD1
XIN
PWM1/RTS1/PA24
VDDFLASH
60 61
VDDCORE
VDDIO
59
XOUT
PWM2/CTS1/PA25
AT91SAM7S128
BT1
57
TIOA2/DCD1//PA26
DDM
PA17/TD/PCK1/AD0
DDP
ERASE
9
56
BT3
DDM
PWM1/MISO/PA12
III
D2
PWR SW
VUSB
1 2 3
1 2 3
DIODE
SHIELD SHIELD
4 5
PWR SW PWR D1
U5
VAC
1 2 3
VPWR
1 2 5
DIODE AAA 2X
D3
C23 1uF_1206
HEADER PWR 1 2
3 4
5
6
C25 10nF_1206
VBAT
EN VIN NR/FB
VOUT GND GND
VDD
4 3 6
C24 1uF_1206
TPS79533
DIODE
BAT_AAA_2X
BAT_AAA_1X 1 2
3 4
AAA 1X
VDD
R9
R19
VUSB
USB_DET
USBCONB
27k
USB5V DM DP USBGND
1 2 3 4
DDM R8
DDP
VDDIO
VDDOUT
VDDCORE_C1 100nF
1k5
27 R1
C22 33pF
47k
VDDIN_C7 100nF
22R
R2
6 5
SHIELD SHIELD
H1
R6
USB_PUP Q2 MOSFET P
VDDIN
VDDIN_C8 4.7uF
27
R3
R4
330k
330k
VDD
VDDIO_C9 100nF
VDDIO_C10 100nF
VDDPLL
C2 100nF
VDDADM3202_C1 100nF
VDDFLASH
VDDIO_C11 100nF
VDDFLASH_C12 100nF
VDDCORE
VDDCORE_C3 100nF
VDDPLL_C4 100nF
VDDOUT_C5 100nF
VDDOUT_C6 2.2uF
VDDADM3202_C13 100nF
IV
ˇ ´ILOHA A. OBVODOVE ´ SCHEMA ´ ˇ ´IZEN´I PR ZAR
Pˇ r´ıloha B Obsah pˇ riloˇ zen´ eho CD • Documentation: dokumentace cel´eho zaˇr´ızen´ı, • Firmware: zdrojov´y k´od firmwaru, • Firmware Documentation: dokumentace k firmwaru, • Libraries: pouˇzit´e knihovny, • Materials: vybran´e liter´arn´ı zdroje, • PCB: soubory pro OrCAD s n´avrhem DPS, • Test Program: program pro testov´an´ı spr´avnosti z´aznamu, • Text: zdrojov´y k´od tohoto textu, • Toolchain: pouˇzit´e v´yvojov´e n´astroje, • Utilities and Software: ostatn´ı n´astroje a software.
V