Linux jako platforma
Linux jako platforma
programistyczna dla
programistyczna dla
mikrokontrolerów AVR
mikrokontrolerów AVR
Konrad Miciński
Koło Naukowe Elektroników
Wydział Elektryczny
Politechnika Białostocka
styczeń 2006
I don't like this, but ...
Copyright by Konrad Mici ski
ń
Bia ystok 2006
ł
Mikrokontroler = CPU core +
Mikrokontroler = CPU core +
RAM/ROM + I/O
RAM/ROM + I/O
●
RAM: SRAM
●
ROM: EEPROM, Flash, ROM
●
I/O:
➔
Magistrale:
✔
pamięci zewnętrznej
✔
RS-232 / 485
✔
I
2
C
✔
1-Wire
✔
CAN
✔
USB
✔
SPI
➔
Przetworniki:
✔
ADC
✔
DAC
✔
komparatory napięcia
✔
PWM
➔
Układy nadzorujące:
✔
watchdog (RTC)
✔
liczniki (8 i 16 bitów)
✔
kontrola napięcia
zasilania
AVR ATmega
AVR ATmega
●
jednotaktowy, 8-io bitowy RISC
(128 instrukcji)
●
taktowanie: 0 – 16 MHz
●
8 – 128 kB Flash
●
0,5 – 4 kB EEPROM
●
1 – 4 kB SRAM
●
ochrona pamięci programu
●
magistrala pamięci
zewnętrznej (64 kB)
●
napięcia zasilania: 2,7 – 5,5 V
●
USART do 2Mbps
●
I
2
C
●
SPI
●
10 bitowy ADC
●
16 bitowy PWM
●
liczniki (8 i 16 bitów)
●
watchdog
●
wew. oscylator (8 Mhz)
●
programowanie “in-system”
(SPI lub JTAG)
AVR ATmega
AVR ATmega
●
obudowy DIP, MLF i TQFP
ATmega8 (TQFP): 9x9x1 mm
Atmega128 (TQFP): 16x16x1 mm
●
wyprowadzenia 'wielofunkcyjne'
AVR ATmega
AVR ATmega
Jak to robi konkurencja
Jak to robi konkurencja
●
IDE:
➔
Atmel AVRStudio (asm, C)
➔
Bascom (BASIC)
➔
IAR Embedded Workbench (asm, C, C++)
➔
CodeVision AVR (asm, C)
➔
WinAVR (asm, C, C++)
➔
AvrSide (asm, C)
●
Emulatory:
➔
AVRStudio
➔
Visual Micro Lab
WinAVR
WinAVR
➔
Open Source
➔
AVR-GCC
➔
quasi-IDE
➔
'generator' Makefile-a
➔
łatwa integracja z
AVRStudio i AvrSide
➔
2006-01-25 <-> 2005-02-14
http://winavr.sourceforge.net/
AVR i Linux
AVR i Linux
Do-It-Yourself
➔
kompilacja narzędzi ze źródeł lub instalacja gotowych
pakietów
➔
brak centralnego repozytorium
➔
brak integracji komponentów
➔
oprogramowanie w rożnym 'stadium rozwoju'
➔
“closed – hardware”
➔
wymagana znajomość elektroniki
Toolchain-HOWTO: binutils
Toolchain-HOWTO: binutils
➔
wersja: 2.16.1
➔
architektury: x86, x86_64
➔
avr-objcopy
$ tar -xvjf binutils-2.16.1.tar.bz2
$ cd binutils-2.16.1
$ ./configure --target=avr --prefix=$HOME/AVR \
--disable-nls
$ make
$ make install
http://www.gnu.org/software/binutils/
Toolchain-HOWTO: GCC-3.4.5
Toolchain-HOWTO: GCC-3.4.5
$ export PATH=$PATH:$HOME/AVR/bin
$ tar -xvjf gcc-3.4.5.tar.bz2
$ cd gcc-3.4.5
$ ./configure --target=avr --disable-nls \
--enable-languages=c \
--prefix=$HOME/AVR
$ make
$ make install
➔
architektury: x86, x86_64
➔
avr-gcc
http://gcc.gnu.org/
Toolchain-HOWTO: GCC-4.1.0
Toolchain-HOWTO: GCC-4.1.0
$ export PATH=$PATH:$HOME/AVR/bin
$ tar -xvjf gcc-4.1.0.tar.bz2
$ cd gcc-4.1.0
$ mkdir _GCC ; cd _GCC
$ ../configure --target=avr --disable-nls\
--enable-languages=c \
--disable-libssp \
--prefix=$HOME/AVR
$ make
$ make install
Opcje dla mikrokontrolerów AVR
Opcje dla mikrokontrolerów AVR
●
-mmcu=mcu
- wybór układu
●
-minit-stack=N
- adres początku stosu
●
-mno-interrupts
- wyłącza obsługę
przerwań
●
-mtiny-stack
- minimalizacja rozmiaru
stosu
●
-mint8
- zmiana wielkości typów
Toolchain-HOWTO: avr-libc
Toolchain-HOWTO: avr-libc
Autorzy:
➔
Marek Michałkiewicz
➔
Joerg Wunsch
avr-libc != glibc --target=avr
$ tar -xvjf avr-libc-1.4.3.tar.bz2
$ cd avr-libc-1.4.3
$ ./configure --prefix=$HOME/AVR --host=avr
$ make
$ make install
http://www.nongnu.org/avr-libc/
avr-libc – co jest w środku
avr-libc – co jest w środku
●
ioxxxx.h - adresy portów mikrokontrolera xxxx (np. iom128)
●
interrupt.h – obsługa przerwań
●
delay.h – generacja opóźnień
●
sleep.h – wykorzystanie trybów 'uśpienia'
●
wdt.h – obsługa watchdoga
●
crc16.h – obliczanie 16 bitowej CRC
●
boot.h – obsługa bootloadera
●
parity.h – wyliczanie bitu parzystości
●
twi.h – obsługa I
2
C
●
math.h, stdio.h, string.h, errno.h, ctype.h ...
Toolchain-HOWTO: GDB
Toolchain-HOWTO: GDB
$ tar -xvjf gdb-6.4.tar.bz2
$ cd gdb-6.4
$ ./configure --target=avr --prefix=$HOME/AVR
$ make
$ make install
➔
wersja: 6.4
➔
architektury: x86, x86_64
➔
avr-gdb
http://www.gnu.org/software/gdb/gdb.html
Biblioteki dodatkowe
Biblioteki dodatkowe
●
Procyon AVRlib (
http://hubbard.engr.scu.edu/avr/avrlib/
)
➔
linia komend (terminal VT100)
➔
FAT16/32 (ro)
➔
moduły obsługi dla wbudowanych układów I/O
➔
obsługa tekstowych i graficznych LCD
➔
obsługa kart MMC/SD
➔
sterowniki do kart sieciowych (RTL8129)
➔
stos sieciowy (ARP, IP, ICMP, UDP, DHCP)
●
biblioteki na 'specjalne okazje'
➔
http://www.ulrichradig.de/site/atmel/avr_mmcsd/index.htm
Integracja narzędzi
Integracja narzędzi
Do-It-Yourself
➔
brak IDE
➔
próby rozwiązania problemu:
➔
podanie ścieżki dostępu do kompilatora
(emacs, jed ...)
➔
integracja 'w terminalu'
Kompilacja kodu źródłówego
Kompilacja kodu źródłówego
Kompilacja ręczna
$ avr-gcc -mmcu=atmega8 -Os -g \
-o test.out test.c
$ avr-objcopy -j .text \
-O ihex test.out test.hex
$ avr-objcopy -j .eeprom \
-O ihex test.out test-ee.hex
Kompilacja kodu źródłowego
Kompilacja kodu źródłowego
Kompilacja 'automatyczna' z wykorzystaniem GNU make
CC=avr-gcc
OBJCOPY=avr-objcopy
CFLAGS=-g -Os -mmcu=atmega8
test.hex : test.out
$(OBJCOPY) -j .text -O ihex test.out test.hex
test.out : test.c
$(CC) $(CFAGS) -o test.out test.c
Programatory
Programatory
●
programowanie in-system:
➔
SPI
➔
JTAG
➔
bootloader
●
programowanie poza systemem
➔
programatory równoległe
➔
układy emulatorów / debugerów (STK500)
●
problem “closed-hardware”
●
konstrukcje własne programistów
Prosty programator ISP
Prosty programator ISP
●
komunikacja przez port równoległy (SPP)
●
bufor 74HC244
●
oprogramowanie
dla MS Windows
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html
Prosty programator ISP
Prosty programator ISP
Programowanie układów
Programowanie układów
●
AVRDUDE
➔
kasowanie pamięci Flash i EEPROM
➔
ustawianie bitów konfiguracyjnych
➔
programowanie z wykorzystaniem portu równoległego
➔
programowanie przez interfejs RS232 i USB
➔
obsługa JTAG i emulatorów sprzętowych
●
Programowanie z poziomu 'maszyn wirtualnych'
(Vmware, bochs, qemu)
http://www.bsdhome.com/avrdude/
'Nietypowe' zastosowania
'Nietypowe' zastosowania
●
'klastry' obliczeniowe
➔
mini sieć z wykorzystaniem RS232
●
Websewery
➔
systemy RTOS z kompletnym stosem TCP/IP
http://www.ethernut.de/
●
Systemy operacyjne
➔
RTOS
➔
Contiki :) http://www.sics.se/~adam/contiki/
Nad czym obecnie pracuję
Nad czym obecnie pracuję
Warto przeczytać
Warto przeczytać
●
Atmel Application Notes for 8-bit AVR
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
●
Rafeeq Ur Rehman, Christopher Paul: “The Linux
Development Platform”, Prentice Hall
●
Rich Neswold: “A GNU Development Enviroment for the
AVR Microcontroller”
●
Rafał Baranowski: “Mikrokontrolery AVR Atmega w
praktyce”, BTC
●
Jerzy Szczesiul: “AVR-GCC: kompilator C dla
mikrokontrolerów AVR”, EP 3/2005 i późniejsze
Dziękuję za uwagę
Dziękuję za uwagę
i zapraszam na show
i zapraszam na show
This document was written with Open Source programs.