mikrocontroller.net

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


Autor: Christian Wolf (clupus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Carsten Pietsch (papa_of_t)
Datum:

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

Autor: Christian Wolf (clupus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Wolf (clupus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi (Gast)
Datum:

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

Autor: Christian Wolf (clupus)
Datum:

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

MfG
Christian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.