avrdude liest lowfuse 0x00 highfuse 0x00 ext.fuse 0x00 auf Arduino Uno aus

OP #7563982
Lesenswert?

Hallo,

wenn ich auf die u.a. hier Beitrag "Re: MEGA1284P XPLAINED über USB mit avrdudue programmieren" beschriebene Weise versuche, mit avrdude die Fuses auf einem Arduino Uno mit ATmega328P über USB (nicht ISP) auszulesen, erhalte ich drei Mal 0x00.

1
$ avrdude -p m328p -P /dev/ttyACM0 -c arduino -U lf:r:-:h -U hf:r:-:h -U ef:r:-:h -v 
2

3
avrdude: Version 7.1
4
         Copyright the AVRDUDE authors;
5
         see https://github.com/avrdudes/avrdude/blob/main/AUTHORS
6

7
         System wide configuration file is /etc/avrdude.conf
8
         User configuration file is /home/a.../.avrduderc
9
         User configuration file does not exist or is not a regular file, skipping
10

11
         Using Port                    : /dev/ttyACM0
12
         Using Programmer              : arduino
13
         AVR Part                      : ATmega328P
14
         Chip Erase delay              : 9000 us
15
         PAGEL                         : PD7
16
         BS2                           : PC2
17
         RESET disposition             : possible i/o
18
         RETRY pulse                   : SCK
19
         Serial program mode           : yes
20
         Parallel program mode         : yes
21
         Timeout                       : 200
22
         StabDelay                     : 100
23
         CmdexeDelay                   : 25
24
         SyncLoops                     : 32
25
         PollIndex                     : 3
26
         PollValue                     : 0x53
27
         Memory Detail                 :
28

29
                                           Block Poll               Page                       Polled
30
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
31
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
32
           eeprom                 65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
33
           flash                  65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
34
           lfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
35
           hfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
36
           efuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
37
           lock                    0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
38
           signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
39
           calibration             0     0     0    0 no          1    1      0     0     0 0x00 0x00
40

41
         Programmer Type : Arduino
42
         Description     : Arduino for bootloader using STK500 v1 protocol
43
         Hardware Version: 3
44
         Firmware Version: 4.4
45

46
avrdude: AVR device initialized and ready to accept instructions
47
avrdude: device signature = 0x1e950f (probably m328p)
48
avrdude: reading lfuse memory ...
49
avrdude: writing output file <stdout>
50
0x0
51
avrdude: reading hfuse memory ...
52
avrdude: writing output file <stdout>
53
0x0
54
avrdude: reading efuse memory ...
55
avrdude: writing output file <stdout>
56
0x0
57

58
avrdude done.  Thank you.

Das können ja nicht die richtigen Fuse-Werte des ATmega328P sein.

(Firma: Gast) #7564091
Lesenswert?

Steve van de Grens schrieb:

Versuche es mal langsamer mit: -B20

Das hilft nicht! Denn die Kommunikation mit dem Bootloader tuts ja. Es ist der 256 Worte große opti Bootloader auf dem UNO und der kann weder Fuses lesen, noch das EEPROM lesen oder beschreiben.

Also kann ich dem TO nur beipflichten: Es ist so, wie es ist.

Wenn ihm das nicht passt, braucht es einen ISP Adapter, oder ihm spielt ein Programm auf den UNO welches die Fuses liest.

Das Ganze ist allerdings auch unsinnig, da die Fuses des UNO µC auch in der boards.txt notiert sind. Man also dort nachlesen kann.

#7564107
Lesenswert?

Alexander S. schrieb:

mit avrdude die Fuses auf einem Arduino Uno mit ATmega328P über USB (nicht ISP) auszulesen

Warum einfach wenn es auch umständlich geht ....

Also ich verwende einen beliebigen ISP Programmer der von AVR Studio oder Atmel Studio angesprochen werden kann. Damit kann ich nach Belieben und recht komfortabel jede einzelne Fuse setzen oder löschen. Und brauch nicht mal einen Fuse Calculator (noch so ein Umstands-Kram). Denn AVR Studio oder Atmel Studio sagt mir zu den Fuses alles was ich brauche bzw. wissen muss.

Ansonsten bleibt zu zitieren: Beitrag "Re: Timing-Problem"

OP #7564122
Lesenswert?

Steve van de Grens schrieb:

Ich dachte, er verwendet einen Arduino als ISP Programmieradapter.

Alexander S. schrieb:

mit avrdude die Fuses auf einem Arduino Uno mit ATmega328P über USB (nicht ISP) auszulesen

Wie geschrieben, der (Linux) PC war nur über USB direkt mit dem USB-Anschluss des Uno verbunden und als programmer in avrdude war "-c arduino" ausgewählt. D.h. der bootloader kann wirklich nur Programme hochladen (und ggf. auslesen) und sonst nichts. Ok. Mir ist schon klar, dass ich die Fuses per ISP mit einem Atmel ICE oder AVR ISP MkII auslesen kann.

P.S. Falls avrdude erkennen kann, dass ein bootloader vorhanden ist und die Fuses nicht gelesen werden können, wäre evtl. eine Info dazu in der Ausgabe hilfreich.

(Firma: Gast) #7564134
Lesenswert?

Der Arduino UNO Bootloader emuliert einen Teil des STK500V1 Protokolls. Und darum kann AVRdude das auch nicht erkennen.

Andere Bootloader, z.B. der des Mega kann deutlich mehr Funktionen, ist dafür allerdings auch 4 mal so groß.

Tipp: Falls dir nicht schmeckt, was der UNO Bootloader kann/macht, könntest du den alten vom Nano mal aufspielen und es nochmal versuchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren