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
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
falls Du nicht ständig neu programmierst - wie wär's mit ein paar Jumpern?
@ 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
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.
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
setz einfach die programmierleitungen auf Input. Dann wird nur der Chip programmiert dessen Reset du auf LOW ziehst
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.