• Keine Ergebnisse gefunden

In System Programming

N/A
N/A
Protected

Academic year: 2021

Aktie "In System Programming"

Copied!
27
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

In System Programming

- Controller wird zum Programmieren im System belassen

- Softwaretool (uisp, ponyprog, avrdude, Avrstudio)

- Bootloader on chip

- meist einfache Zusatzhardware

- Controllerseitig wird UART, SPI oder JTAG zur Programmübertrageung genutzt.

http://www.ethernut.de/en/tools/in-system-programming.html,

- Controller wird zum Programmieren im System belassen

- Softwaretool (uisp, ponyprog, avrdude, Avrstudio)

- Bootloader on chip

- meist einfache Zusatzhardware

- Controllerseitig wird UART, SPI oder JTAG zur Programmübertrageung genutzt.

http://www.ethernut.de/en/tools/in-system-programming.html,

(2)

Prgrammersoftware

Quelle:http://www.ethernut.de/en/tools/in-system-programming.html

Product Open Src Oses CLI GUI

Targets AVRDUDE Yes Linux

Windows OS X

Yes Yes AVR

AVR

Studio 4 - Windows Yes Yes AVR

JTAG-O-

MAT Yes Linux

Windows Yes - ARM

OpenOCD Yes Linux Windows OS X

Yes - ARM

SAM-

PROG - Windows ? Yes ARM

UISP Yes Linux

Windows Yes - AVR

Product Open Src Oses CLI GUI

Targets AVRDUDE Yes Linux

Windows OS X

Yes Yes AVR

AVR

Studio 4 - Windows Yes Yes AVR

JTAG-O- MAT

Yes Linux

Windows

Yes - ARM

OpenOCD Yes Linux Windows OS X

Yes - ARM

SAM-

PROG - Windows ? Yes ARM

UISP Yes Linux

Windows

Yes - AVR

(3)

avrdude

Programmersoftware für AVR-Prozessoren

Konfigurationsfile erforderlich

/etc/avrdude.conf

/opt/cross/etc/avrdude.conf

bedient eine Vielzahl von Programmern,

Beschreibung und jeweilige Pinbelegung im Configfile

Aufrufbeispiel aus Makefile:

/usr/bin/avrdude -c USBasp -p m8 -P usb -p m8 -e -B8 -U flash:w:main.hex

Programmersoftware für AVR-Prozessoren

Konfigurationsfile erforderlich

/etc/avrdude.conf

/opt/cross/etc/avrdude.conf

bedient eine Vielzahl von Programmern,

Beschreibung und jeweilige Pinbelegung im Configfile

Aufrufbeispiel aus Makefile:

/usr/bin/avrdude -c USBasp -p m8 -P usb -p m8 -e -B8 -U flash:w:main.hex

(4)

flash:

avrdude -c stk500v2 -p m8 -P /dev/ttyACM0 -e -B8 -U flash:w:main.hex

Übertraguns- protokoll

Target-

device device

Erase all to 0xff

Taktrate (redundant?)

memoryoperation memtype:op:filename

!! -e löscht flash und eeprom !!

flash lfuse hfuse eeprom

avrdude -p partno [-b baudrate] [-c programmer-id] [-P port] [-U memtype:op:filename:filefmt] [-v]

(5)

Kommandos f. Avrdude mit ttyAMC0

AVRDUDE = /usr/bin/avrdude -c USBasp -p m8 -P usb -p m8 flash:

$(AVRDUDE) -e -B8 -U flash:w:main.hex

#CKSEL3..0 0001; CKOPT 1 (unprogrammed) 1mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe1:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 0010; CKOPT 1 (unprogrammed) 2mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 0011; CKOPT 1 (unprogrammed) 4mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe3:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 0100; CKOPT 1 (unprogrammed) 8mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 1111; CKOPT 0 (programmed)

AVRDUDE = /usr/bin/avrdude -c USBasp -p m8 -P usb -p m8 flash:

$(AVRDUDE) -e -B8 -U flash:w:main.hex

#CKSEL3..0 0001; CKOPT 1 (unprogrammed) 1mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe1:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 0010; CKOPT 1 (unprogrammed) 2mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 0011; CKOPT 1 (unprogrammed) 4mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe3:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 0100; CKOPT 1 (unprogrammed) 8mhz:

$(AVRDUDE) -B8 -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m -V

#CKSEL3..0 1111; CKOPT 0 (programmed)

(6)

/etc/avrdude.conf

programmer id = "stk200";

desc = "STK200";

type = par;

buff = 4, 5;

sck = 6;

mosi = 7;

reset = 9;

miso = 10;

;

programmer id = "dapa";

desc = "Direct AVR Parallel Access";

type = par;

vcc = 3;

reset = 16;

sck = 1;

mosi = 2;

miso = 11;

programmer id = "stk200";

desc = "STK200";

type = par;

buff = 4, 5;

sck = 6;

mosi = 7;

reset = 9;

miso = 10;

;

programmer id = "dapa";

desc = "Direct AVR Parallel Access";

type = par;

vcc = 3;

reset = 16;

sck = 1;

mosi = 2;

miso = 11;

(7)

# serial ponyprog design (dasa2 in uisp)

# reset=!txd sck=rts mosi=dtr miso=cts programmer

id = "ponyser";

desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts";

type = serbb;

reset = ~3;

sck = 7;

mosi = 4;

miso = 8;

;

programmer

id = "stk500v2";

desc = "Atmel STK500 Version 2.x firmware";

type = stk500v2;

;

programmer

id = "usbasp";

desc = "USBasp, http://www.fischl.de/usbasp/";

type = usbasp;

# serial ponyprog design (dasa2 in uisp)

# reset=!txd sck=rts mosi=dtr miso=cts programmer

id = "ponyser";

desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts";

type = serbb;

reset = ~3;

sck = 7;

mosi = 4;

miso = 8;

;

programmer

id = "stk500v2";

desc = "Atmel STK500 Version 2.x firmware";

type = stk500v2;

;

programmer

id = "usbasp";

desc = "USBasp, http://www.fischl.de/usbasp/";

type = usbasp;

(8)

Direct Programmer (dapa)

reset = 16;

sck = 1;

mosi = 2;

miso = 11;

(9)

Pinbelegung / Widerstände DAPA

(10)

Stk200 kompatible (selbstbau)

http://www.kreatives-chaos.com/artikel/stk200-programmieradapter

(11)

Serielle Programmierung

http://www.mikrocontroller.net/topic/57953

1 DCD 2 RxD

3 TxD !Reset 4 DTR MOSI 5 GND GND 6 DSR SCK 7 RTS SCK 8 CTS MISO 9 RI9 GND

uisp -dprog=dasa2 -dserial=/dev/ttyUSB0 -v=2

(12)

Variante, gefunden auf Pollin

Evaluation board

(13)

Serieller Programmer Dasa2

Auch in Verbindung mit USB-Serial-Adapter

verwendbar, allerdings langsam, Nicht immer fehlerfrei

(14)

USB Programmer

http://www.informatik.htw-dresden.de/~beck/Atmel/Ernst/usbprogrammer.html

Typ unbekannt (ebay.de, preiswert)

Protkoll: stk500v2

Device: /dev/ttyACM0

Nutzung von avrdude

flash:

avrdude -c stk500v2 -p m8 -P /dev/ttyACM0 -e -B8 -U flash:w:main.hex

Übertraguns- protokoll

Target-

device device

Erase all to 0xff

Taktrate (redundant?)

memoryoperation memtype:op:filename

/etc/udev/rules.d/85-avr.rules:

ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="2a9b", MODE="0666"

(15)

USBasp

flash:

avrdude -c USBasp -p m8 -P usb -e -B8 -U flash:w:main.hex eeprom:

avrdude -c USBasp -p m8 -P usb -B8 -U eeprom:w:main_eeprom.hex . . .

/etc/udev/rules.d/15-usbprog.rules:

ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0660"

Derzeit genutzt, <4€ im Versandhandel

(16)

kavr – ein alternativer bootloader

Ein bootloader wird in den oberen

Adressbereich des Programmspeichers des Microcontrollers geladen und verbleibt dort. Er erlaubt über eine geeignete Schnittstelle, zum Beispiel UART, die Übernahme des

Programmcodes.

Er wird über Reset gestartet. Nacjh Reset muss in einem programmierbaren zeitfenster der

Programmcode über die Schnittstelle

übertragen werden. Dafür wird dann kein Programmer mehr benötigt.

Ein bootloader wird in den oberen

Adressbereich des Programmspeichers des Microcontrollers geladen und verbleibt dort. Er erlaubt über eine geeignete Schnittstelle, zum Beispiel UART, die Übernahme des

Programmcodes.

Er wird über Reset gestartet. Nacjh Reset muss in einem programmierbaren zeitfenster der

Programmcode über die Schnittstelle

übertragen werden. Dafür wird dann kein

Programmer mehr benötigt.

(17)

kavr – ein alternativer bootloader

Quelle: http://sourceforge.net/projects/kavr/files/

Bootloader, der hex-files über UART übernimmt, es ist keine extra ISP-Schnittstelle und kein Programmer

mehr nötig.

ISP Programmer wird nur für die Installation des Boot- loaders benötigt.

Uart über max232 mit seriellem Port am PC oder Ad- apter verbinden.

Für die Übertragung vom PC kann ein geeignetes Mo- demprogramm (minicom, gtkterm) genutzt werden.

Quelle: http://sourceforge.net/projects/kavr/files/

Bootloader, der hex-files über UART übernimmt, es ist keine extra ISP-Schnittstelle und kein Programmer

mehr nötig.

ISP Programmer wird nur für die Installation des Boot- loaders benötigt.

Uart über max232 mit seriellem Port am PC oder Ad- apter verbinden.

Für die Übertragung vom PC kann ein geeignetes Mo- demprogramm (minicom, gtkterm) genutzt werden.

(18)

Der Bootloader wird an das obere Ende des Flash ge- schrieben und bei reset aktiviert, dazu bedarf es der korrekten Einstellung der Fuses dazu.

Liegt nach reset ein hexfile an der seriellen Schnittstel- le an, so wird es empfangen und in den flash ge-

schrieben.

Wird kein hexfile registriert, so wird nach dem einge- stellten timeout ein gewöhnlicher reset ausgeführt.

Der Bootloader belegt >512!!! Byte am oberen Ende des Flash, dieser darf vom Programm nicht über-

schrieben werden.

Der Bootloader wird an das obere Ende des Flash ge- schrieben und bei reset aktiviert, dazu bedarf es der korrekten Einstellung der Fuses dazu.

Liegt nach reset ein hexfile an der seriellen Schnittstel- le an, so wird es empfangen und in den flash ge-

schrieben.

Wird kein hexfile registriert, so wird nach dem einge- stellten timeout ein gewöhnlicher reset ausgeführt.

Der Bootloader belegt >512!!! Byte am oberen Ende des Flash, dieser darf vom Programm nicht über-

schrieben werden.

(19)

Nach einschalten oder reset meldet sich kavr mit „KA- VR“ beim Terminalprogramm (minicom, GtkTerm), ist das nicht der Fall, stimmt etwas mit der Taktung/Baud- rate nicht.

Es sind nur eingeschränkte Kombinationen von Baud- rate/Taktung möglich, hierfür gibt es Formeln oder Ta- bellen, zB. bei Versuch 6 oder im Manual des atmega.

Bei der Installation des Bootloaders wird das aktuelle Programm (oft auch firmware genannt) auf dem Con- troller gelöscht.

Die Taktung des Controllers wird über fuses einge- stellt, ein Wechsel der Taktung setzt den Bootloader außer Betrieb.

Nach einschalten oder reset meldet sich kavr mit „KA- VR“ beim Terminalprogramm (minicom, GtkTerm), ist das nicht der Fall, stimmt etwas mit der Taktung/Baud- rate nicht.

Es sind nur eingeschränkte Kombinationen von Baud- rate/Taktung möglich, hierfür gibt es Formeln oder Ta- bellen, zB. bei Versuch 6 oder im Manual des atmega.

Bei der Installation des Bootloaders wird das aktuelle Programm (oft auch firmware genannt) auf dem Con- troller gelöscht.

Die Taktung des Controllers wird über fuses einge- stellt, ein Wechsel der Taktung setzt den Bootloader außer Betrieb.

(20)

Übertragung des hexfiles

Nutzung von Minicom

Konfiguration der seriellen Schnittstelle ohne minicom:

Zur Konfiguration kann stty genutzt werden.

stty -F /dev/ttyUSB0 ospeed 9600 ixon

Angabe eines Flags schaltet die Eigenschaft an, ein vorgestelltes Minus schaltet die

Eigenschaft aus.

Ist der serielle Port ordnungsgemäß konfiguriert, kann man mit dem Kommando

cat main.hex >/dev/ttyUSB0 übertragen.

Nutzung von Minicom

Konfiguration der seriellen Schnittstelle ohne minicom:

Zur Konfiguration kann stty genutzt werden.

stty -F /dev/ttyUSB0 ospeed 9600 ixon

Angabe eines Flags schaltet die Eigenschaft an, ein vorgestelltes Minus schaltet die

Eigenschaft aus.

Ist der serielle Port ordnungsgemäß konfiguriert, kann man mit dem Kommando

cat main.hex >/dev/ttyUSB0 übertragen.

(21)

Die Konfiguration des serial Ports

Geschwindigkeit 9600 Baud (8MHz)

oder 9600 Baud für alle „gängigen“ Taktungen, außer 1MHz!

Übertragungsprotokoll 8N1

XON/XOFF flowcontrol

Der Einsatz des Quarzes empfiehlt sich für eine zuverlässige Übertragung (11059200Hz), es

handelt sich um einen „Baudratenquarz“. Dies muss in den Makefiles entsprechend

konfiguriert werden!

Geschwindigkeit 9600 Baud (8MHz)

oder 9600 Baud für alle „gängigen“ Taktungen, außer 1MHz!

Übertragungsprotokoll 8N1

XON/XOFF flowcontrol

Der Einsatz des Quarzes empfiehlt sich für eine zuverlässige Übertragung (11059200Hz), es

handelt sich um einen „Baudratenquarz“. Dies muss in den Makefiles entsprechend

konfiguriert werden!

(22)

kvar: Tipps zum Makefile

Makefile benutzt avrdude, passenden Programmer einstellen

DUDEPORT = -c USBasp oder

DUDEPORT = -c stk200 -P /dev/parport0

Fuses im Makefile gehen von verwendetem

Quarz aus! Ist kein Quarz installiert, geht nach

„make fuses“ nichts mehr. Ausweg:

Installation eines Quarzes (bei Nutzung des UART ohnehin empfohlen) oder

Ändern von FUSE_L in 0xe1(1MHz),

Makefile benutzt avrdude, passenden Programmer einstellen

DUDEPORT = -c USBasp oder

DUDEPORT = -c stk200 -P /dev/parport0

Fuses im Makefile gehen von verwendetem

Quarz aus! Ist kein Quarz installiert, geht nach

„make fuses“ nichts mehr. Ausweg:

Installation eines Quarzes (bei Nutzung des UART ohnehin empfohlen) oder

Ändern von FUSE_L in 0xe1(1MHz),

0xe2(2MHz), 0xe3(4MHz) oder 0xe4(8MHz)

(23)

Build mit kavr Makefile

MCU = atmega8 F_CPU = 11059200 BAUD = 9600

TIMEOUT = 3000

# 512-byte bootloader (see comments above)

#BOOTADDR = 0x1e00 BOOTADDR = 0x1C00 FUSE_L = 0xff

#FUSE_H = 0xcc FUSE_H = 0xca

# Your programmer, your serial port, your main app...

MCU = atmega8 F_CPU = 11059200 BAUD = 9600

TIMEOUT = 3000

# 512-byte bootloader (see comments above)

#BOOTADDR = 0x1e00 BOOTADDR = 0x1C00 FUSE_L = 0xff

#FUSE_H = 0xcc FUSE_H = 0xca

# Your programmer, your serial port, your main app...

Bootloader ist (Leider!) größer Als 512 byte. Deshalb nachfolgende

Änderungen vornehmen!

Adresse, an der der Bootloader beginnt

Über die Fuseseinstellung wird gesteuert, dass der Bootloader an seiner Adresse bei Reset

aufgerufen wird.

(24)

Ein wenig Rechnerei

avr-size --common -d kavr.elf

text data bss dec hex filename 558 0 389 947 3b3 kavr.elf 558 > 512!!

Flash-speicher 8kB (4kWorte)

Einstellbar sind Bootloader der Größe:

128 Words ( 256 Byte) 256 Words ( 512 Byte) 512 Words (1024 Byte) * 1024 Words (2048 Byte)

8 KByte Flashhpeicher: 8192 Byte 0x2000 1024 Byte f. Bootloader - 0x0400 avr-size --common -d kavr.elf

text data bss dec hex filename 558 0 389 947 3b3 kavr.elf 558 > 512!!

Flash-speicher 8kB (4kWorte)

Einstellbar sind Bootloader der Größe:

128 Words ( 256 Byte) 256 Words ( 512 Byte) 512 Words (1024 Byte) * 1024 Words (2048 Byte)

8 KByte Flashhpeicher: 8192 Byte 0x2000 1024 Byte f. Bootloader - 0x0400

(25)

Step by step

Änderungen in Makefile eintragen

make

make flash

make fuse

Der Bootloader sollte nun einsatzbereit sein

Änderungen in Makefile eintragen

make

make flash

make fuse

Der Bootloader sollte nun einsatzbereit sein

(26)

Step by Step – Folge 2

cd Anwendung

make

Anwendung muss nun für 11059200 Mhz gebaut werden!

stty ispeed 9600 ospeed 9600 -F /dev/ttyUSB0

cat main.hex> /dev/ttyUSB0

Eine Udev-Regel richtet /dev/ttyUSB0 mit den Rechten 0666 ein.

cd Anwendung

make

Anwendung muss nun für 11059200 Mhz gebaut werden!

stty ispeed 9600 ospeed 9600 -F /dev/ttyUSB0

cat main.hex> /dev/ttyUSB0

Eine Udev-Regel richtet /dev/ttyUSB0 mit den Rechten 0666 ein.

SUBSYSTEM=="tty", DRIVERS=="pl2303", MODE="0666", KERNELS=="ttyUSB*"

Die Angaben hier beziehen sich Auf die Einstellungen von

s. 26

(27)

GtkTerm

Recht brauchbares Terminalprogramm für serielle Schnittstellen

Configuration – Port

Baud Rate: 9600

Port: /dev/ttyUSB0

Flow Controll: Xon/Xoff

File – Send raw file

Recht brauchbares Terminalprogramm für serielle Schnittstellen

Configuration – Port

Baud Rate: 9600

Port: /dev/ttyUSB0

Flow Controll: Xon/Xoff

File – Send raw file

Referenzen

ÄHNLICHE DOKUMENTE

On the one hand the crisis put in the spotlight the degree of degradation of public capital, including in the highly productive advanced economies (DIW 2013), while on the other

Es darf nicht sein, dass sie allein die Last der Regulierung

durch einen blinkenden Punkt nach der Sekunde (in der Anzeige Sekunde und Funkturm-Symbol) angezeigt. Im An- schluss daran kann die Uhr nachgehen oder stehen bleiben und das

Ich habe mein Smartphone natürlich direkt neben mir liegen und reagiere direkt auf alle Nachrichten und schaue regelmäßig, was es Neues gibt... a b c a

The pro-Kremlin newspaper, Izvestiya reported June 24, that “Snowden’s flight to Moscow was coordinated with the Russian authorities and security services.” The

In the context of this deal, Russia would consent to new negotiations on further reductions of strategic nuclear weapons in exchange for the USA consent- ing to limit its

* bitte beachten Sie, dass Sie diese App zunächst auf Ihrem Firmen- oder Privat-Smartphone (iOS mind. Version 11 oder Android mind. V 6.0) installieren müssen.. Wählen

Falls die russische Industrie nicht effizien- ter wird und keine neuen, wettbe- werbsfähigen Produkte entwickelt und herstellt, wird Russland keine Großmacht mehr