Forum: Mikrocontroller und Digitale Elektronik avrdude liest lowfuse 0x00 highfuse 0x00 ext.fuse 0x00 auf Arduino Uno aus


von Alexander S. (alesi)


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.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Ich kann nur bestätigen, dass dem so ist.

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Versuche es mal langsamer mit: -B20

von Arduino F. (Firma: Gast) (arduinof)


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.

von Wastl (hartundweichware)


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"

von Steve van de Grens (roehrmond)


Lesenswert?

Arduino F. schrieb:
> Das hilft nicht!

Ich dachte, er verwendet einen Arduino als ISP Programmieradapter. In 
dem verlinkten Thread wurden die Fuses schließlich auch über ISP 
ausgelesen.

Beitrag "Re: MEGA1284P XPLAINED über USB mit avrdudue programmieren"

Mit dem Bootloader kann man Fuses weder lesen noch ändern. Da stimme ich 
dir zu.

: Bearbeitet durch User
von Alexander S. (alesi)


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.

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Alexander S. schrieb:
> Falls avrdude erkennen kann, dass ein bootloader vorhanden ist

Kann avrdude in diesem Fall nicht, denn der Bootloader simuliert einen 
STK500 kompatiblen ISP Programmieradapter.

von Arduino F. (Firma: Gast) (arduinof)


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.

: Bearbeitet durch User
von Alexander S. (alesi)


Lesenswert?

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

Danke für den Tipp aber ich habe gelernt, dass bootloader doch sehr 
eingeschränkt und spezifisch sind, siehe 
Beitrag "Re: MEGA1284P XPLAINED über USB mit avrdudue programmieren"

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.