Mehrere AVRs mit einem ISP programmieren: Welche Leitung soll unterbrochen werden?

Nehmen wir an, ich habe zwei AVRs, die an einen ISP-Anschluss angeschlossen sind.

Geben Sie hier die Bildbeschreibung einUm in dieser Konfiguration nur eine MCU zu programmieren, muss ich eine (oder mehrere) Leitungen zu der MCU unterbrechen, die ich in diesem Moment nicht programmieren möchte.

Die erste Zeile fällt mir ein ist VCC, was großartig wäre, da ich Strom sparen würde. Aber wie wir wissen, wird der Strom durch digitale Leitungen geleitet, die Schutzdioden zu VCC und GND haben.

Also würde ich die RESET-Leitung wählen. Irgendwelche anderen Ideen?

Was haben es mit diesen Dioden in der MCU1 auf sich? AVRs haben diese Struktur auf dem Reset-Pin nicht! (alle anderen Pins, nur zurücksetzen ist etwas Besonderes)
@Jasen, wahrscheinlich hast du Recht in Bezug auf den RESET-Pin. Darüber war ich mir nicht im klaren. Setzen Sie dies einfach, um den Diodenschutz an digitalen Pins anzuzeigen.
Die parallele Programmierung verwendet 12 V beim Zurücksetzen als Aktivierungssignal, sodass keine obere Schutzdiode vorhanden ist.
@Jasen Parallelprogrammierung ist eine andere Sache, denke ich. ISP verwendet auch 12V bei RESET?
Nein, auf avr verwendet ISP nur VCC und 0 V, aber PIC verwendet 12 V für ISP
... Und das ist der Grund, warum alle anderen JTAG verwenden ...
Sie haben fälschlicherweise Dioden auf den Reset-Pin gezogen. Diese sind nicht verfügbar, da der Reset-Pin für die Hochspannungsprogrammierung zur Wiederherstellung der Sicherung verwendet wird.

Antworten (2)

Unterbrechen Sie MOSI, weil dies eine Ausgabe zurück zum Host ist, und unterbrechen Sie SCK, damit die andere MCU die Programmierbefehle nicht sehen kann.

bearbeiten - dies funktioniert immer noch nicht, da das Zurücksetzen während der Programmierung ein- und ausgeschaltet wird. Andere andere Datenleitungen müssen ebenfalls unterbrochen oder zurückgesetzt werden, wenn die anderen MCUs niedrig gehalten werden.

Ich denke, das ist der Grund, warum die meisten Designs einen separaten Programmierkopf für jede MCU verwenden.

MOSI ist die Datenleitung VOM Programmierer ZUR MCU. Ist es nicht? Warum denkst du, dass es besser ist als RESET?
Wenn Sie das Zurücksetzen trennen, wird die andere MCU ausgeführt und verwendet möglicherweise den GPIO für einige Zwecke ....
Guter Punkt! Ich habe nicht darüber nachgedacht. Ist das richtig, dass die RESET-Leitung während des Programmiervorgangs die ganze Zeit auf Low geht?
Sieht so aus, als hätten Sie Recht, ich denke, das ist der Grund, warum die meisten Designs einen Programmierheader für jede MCU verwenden.
Es sieht also so aus, als ob das Brechen der SCK-Leitung ausreicht. In meinem speziellen Fall werden SPI-Leitungen nur zum Programmieren verwendet.

Ich denke, um dies zu tun, müssen Sie den anderen Chip zurückgesetzt halten, um das IO High-Z (nicht angesteuert) zu machen.
Normalerweise macht das CS (Chip Select), aber hier ist kein Chip Select verfügbar. Siehe Reset als !CS (nicht Chipauswahl).

Update: Dieses Konzept funktioniert nicht für Atmel-Teile. Das Zurücksetzen auf Low hält nur den Programmiermodus. Sie können den Teil, den Sie nicht programmieren möchten, hochsetzen. Sie müssen jedoch sicherstellen, dass das Programm die SPI-Pins nicht verwendet.


Allerdings würde ich diesen Weg nicht gehen. Ich würde die Kosten eines Betreibers vergleichen, der das Kabel ändert, zwei Programmierer verwendet oder Multiplexer verwendet.

Zurücksetzen niedrig zu halten, während ISP-ähnliche Zyklen auf den SPI-Leitungen ausgeführt werden, kann zu einer Beschädigung des Flash-Speichers des nicht zielgerichteten ATmega führen.
@ChrisStratton - Wie ist das möglich? Das Zurücksetzen auf Low muss ein absoluter Schutz sein. Redest du von einem Bug?
@EgorSkriptunoff nicht für ISP ist es nicht. Reset ist so ziemlich die ganze Zeit niedrig. Dies kann ein "Gotcha" sein, wenn ein Arduino als ISP-Adapter verwendet wird, um einen Ziel-AVR zu programmieren, der selbst ein SPI-Peripheriegerät ausführt. Denken Sie, Sie halten den Programmierer einfach im Reset, um ihn "aus dem Weg zu räumen", ohne die Verbindung zu trennen, während Sie das Zielprogramm ausprobieren, und Sie können Ihren im Reset gehaltenen Programmierer Arduino de-bootloaden, wenn er den SPI-Verkehr als ISP falsch interpretiert Operationen.
@ChrisStratton - Das sollte nicht passieren. Sie müssen eine korrekte Signatur (die wie ein Passwort funktioniert) senden, um in den AVR-Programmiermodus zu gelangen. Hat Atmel dieses Verhalten bestätigt?
@EgorSkriptunoff - in diesem Fall handelt es sich bei dem unerwünschten Datenverkehr um ISP-Operationen, einen anderen ATmega, vermutlich das gleiche Modell. Aber ich habe es auch persönlich zweimal mit unkorreliertem SPI-Verkehr gesehen.
@ChrisStratton Du hast Recht, die Antwort wurde aktualisiert. Atmel widerspricht sich im Datenblatt zum Pinzustand beim Reset.