Forum: Compiler & IDEs avr-prog durch avrdude ersetzen - atmega32


von Matthias W. (Firma: privat) (counterroot)


Lesenswert?

Hallo!
Ich möchte von AVR Prog aus dem AVRStudio auf linux wechseln und da gibt 
es ja avrdude.
Welchen befehl muss ich nutzen, bzw. wo finde ich den wenn ich genauso 
wie beim AVR Prog einen Atmega32 Prozessor programmieren will.

Gibt es beim avrdude eigentlich auch die möglichtkeit z.B. Fusebits 
und/oder z.B. die Ports des Prozessors als Ausgänge zu definieren?
pmb µatthias

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Matthias W. wrote:

> Welchen befehl muss ich nutzen, bzw. wo finde ich den wenn ich
> genauso wie beim AVR Prog einen Atmega32 Prozessor programmieren
> will.

In der man page bzw. in der info-Page, je nachdem, was du davon
installiert hast.  Die info-Page lässt sich auch als PS oder PDF
generieren, oder aber halt für das info(1)-Kommando.

Nach dem zu urteilen, was du über deine Umgebung geschrieben hast,
sieht das Kommando ungefähr so aus:
1
avrdude -p m32 -c avr910 -P /dev/ttyS0 -U yourimage.hex

/dev/ttyS0 wäre dabei die erste serielle Schnittstelle.  Da du von
avrprog.exe schriebst, gehe ich davon aus, dass dein Programmiergerät
zum AVR910-Protokoll kompatibel ist.  Den Namen des Prozessors kann
man auch "atmega32" ausschreiben, aber "m32" genügt.

Die genannte Option
1
-U yourimage.hex

ist dabei die Kurzform für
1
-U flash:w:yourimage.hex:i

-U: "update memory"
flash: welchen Speicherbereich
yourimage.hex: Name der Quelldatei
i: es handelt sich um eine Intel-Hex-Datei

> Gibt es beim avrdude eigentlich auch die möglichtkeit z.B. Fusebits

Ja, natürlich.  Die werden aber generell als Zahl (z. B. hexadezimal)
angegeben dort.  Eine Möglichkeit ist, die Fuses (und auch andere
Teile des Speichers, z. B. einzelne EEPROM-Zellen) im sogenannten
Terminalmodus interaktiv zu lesen und zu schreiben.  Dafür nimmst du
statt der -U-Option die Option -t.  Da man die Fuses oft nur ein
einziges Mal programmieren muss, genügt dieser interaktive Modus sehr
oft.

Wenn du die Fuses aus der Kommandozeile gleich mit schreiben willst,
dann geht das auch mit -U, aber diesmal nur in der Langform.  Nehmen
wir mal an, du willst deinen ATmega32 auf folgendes einstellen:

. On-chip debugging abgeschaltet
. JTAG und ISP aktiv
. EEPROM wird bei chip erase nicht gelöscht
. Resetvektor zeigt auf Applikation
. brown-out nicht aktiviert
. externer Quarz mit 14,... MHz
. Startup-Zeit 16348 Taktzyklen zuzüglich 4,1 ms nach Reset

dann ergeben sich laut Datenblatt die high fuse zu 0x81 und die low
fuse zu 0xef.  Jede Fuse belegt einen eigenen (1 Byte langen)
Speicherbereich, die beiden -U-Optionen dafür wären:
1
-U hfuse:w:0x81:m -U lfuse:w:0xef:m

Die Namen der Speicherbereiche lassen sich auf den kleinsten
eindeutigen Wert abkürzen, also "hf" und "lf" genügen.  Das
,,Datei''format m am Ende besagt, dass der Dateinamen gar keine Datei
benennt, sondern in numerischer Form den zu programmierenden Wert (in
üblicher C-Notation) beinhaltet.

> und/oder z.B. die Ports des Prozessors als Ausgänge zu definieren?

Das wiederum geht nur aus der Applikation selbst, nicht via Fuse und
damit nicht direkt vom Programmer aus.

von Matthias W. (Firma: privat) (counterroot)


Lesenswert?

dankeschön =) sehr detailiert thumbup
Werde es ausprobieren sobald ich wieder an meine Hardware komme und 
berichten. 3 Tage.
gruß µatthias

von Matthias W. (Firma: privat) (counterroot)


Lesenswert?

okay. ausprobiert:

[root@progchip blinkyled]# avrdude -p m32 -c avr910 -P /dev/ttyS0 -U 
prog.hex

avrdude: avr910_recv(): programmer is not responding
[root@progchip blinkyled]# avrdude -p m32 -c avr910 -P /dev/ttyS1 -U 
prog.hex

avrdude: avr910_recv(): programmer is not responding


jemand vielleicht eine idee?
pmb µatthias

debugging:

[root@progchip blinkyled]# avrdude -p m32 -c avr910 -P /dev/ttyS0 -U 
prog.hex -vvvv

avrdude: Version 5.3.1, compiled on Mar  2 2007 at 11:28:00
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         System wide configuration file is "/etc/avrdude/avrdude.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular 
file, skipping

         Using Port            : /dev/ttyS0
         Using Programmer      : avr910
         AVR Part              : ATMEGA32
         Chip Erase delay      : 9000 us
         PAGEL                 : PD7
         BS2                   : PA0
         RESET disposition     : dedicated
         RETRY pulse           : SCK
         serial program mode   : yes
         parallel program mode : yes
         Timeout               : 200
         StabDelay             : 100
         CmdexeDelay           : 25
         SyncLoops             : 32
         ByteDelay             : 0
         PollIndex             : 3
         PollValue             : 0x53
         Memory Detail         :

                                  Block Poll               Page 
Polle
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- --------
-
           eeprom         4    10    64    0 no       1024    4      0 
9000  9000 0xff 0xf
f
                                  Block Poll               Page 
Polle
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- --------
-
           flash         33     6    64    0 yes     32768  128    256 
4500  4500 0xff 0xf
f
                                  Block Poll               Page 
Polle
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- --------
-
           lfuse          0     0     0    0 no          1    0      0 
2000  2000 0x00 0x0
0
                                  Block Poll               Page 
Polle
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- --------
-
           hfuse          0     0     0    0 no          1    0      0 
2000  2000 0x00 0x0
0
                                  Block Poll               Page 
Polle
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- -------- 
-
           lock           0     0     0    0 no          1    0      0 
2000  2000 0x00 0x0 
0
                                  Block Poll               Page 
Polle 
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac 
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- -------- 
-
           signature      0     0     0    0 no          3    0      0 
0     0 0x00 0x0 
0
                                  Block Poll               Page 
Polle 
d
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBac 
k
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- -------- 
-
           calibration    0     0     0    0 no          4    0      0 
0     0 0x00 0x0 
0

         Programmer Type : avr910
         Description     : Atmel Low Cost Serial Programmer

avrdude: Send: S [53]
avrdude: ser_recv(): programmer is not responding
avrdude: avr910_recv(): programmer is not responding

von Simon K. (simon) Benutzerseite


Lesenswert?

Bor, ist das dein Ernst?...

von Matthias W. (Firma: privat) (counterroot)


Lesenswert?

warum denn nicht?
~~ gelöst
der richtige Befehlssatz lautet:

avrdude -p m32 -c avr911 -P /dev/ttyS0 -U flash:w:prog.hex -b 115200

von Gast (Gast)


Lesenswert?

http://janhbade.ja.funpic.de/

hab mal ne GUI für avrdude gebastelt, läuft auch unter linux da Java...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

AVR911, dann ist das irgendein neuerer Programmer.  Ist der immer oder
standardmäßig auf 115200 Bd eingestellt, oder ist das irgendwie eine
Compile-Option der Firmware?  Wenn das der Default ist, könnte man
es auch generell in der avrdude.conf ändern.  Die 19200 sind sicher
vom AVR910 übernommen worden bzw. entsprechen dem Butterfly-Bootloader
(dessen Benutzung gleich ist dem AVR911).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.