Arduino Nano / lock fuses /SPM - LPM

Hallo,
durch nicht erfolgreiches Aufspielen einer Anwendung (culfw) wurden im Installationsprozess wohl die lock-fuses SPM und LPM gesetzt. D.h. m.E., dass "SPM nicht erlaubt ist, in den Urloader-Bereich zu schreiben und LPM nicht erlaubt ist, aus dem Urloader-Bereich zu lesen, wenn LPM aus dem Anwenderbereich ausgeführt wird. Wenn die Interruptvektoren in den Anwenderbereich gelegt wurden, sind die Interrupts gesperrt, wenn sie aus dem Urloaderbereich ausgeführt werden".

  • Aber was bedeutet dies für den weiteren Gebrauch des Nano (ein Blink-Programm lässt sich erfolgreich flashen)?
  • Wenn ein über die Arduino-IDE entwickeltes Programm Interrupts verwendet, gibt es Probleme / Abweichungen gegenüber dem Urszustand zu erwarten?
  • Ist es zutreffend, dass die lock-bits nicht über die Arduino-Umgebung zurück gesetzt werden können? Ein flashen des bootloaders ist jedenfalls fehl geschlagen.
  • Führt ein Chip-Reset zur Zerstörung des Nano?
    vielen Dank für Antworten
    Grüße

Ein flashen des bootloaders ist jedenfalls fehl geschlagen.

Dabei werden alle Fuses auf den richtigen Wert gesetzt.

Sollte nicht fehlschlagen.
Aber da ich nicht weiß, wie du das versucht hast, KA, warum das fehlschlägt!

Wenn ein über die Arduino-IDE entwickeltes Programm Interrupts verwendet, gibt es Probleme

Klar, wenn man Mist baut, gibts Probleme!
Weiß ich, ob du mit den Interrupts Mist baust?
Nein!
Aber ich vermute es.

Der Nachweis/Grund für meine Vermutung:

(ein Blink-Programm lässt sich erfolgreich flashen)
Das Arduino Blink funktioniert nicht ohne Interrupts.
Da gibts also keine Interrupt Probleme.

  • Führt ein Chip-Reset zur Zerstörung des Nano?

Was ist das?

Der Fehlercode beim Bootloaderbrennen ist

Fehler beim Brennen des Bootloaders.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x7e
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x1e
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x78
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x1e
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x06
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x98
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x9e

Nach hier nützt das Bootloaderbrennen ohnehin nichts, da hierdurch die lock-bits nicht gelöscht werden.

Das Blink-Programm nutzt m.W. keine Interrupts (z.B. INT0, PCINT0 oä.) mit den ISR-Routinen ISR(INT0_vect).

Ein Löschen soll über ein High-Voltage-Reset (12V) möglich sein. Dies ist unproblematisch, wenn der atmega328p quasi nackt vorliegt. Im Nano ist er jedoch mit anderen Komponenten verbaut. Und hier besteht schon die Frage, ob 12 V bei diesen Komponenten Schaden anrichten.

Nach hier nützt das Bootloaderbrennen ohnehin nichts, da hierdurch die lock-bits nicht gelöscht werden.

Ja klar...( ? ? )
Allerdings wird dabei ein Chip Erase gemacht.
Das Datenblatt gibt gerne zu den Vorgängen Auskunft.

Das Blink-Programm nutzt m.W. keine Interrupts

Sicherlich tut es das!
Beweis: delay() arbeitet nicht bei abgeschalteten Interrupts.

Der Fehlercode beim Bootloaderbrennen ist

Ich habe nach dem "Wie?" gefragt.
Nicht nach den Meldungen, die interessieren erst, wenn das "Wie?" geklärt ist.
Stichwort: ISP Programmer.

Und hier besteht schon die Frage, ob 12 V bei diesen Komponenten Schaden anrichten.

Möglich.
Aber solange der Chip noch ansprechbar ist, brauchst du keinen HV Programmer.

okay

den bootloader habe ich versucht, mit direkt an den USP-Port angeschlossenen Nano zu brennen. Ich habe also nicht einen Arduino als ISP wie beim flashen anderer µC dazwischen geschaltet. Mein Fehler, wenn es das sein sollte.

das atmegas328p Datenblatt habe ich auch schon einige Zeit konsuiltiert. Um in die Tiefe einzusteigen, man sehe es mir nach, benötige ich als des Englischen mächtiger aber nciht nicht mit einem Universitätsgrad der Elektrowissenschaft versehen Menschen Hilfestellung.

wenn es das sein sollte.

So ist es.

Universitätsgrad der Elektrowissenschaft

Habe ich auch nicht.

Und nochmal, aber jetzt in abschließender Deutlichkeit:
Da "Blink" funktioniert, ist deine Diagnose "Interrupts tun es nicht" definitiv falsch.
Der Fehler "Wenn ein über die Arduino-IDE entwickeltes Programm Interrupts verwendet, gibt es Probleme" liegt also nicht an den Interrupts. Sondern ist ein Fehler in deiner Anwendung.

Tipp:
Höchst vermutlich, ist es für dich unmöglich das Problem zu beheben, solange du an der falschen Stelle rum dokterst.

Bedankt

avrdude -c usbasp -p m324pa -n -v (fuses auslesen)

avrdude -c usbasp -p m324pa -U lfuse:w:0xf7:m -U hfuse:w:0xd0:m -U efuse:w:0xff:m (Fuses schreiben)

avrdude -c usbasp -p m324pa -U flash:r:taster.hex:i ( Flash auslesen)

avrdude -c usbasp -p m324pa -U lock:r:-:b (Lockbits lesen)

avrdude -p m324pa -c usbasp -e (Erase chip)