AVR AtTiny84 hängt auf 128-kHz-Takt fest, avrdude + Arduino, da ISP ihn nicht erreichen kann

Beim Experimentieren mit dem Stromverbrauch verschiedener Taktraten durch Setzen von Fuse-Bits habe ich anscheinend einen ATTiny84-Chip irreversibel auf den internen 128-kHz-Oszillator programmiert, und jetzt kann avrdude keine SPI-Kommunikation mehr mit dem Chip herstellen.

Ich habe einen Arduino Duemilanove verwendet, um den Chip mit der Skizze "ArduinoISP" zu programmieren.

Einige Avrdude-Befehlszeilen, die ich verwendet habe, wenn sie helfen - meine vergeblichen Versuche, es wieder auf 1 MHz zu bringen:

avrdude -p t84 -C "C:\Program Files (x86)\arduino-1.0.4\hardware\tools\avr\etc\avrdude.conf" 
    -c stk500v1 -P COM7 -b 19200 -U lfuse:w:0x62:m -u

avrdude -p t84 -C "C:\Program Files (x86)\arduino-1.0.4\hardware\tools\avr\etc\avrdude.conf" 
    -c stk500v1 -P COM7 -b 19200 -U lfuse:w:0x62:m -u -B833 -i833

Ich habe viele verschiedene Verzögerungen in den Einstellungen -B und -i ausprobiert, die von 1 us bis 10000 us reichen. Ausgabe ist:

avrdude: please define PAGEL and BS2 signals in the configuration file for part
ATtiny84
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.07s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.


avrdude done.  Thank you.

Das Hinzufügen der Option -F hilft nicht - es versucht zu programmieren, aber die Sicherungseinstellung übernimmt nicht.

Habe ich diesen $2,50-Chip für immer verloren? :)

Haben Sie sich diese Frage vor ein paar Stunden angesehen ? Ich glaube, dass ArduinoISP versucht, den Chip zu schnell zu programmieren, und dass ein niedrigerer SPI-Takt für den Programmierer helfen könnte.
Interessant - hört sich nach genau dem gleichen Problem an. Diese Optionen -B und -i sollen die SPI-Taktrate steuern, aber ich glaube nicht, dass sie mit der ArduinoISP-Programmierskizze wirksam werden. Vielleicht versuche ich morgen, diesen Code zu hacken, um zu sehen, ob ich die SPI-Rate verlangsamen kann.
Das sieht für mich nach der Lösung aus.

Antworten (3)

OK - Ich habe eine Version der ArduinoISP-Skizze gefunden, die eine langsame Option für die SPI-Programmierung unterstützt:

https://github.com/adafruit/ArduinoISP/blob/master/ArduinoISP.ino

Durch die Definition des LOW_SPEEDMakros konnte ich die Fuse-Bits auf die Standardeinstellung von 1 MHz umprogrammieren. Problem also gelöst.

Wow. Ich hatte Probleme mit einem ATTiny44A, erhielt zufällige Gerätesignaturen und konnte sporadisch die Signatur- und Sicherungseinstellungen richtig lesen. Diese Skizze hat das sofort behoben. Musste nicht einmal eingestellt werden LOW_SPEED. Danke!

https://github.com/lmpipaon/ArduinoISP_slow_SCK.git

ArduinoISP langsames SCK

Es ist eine Modifikation der Skizze Arduino ISP, die es ermöglicht, dass eine niedrigere SCK-Frequenz Mikrocontroller mit langsamen Takten programmiert, z. B. unter Verwendung der durch 8 geteilten Watchdog-Uhr.

Wenn der Programmiermodus beginnt, beginnt ArduinoISP Niederfrequenz mit dem System Clock Prescaler.

Wenn der Programmiermodus beendet ist, wird der System Clock Prescaler wieder auf 1 gesetzt

Ich gerate manchmal in diese Situation, wenn ich Flash und Fusebits eines Teils separat programmiere (AVR Studio 4 behauptet, dass die Teilesignatur falsch ist, also lässt es mich nicht das .elf-Format verwenden).

Ich habe versucht, die Programmiertaktrate so niedrig wie möglich zu senken, und wie Sie funktioniert es nicht. Was funktioniert , ist das Entlöten des Kristalls und das Ersetzen durch einen Impulsgenerator, der auf etwa 1 MHz eingestellt ist, gerade lange genug, um die Sicherungen neu zu programmieren. Wenn Sie keinen Benchtop-Funktionsgenerator haben, sollte es schnell gehen, einen einfachen R/C- oder Quarzimpulsgenerator zu bauen. Viele Schaltpläne online und es ist ein nützliches Werkzeug, das man immer dabei haben sollte.

Ein Ansatz, mit dem ich derzeit experimentiere (wenn ich einen Arduino als Programmierer verwende), besteht darin, einfach einen der PWM-Pins als 1-MHz-Impulsgenerator zu verwenden.
Interessant - danke - in meinem Fall verwendet der Chip einen internen 128-kHz-Takt, also glaube ich nicht, dass ich ihn durch externe Taktänderungen beeinflussen könnte.
Ja, ich fürchte, @lyndon und ich waren auf einer Tangente – wenn Ihre MCU auf eine interne Taktquelle eingestellt ist, könnte möglicherweise keine externe Taktquelle einen Unterschied machen. Es hilft jedoch, die SPI-Taktrate zu verringern – es geht nur um eine Softwareimplementierung, da die Hardwareimplementierung paradoxerweise nicht so konfiguriert werden kann, dass sie LANGSAM genug für Ihre Zwecke ist.