PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierung mehrerer Controllers?



NemesisoD
01.12.2006, 11:13
Hallo zusammen,

ich habe ein kleines Projekt in dem sich insgesamt drei Microgontroller (2x ATMega32 und einen anderen Controller) unterhalten können (I2C).
Wenn ich einen Controller Programmienen möchte, muss ich ja mein Programmierkabel immer an den Controller anschließen auf dem ich die Software haben möchte. Das kann später wenn meine Controler in einem Gehäuse sind etwas Kompliziert werden.

Daher habe ich mich gefragt ob es nicht möglich ist, einen Controller von einem anderen Controller wärend laufenden Betrieb Programmieren zu können?

Etwa das ich am PC dem ersten Controller die HEX-Datei schicke (z.B. RS232) mit der Anweisung welcher Controller dieses Programm bekommen soll, und der Controller Programmiert diesen dann selbstständig!

Wäre sowas möglich und wenn ja wie?

Gruß NemesisoD

askazo
01.12.2006, 12:57
Ich hab's selbst noch nie gemacht, daher kann ich Dir keine genauen Tipps geben. Grundsätzlich gibt es aber 2 Möglichkeiten, wie Du das machen kannst:

a) Über eine JTAG Daisy Chain. Dazu brauchst Du aber ein JTAG ICE oder vergleichbares, um die Controller zu programmieren. Wie ganau das funktioniert, kann ich Dir nicht sagen. Vielleicht gibt es da von Atmel eine Application Note zu.

b) Du programmierst die Controller 2 und 3 einmal mit einem Bootloader. Dann kannst Du von Controller 1 per I2C die Firmware in die anderen Controller schreiben. Allerdings musst Du dann in Controller 1 soviel Platz im Flash haben, dass der Code von allen 3 Controllern reinpasst.

askazo

NemesisoD
04.12.2006, 11:48
Danke für den Tipp,

kann ich nicht den Programmcode auch in ein externes EEPROM laden, und der Bootloader der Controller holt sich nachdem RESET sein Code aus dem Speicher?

Oder kann ich das Programm nicht aus dem Speicher abarbeiten?

Mfg Nemesis

BlueNature
04.12.2006, 15:06
Servus,

du schnappst dir einen Bootloader, modifizierst ihn das jeder noch ein weiteres Byte braucht (Kennung sagen wie "1"..."3"). Lasst nun den Bootvektor auf den Bootloader starten per Fuses. Dann kannst prinzipiell wenn du keine Rückantwort brauchst RS232 nehmen (RXD) und alle miteinander verschalten zu einer Leitung. Die andere (RXD) mußt eben mit einem OR (TTL-Oder) zusammenführen zu einem RXD, da ja nur ein Bootloader die Daten erkennen sollte und auch darauf hin nur einer Daten sendet zur gleichen Zeit. So wäre meine Vorstellung das zu realisieren mit minimalstem Ausfwand. Apropos erstes Byte muß ich noch sagen das viele Bootloader eh ein Byte als Startkennung brauchen (oft ASCII 123). Das einfach abändern im zweiten AVR, müsste dann auch gehen. Baus aber einfach Spaßhalber mal auf, ist ja nicht viel Aufwand paar VCC, GND, RESET udn RXD und TXD miteinander zu verkabeln auf einen MAX232.


zur Programmausführung aus dem EEPROM gibts paar Probleme, wie willst du den Programmcounter(PC) veranlassen da reinzuspringen und dort zu lesen (Ebenfalls der SRAM)? Das geht nicht, nur in den Programmspeicher-Pages
Grüße Wolfgang