Forum: Mikrocontroller und Digitale Elektronik Flashen atmega328P über ISP funktioniert nicht avrdude


von Chandler B. (chandler)


Lesenswert?

Hallo,
ich habe Probleme beim Flashen von einem atmega328P (Arduino-Board) über 
ISP.
1
H:\Projects\C\AVR\uart>avrdude -patmega328p -cstk500 -P\\.\COM3 -b115200 -D -Uflash:w:out\main.hex:i
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.04s
6
7
avrdude: Device signature = 0x1e950f
8
avrdude: reading input file "out\main.hex"
9
avrdude: writing flash (294 bytes):
10
11
Writing | ################################################## | 100% 0.15s
12
13
avrdude: 294 bytes of flash written
14
avrdude: verifying flash memory against out\main.hex:
15
avrdude: load data flash data from input file out\main.hex:
16
avrdude: input file out\main.hex contains 294 bytes
17
avrdude: reading on-chip flash data:
18
19
Reading | ################################################## | 100% 0.15s
20
21
avrdude: verifying ...
22
avrdude: verification error, first mismatch at byte 0x0086
23
         0x28 != 0x79
24
avrdude: verification error; content mismatch
25
26
avrdude: safemode: Fuses OK (E:07, H:D6, L:FF)
27
28
avrdude done.  Thank you.

was genau bedeutet das verification error?
was ist gemeint mit byte 0x0086? Was steht da drinn/sollte da drinn 
stehen?

von Jack V. (jackv)


Lesenswert?

Chandler B. schrieb:
> was genau bedeutet das verification error?

Der Vergleich der ursprünglichen und der zurückgelesenen Daten zeigt 
einen Unterschied.

Chandler B. schrieb:
> was ist gemeint mit byte 0x0086?

Die Adresse, an welcher die Abweichung auftrat.

Chandler B. schrieb:
> Was steht da drinn/sollte da drinn
> stehen?

0x28 und 0x79

von Chandler B. (chandler)


Lesenswert?

Jack V. schrieb:
> Chandler B. schrieb:
>> Was steht da drinn/sollte da drinn
>> stehen?
>
> 0x28 und 0x79

Ja, das ist mir bewusst.
Aber woher kommt 0x28 und 0x79?
von meinem Code? Oder irgendwas vom atmega?
Und wenn der das Flasht und wieder ausliest, wieso kann das 
unterschiedlich sein?

von Axel S. (a-za-z0-9)


Lesenswert?

Chandler B. schrieb:

> Aber woher kommt 0x28 und 0x79?
> von meinem Code? Oder irgendwas vom atmega?

Das eine ist dein Code, das andere was im ATMega steht.

> Und wenn der das Flasht und wieder ausliest, wieso kann das
> unterschiedlich sein?

Anscheinend ist der ATmega nicht leer. Die Kommandozeilenoption -D 
verhindert, daß avrdude das automatisch macht. Warum steht das da?
1
~ $avrdude 
2
Usage: avrdude [options]
3
Options:
4
...
5
  -D                         Disable auto erase for flash memory

von Chandler B. (chandler)


Lesenswert?

Axel S. schrieb:
> Das eine ist dein Code, das andere was im ATMega steht.

ok?
1
:100000000C9434000C9446000C9446000C9446006A
2
:100010000C9446000C9446000C9446000C94460048
3
:100020000C9446000C9446000C9446000C94460038
4
:100030000C9446000C9446000C9446000C94460028
5
:100040000C9446000C9446000C9446000C94460018
6
:100050000C9446000C9446000C9446000C94460008
7
:100060000C9446000C94460011241FBECFEFD8E03C
8
:10007000DEBFCDBF29E0A0E0B1E001C01D92A030FD
9
:10008000B207E1F70E9479000C9491000C940000F3
10
:100090009093C5008093C400E1ECF0E0808188611A
11
:1000A000808386E08093C20008958091C00087FF1E
12
:1000B00003C08091C600F9CF0895FC019191992366
13
:1000C00039F08091C00085FFFCCF9093C600F6CF39
14
:1000D00008958091C00087FFFCCF8091C6000895ED
15
:1000E0008091C00087FF03C08091C600089580E022
16
:1000F0000895259A2D9887E690E00E9448000E9476
17
:1001000055007894C0E20E94690080930000882323
18
:10011000D1F380E090E00E945D0085B18C2785B925
19
:06012000F2CFF894FFCFBE
20
:00000001FF
das ist meine HEX-file.
die einzige 0x28 die ich dort gefunden habe, ist in der Prüfsumme, aber 
an der Adresse 0x0030 bis 0x0040.

Axel S. schrieb:
> Anscheinend ist der ATmega nicht leer. Die Kommandozeilenoption -D
> verhindert, daß avrdude das automatisch macht. Warum steht das da?

Warum das da stand weiß ich nicht genau. Hat bisher sonst auch immer 
funktioniert und ich habe den Befehl immer kopiert.
Habe es entfernt und jetzt schient es geflasht zu haben.

Zumindest funktioniert der Code auf dem Controller.

von Alexander S. (alesi)


Lesenswert?

Chandler B. schrieb:
> Und wenn der das Flasht und wieder ausliest, wieso kann das
> unterschiedlich sein?

https://www.tspi.at/2021/08/27/avrverificationfailed.html

Chandler B. schrieb:
> das ist meine HEX-file.
> die einzige 0x28 die ich dort gefunden habe, ist in der Prüfsumme, aber
> an der Adresse 0x0030 bis 0x0040.

Chandler B. schrieb:
> avrdude: verification error, first mismatch at byte 0x0086
>          0x28 != 0x79

Suchst Du den ersten oder zweiten Wert? Welches ist der Wert aus Deinem 
hex der geschrieben werden sollte und welches der gelesen wurde?
In Deinem hex steht hinter 0x0080 eine 79

Chandler B. schrieb:
> :10008000B207E1F70E9479000C9491000C940000F3

von Axel S. (a-za-z0-9)


Lesenswert?

Chandler B. schrieb:
> Axel S. schrieb:
>> Anscheinend ist der ATmega nicht leer. Die Kommandozeilenoption -D
>> verhindert, daß avrdude das automatisch macht. Warum steht das da?
>
> Warum das da stand weiß ich nicht genau. Hat bisher sonst auch immer
> funktioniert und ich habe den Befehl immer kopiert.

Wie gesagt: wenn der AVR vor dem Flashen leer war, also fabrikneu oder 
bereits gelöscht, dann geht das auch. Aber wenn nicht, dann nicht.
Und zum Glück hast du die Verifikation nicht auch noch abgeschaltet, 
sonst hättest du es gar nicht mitbekommen. Es hat schon seinen Grund 
warum avrdude den Flash automatisch löscht, wenn es aufgefordert wird 
ihn zu beschreiben.

> Habe es entfernt und jetzt schient es geflasht zu haben.

Natürlich.

von Hmmm (hmmm)


Lesenswert?

Chandler B. schrieb:
> Aber woher kommt 0x28 und 0x79?
> von meinem Code?

In Deinem Code steht 0x79, im Flash stand danach aber 0x28.
1
0x79 = 0111 1001
2
0x28 = 0010 1000

Leeres/gelöschtes Flash enthält 0xff, beim Beschreiben ohne Löschen kann 
ausschliesslich High durch Low ersetzt werden, nicht umgekehrt.

Hier waren also Bit 0, 4 und 6 bereits vom vorigen Beschreiben 0, und 
mangels Löschvorgang blieb es dabei.

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.