PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere ATMEL parallel programmieren



Realisator
08.05.2009, 17:24
Meine bisherige Recherche zum Thema brachte widersprüchliche Aussagen zu Tage. Aber vielleicht hat von Euch einer *reale* Erfahrung damit?

Ich möchte auf einer Platine 14 identische Controller, vorzugsweise ATmega44 einsetzen.
Alle sollen ein 100% identisches Programm erhalten.

Wäre toll, alle gleichzeitig, am liebsten per SPI, zu flashen!
Dachte mir, das müsste doch wohl gehen, wenn ich:

- Alle MOSI-Pins zusammenschalte
- Alle SCK-Pins zusammenschalte
- Aber nur von einem Controller den MISO zum Programmiergerät führe.

Weiß einer, ob das geht?

Habe mal von einem ATMEL per Logic-Analyzer das SPI Protokoll angeschaut. Im Grunde verstehe ich nicht, warum das bidirektional ist.

Sieht aus, als würde _meistens_ aus dem MISO nach 8 Takten das selbe herauspurzeln, was vorher per MOSI hineingeschrieben wurde.
Aber oft eben auch nicht, da erscheint was anderes am MISO!?! Warum?
Muss zugeben, dass ich bisher aus den Datenblättern nicht recht schlau wurde in dieser Beziehung.

Hat von Euch schon mal jemand wirklich real mehrere identische Controller in der Schaltung gleichzeitig programmiert?

Beste Grüße
Realisator

thewulf00
08.05.2009, 20:17
MISO ist nicht bidirektional.
Ich habe einen Umsetzer geschrieben, der die 5V-ISP-Signale auf eine 3V3-Zielplatform "übersetzt". Und ich habe bei den Hinleitungen (also MOSI, SCK, RESET) einfach einen Spannungsteiler gemacht und bei der Rückleitung (MISO) eine total billige Transistor-Verstärkerschaltung.
Ergebnis ist logischerweise, dass MISO nur noch in eine Richtung geht.
Und was soll ich sagen? Es geht einwandfrei - ohne jede Einschränkung.

Aber ich denke nicht, dass es bei Dir so einfach ist. Denn wenn ein Atmel ein Problem hat, kriegt das der Master nichmal mit.

stefan_Z
09.05.2009, 16:06
Also wenn man die AVRs nacheinender anklemmt, dann geht es gut mit PonyProg und der einegbauten Scriptingfunktion.
Da reichts dann den Nächsten anzuklemmen und STRG-I zu drücken.
Die Fuses und soweiter kann man direkt auch mit stellen.

Für dein Problem könnte ich mir verschiedene Lösungsansätze vorstellen:
- VCC zum Proggen per Jumperleiste deaktivieren und mit nem Mehrstufenschalter halt immer weiterschalten.
- Zusätzlichen AVR als Prog-Master umfunktionieren um den Schalter zu ersetzen - der AVR bekommt das HEX eingepflanzt und proggt alle nacheinander.
- Einen Bootloader so modifizieren, dass alle gleichzeitig per UART geflash werden. Weiß aber nicht, ob man das so gut umsetzen kann - auch wegen der elektrischen Eigenschaften der UART. Ggfs. auch hier alle nacheinander flashen, das geht per UART ja rasend schnell im Gegensatz zu PonyProg.

markusj
09.05.2009, 16:54
SPI verwendet per Definition keine einzige Leitung bidirektional.
Und wenn du dir mal in dem Datasheet eines AVR deiner Wahl nachsiehst, wirst du feststellen, dass die Daten die da zurückkommen nicht immer die versendeten sind - und dass diese Informationen für gewisse Zwecke benötigt werden.

Theoretisch könntest du das so anschließen wie du es erwähnt hast, allerdings können dir auch noch Hässlichkeiten wie Leitungsreflektionen etc. dabei die Suppe versalzen - dieses Feld überlasse ich aber lieber versierteren Forumsmitgliedern.
Außerdem hat der Ausgangstreiber deines Programmers auch eine Leistungsgrenze, ob du an die stößt, weiß ich aber nicht.

Auf jeden Fall verlierst du damit aber eine gewisse Schutzfunktionalität, die das Protokoll nicht umsonst vorsieht.

mfG
Markus

PS: Eine weitere Quelle zu diesem Thema: Die AN910
PPS: Die Idee mit dem Bootloader finde ich ganz nett, ich würde sogar so weit gehen, die AVRs ringförmig zusammenzuschließen und dann mittels einem eigene Protokoll die Daten von AVR zu AVR weiterleiten - sollte ein Fehler auftreten, müssen halt alle unterbrechen.