background image

 

 

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

ł

background image

 

 

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

background image

 

 

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) 

background image

 

 

AVR ATmega

AVR ATmega

 obudowy DIP, MLF i TQFP

ATmega8 (TQFP): 9x9x1 mm
Atmega128 (TQFP): 16x16x1 mm

 wyprowadzenia 'wielofunkcyjne'

background image

 

 

AVR ATmega

AVR ATmega

background image

 

 

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

background image

 

 

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/

background image

 

 

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

background image

 

 

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/

background image

 

 

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/

background image

 

 

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

background image

 

 

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

background image

 

 

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/

background image

 

 

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 ...

background image

 

 

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

background image

 

 

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

background image

 

 

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'

background image

 

 

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 

background image

 

 

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 

background image

 

 

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

background image

 

 

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

background image

 

 

Prosty programator ISP

Prosty programator ISP

background image

 

 

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/

background image

 

 

'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/

background image

 

 

Nad czym obecnie pracuję

Nad czym obecnie pracuję

background image

 

 

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 

background image

 

 

Dziękuję za uwagę

Dziękuję za uwagę

i zapraszam na show   

i zapraszam na show   

This document was written with Open Source programs.