Hallo,
ich hab vor einiger Zeit schon mal ADUs mit nem ATmega16 per SPI angesprochen. Das war aber immer nur ein ADU an einem ATmega16.
Jetzt habe ich eine etwas andere Aufgabe:
Ein Prozessor (vermutlich ATmega128) soll mit mehreren (1-8) ATmega8 Daten austauschen. Meine erste Idee war eine Ringleitung per UART, also ATmega128 sendet an 1. ATmega8. Dieser sendet an den 2. ATmega8 usw. bis zum letzten. Der letzte sendet wieder an den ATmega128.
Sowas habe ich schon mit 8031 Prozessoren realisiert. Nachteil ist aber, dass ich ein UART "verliere", den ich in dem Projekt eventuell noch benötige.
Der zweite Nachteil ist mechanischer Natur. Ich wollte die Slave-CPUs stapel, d.h. auf der Platine des Mega128 einen Pfostenverbinder und dann so ähnlich wie bei PC104 die Platinen stapeln (aber mit viel weniger Pins).
Die Ringleitung kann ich dann aber nicht ohne zusätzliche Umschalter/Jumper durchschleifen. Deshalb die Idee, einen BUS einzusetzen. Die Platinen können dann einfach gestapelt werden und man muss nur eine Adresse einstellen, z.B. über 4 DIP-Switches.
Wie beschrieben ist der Abstand zwischen den Busteilnehmern sehr kurz, ca. 15mm je Etage.
Jetzt habe ich mir die Doku zu SPI angesehen und dabei festgestellt, dass ich dort entweder die SS* Leitungen schalten muss, oder MOSI und MISO durchschleifen. Damit habe ich dann dasselbe Problem, wie beim UART.
Deshalb habe ich folgende Frage: Könnte man nicht die Slaves so beschalten, dass SS*, MISO, MOSI und SCK einen 3.Leitungs-Bus bilden. Die Slaves müssten so konfiguriert werden, dass MISO zunächst auf Tristate bleibt und erst dann aktiv wird, wenn ein Adressbyte empfangen wurde. Also ähnlich wie bei I2C.
Ich stelle mir das vereinfacht so vor: Master setzt SS* auf aktiv (0) und sendet ein Adressbyte. Die Slaves lesen das Adressbytes und der angesprochene Slave schaltet MISO auf aktiv und sendet mit den folgenden Takten die Daten an den Master.
Der Master muss nicht viele Kommandos senden. deshalb könnte man das so definieren, dass es sich um ein Adressbyte handelt, wenn Bit7=1 ist. Wenn Daten vom Master an einen Slave geschickt werden sollen, kann man diese auf 2 Bytes aufteilen. Oder man nimmt die ersten 4 Bits für die Adresse und die nächsten 4 Bits für die Daten. Andererseits wäre auch eine Telegrammstruktur mit Startzeichen+Adresse+Daten möglich.
Geht das so, oder habe ich etwas grundlegendes vergessen?
Wobei, wenn ich genau überlege wäre es vieleicht doch nicht verkehrt, die SS* Leitungen sternförmig auszulegen...
Gruß
Stefan