Forum: Mikrocontroller und Digitale Elektronik SPI-Bus-System mit Bootloader-Funktion im Master?


von Christian W. (clupus)


Lesenswert?

Hallo allerseits,

ich habe mal eine ganz blöde Frage, wie ihr folgendes Problem lösen
würdet:

Ich habe ein großes Projekt in Planung, das aus einigen AVRs+Platinen
besteht. Diese werden über einen Bus (SPI mit SS-Leitung; vermutlich
über Schieberegister) verbunden.
Nun soll einer (der zentrale; die CPU) via UART an einen PC
angeschlossen werden können (soweit kein Problem). Auch eine
self-program-Funktion in diesem Chip sollte sich via Bootloader
einrichten lassen. Nun zum Problem: Ich will (aus Zeit-Gründen und weil
ich nicht immer umstecken will) die anderen AVRs auch über den UART der
CPU programmieren. Das soll dann so ablaufen: PC sagt AVR-CPU, dass
Update für Chip 2 vorhanden und aufgespielt werden soll. Daraufhin wird
über die AVR-CPU Chip2 via SPI programmiert. Nur wie wähle ich nun Chip2
aus?
Ich möchte ja, dass die anderen Chips einfach "aus" bleiben, also nix
tun. Das heißt, dass ich einfach SCK, MOSI und MISO aller Chips
zusammenlege und die RESET-Leitungen alle auf eine Leitung der AVR-CPU
lege, funktioniert nicht, da ich dann alle Programmeiren würde.
Andererseits will ich auch nicht unbedingt einen Boot-Loader in jeden
Chip einpflanzen, weil dann könnte ich sie ja auch direkt programmieren
(für den Bootloader brauch ich ja ein mal den
Programmier-Adapter/ISP-Dongle).

MfG
Christian

von Dirk (Gast)


Lesenswert?

Hallo,

zur Programmierauswahl benötigst du noch weitere Chip Select Pins an
deinem Master Mikrocontroller. Die zusaetzlichen Chip Select Leitungen
gehen auf den jeweiligen Reset des Slave Mikrocontroller.

Moechtest du I/O's sparen am Master muesstest du ISP Chipselect I/O's
multiplexen und die SPI Chip Select I/O's demultiplexen.

Gruß,
Dirk

von Carsten P. (papa_of_t)


Lesenswert?

falls Du nicht ständig neu programmierst - wie wär's mit ein paar
Jumpern?

von Christian W. (clupus)


Lesenswert?

@ papa_of_t:
Das mit Jumper/Bit-Schalter hab ich mir auch überlegt, allerdings hab
ich da das Problem, dass die Platine wahrscheinlich ziemlich "tief
vergraben" werden wird im Gerät. => Mit irgendwelchen mechanischen
Schaltern wäre das recht umständlich, denke ich.

@ Dirk:
Wie meinst du das? Dass also am Master mit mehrern Leitungen
unterschiedliche Reset-Pins der Slaves schalten kann? Wie müssen dann
die Zustände sein (dass nur ein Chip auf "Empfang für Programm-Codes"
steht, die anderen aber nix tun, in nem Reset hängen)?
Mit der Miltiplex-Sache meinst du, dass man die Chip-Select-Leitungen
(s.o.) zusammenlegt zu einer binären Zahl, die den zu aktivierenden
Chip angibt, oder?

Ist es möglich eine Art Interrupt zu machen? Klar, ich könnte einen der
beiden INT am Master nehmen und über ein ODER-Gatter mit den einzelnen
Chips verbinden. Aber woher weiß ich dann, wo der IRQ herkam, sprich
welcher Chip ein "Problem" hat.

MfG
Christian

von Karl H. (kbuchegg)


Lesenswert?

Wie wäre es, wenn du einfach jedem der Sub-µC einen
Bootloader verpasst. Alle µC werden in einen Reset geschickt.
Der Chip der neu programmiert werden soll, wird aus dem
Reset entlassen. Daraufhin wird der Bootloader aktiv und horcht ob
sich an der SPI was tut. Tut sich nichts, dann startet er das
Programm im Flash, tut sich was dann liest er das neue Program
via SPI ein und schreibt es in den Flash.
Nach Abschluss der Operation werden dann alle µC wieder aus
dem Reset entlassen.

von Christian W. (clupus)


Lesenswert?

Dachte ich auch schon. Aber dann muss ich sie trotzdem einmal selber
(mit PC) programmieren. Das wollte ich eigentlich vermeiden. Aber,
wenn's nicht geht, mit Bootloader dürfte es auch gehen. Dann hab ich
aber noch ne Frage:

Wie programmiert man einen Chip? Eigentlich doch, indem man Reset auf 1
legt und dann in den SPi hineintacktet, oder? Wenn die anderen Chips nun
im Reset sind, werden die die Aktivitäten auf dem SPi nicht als
"programmieren" empfangen und plötzlich u.U. die eigenen Programme
überschreiben?
Das war nämlich auch die Ausgangsfrage, die mir bisher keiner
beantwortet hat.

MfG
Christian

von Läubi (Gast)


Lesenswert?

setz einfach die programmierleitungen auf Input.
Dann wird nur der Chip programmiert dessen Reset du auf LOW ziehst

von Christian W. (clupus)


Lesenswert?

Wessen Programmierlwitungen? Die der Slaves? Woher "wissen" die dann,
wann sie Programmiert werden müssen, oder wie oder was?

MfG
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.