Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage AVR-SPI Slave MISO Konfiguration


von Gerd (Gast)


Lesenswert?

Hallo,

mit den Datenblatt Angaben zur Konfiguration von MISO für den SPI-Slave 
Modus eines Mega128 komme ich nicht ganz klar. Der Pin sei erstens als 
Ausgang zu initialisieren: Damit würde doch aber eine bereits laufende 
Kommunikation mit mehreren Busteilnehmern gestört! Nun folgt SPI-Enable: 
Alle Pins (so auch MISO) seien nun Eingang bis "When /SS is held low... 
MISO becomes an output if configured so by the user" Meine Frage: Wo 
wird das konfiguriert und erinnert? Im zu MISO zugehörigen DDR Bit? Mit 
/SS high wird am Ende die SPI Logik zurückgesetzt und MISO wieder 
Eingang. Muss MISO für die nächste Übertragung nun manuell erneut als 
Ausgang konfiguriert werden?
Es sollen permanent Daten vom Mega128 angefordert werden können.

Gerd

von OldMan (Gast)


Lesenswert?

Zu diesem Thema gibt es hier massig Informationen.

von grüner (Gast)


Lesenswert?

Gerd schrieb:
> MISO becomes an output if configured so by the user" Meine Frage: Wo
> wird das konfiguriert und erinnert? Im zu MISO zugehörigen DDR Bit?

Ja.


> Mit /SS high wird am Ende die SPI Logik zurückgesetzt und MISO wieder
> Eingang. Muss MISO für die nächste Übertragung nun manuell erneut als
> Ausgang konfiguriert werden?

Nein.

von Gerd (Gast)


Lesenswert?

MISO bleibt SPI-enabled also stets unter Kontrolle des SPI?
Ich frage deshalb weil der Direction-Zustand laut Tabelle "SPI Pin 
Overrides" fälschlicherweise User—Defined angibt!

Die Erst-Initialisierung als Ausgang mit ihrer Auswirkung auf laufende 
Kommunikationen bleibt weiter schleierhaft und nein,

OldMan schrieb:
> Zu diesem Thema gibt es hier massig Informationen.

die halfen auch nicht weiter, deshalb fragt man ja...

von Oliver S. (oliverso)


Lesenswert?

Gerd schrieb:
> Die Erst-Initialisierung als Ausgang mit ihrer Auswirkung auf laufende
> Kommunikationen bleibt weiter schleierhaft

Auf welche laufende Kommunikation? Wenn der Master einfach drauflos 
sendet, und der Slave irgendwann mitten drin eingeschaltet wird, dann 
solltest du mit der Initialisierung das Ende der laufenden Kommunikation 
abwarten (SS geht high). Ansonsten gibt es eh nur Datensalat.
Ausserdem steht nirgends, daß man erst das DataDirectionBit setzen muß, 
bevor SPI enabled wird.

Oliver

: Bearbeitet durch User
von Gerd (Gast)


Lesenswert?

Oliver S. schrieb:
> Auf welche laufende Kommunikation? Wenn der Master einfach drauflos
> sendet, und der Slave irgendwann mitten drin eingeschaltet wird, dann
> solltest du mit der Initialisierung das Ende der laufenden Kommunikation
> abwarten (SS geht high).

Ok wäre eine Möglichkeit, aber nur wenn man es bei intensiver 
Kommunikation zeitmäßig auf dem Slave schafft die Lücke auszunutzen. Das 
Problem entschärft sich dadurch, daß man meist alles zusammen am Bus 
nach Reset initialisiert, trotzdem bleibt es irgendwie unsauber gelöst. 
Denn

> Ausserdem steht nirgends, daß man erst das DataDirectionBit setzen muß,
> bevor SPI enabled wird.

ist nicht richtig. VOR dem SPI Einschalten ist im SLAVE Modus MISO auf 
Ausgang zu schalten. Das findet sich auch in den Initialisierungen im 
Datenblatt wieder. Womit meine Frage

> MISO bleibt SPI-enabled also stets unter Kontrolle des SPI?
> Ich frage deshalb weil der Direction-Zustand laut Tabelle "SPI Pin
> Overrides" fälschlicherweise User—Defined angibt!

weiter unbeantwortet bleibt.

von Oliver S. (oliverso)


Lesenswert?

Gerd schrieb:
> ist nicht richtig. VOR dem SPI Einschalten ist im SLAVE Modus MISO auf
> Ausgang zu schalten.

Und das steht wo zum Nachlesen? Die Programmbeispiele zählen nicht, das 
sind eben nur Beispiele.

Oliver

von grüner (Gast)


Lesenswert?

Wenn der Slave keine Daten zum Master senden muß, also nur 
Befehlsempfänger ist, kann doch MISO im Slave ein Input bleiben.

von Gerd (Gast)


Lesenswert?

Oliver S. schrieb:
> Gerd schrieb:
>> ist nicht richtig. VOR dem SPI Einschalten ist im SLAVE Modus MISO auf
>> Ausgang zu schalten.
>
> Und das steht wo zum Nachlesen? Die Programmbeispiele zählen nicht, das
> sind eben nur Beispiele.

Nur Beispiele? Die Vorgehensweise findet sich in jedem Beispiel.
Auch die Initialisierungsanläufe in der AVR151 App Note "Setup and Use 
of the SPI" zeigen nichts anderes.

von Gerd (Gast)


Lesenswert?

grüner schrieb:
> Wenn der Slave keine Daten zum Master senden muß, also nur
> Befehlsempfänger ist, kann doch MISO im Slave ein Input bleiben.

Der Mega128 sendet gleichzeitig Daten zurück.

von grüner (Gast)


Lesenswert?

Gerd schrieb:
> grüner schrieb:
>> Wenn der Slave keine Daten zum Master senden muß, also nur
>> Befehlsempfänger ist, kann doch MISO im Slave ein Input bleiben.
>
> Der Mega128 sendet gleichzeitig Daten zurück.

Wenn der Master die Daten vom Slave nicht braucht, kann er sie 
ignorieren. Dann ist es auch egal ob vom Slave-Mega128 was ankommt. 
Deshalb kann der MISO am Slave-Mega128 ein Input sein.

von Oliver S. (oliverso)


Lesenswert?

Gerd schrieb:
> Nur Beispiele? Die Vorgehensweise findet sich in jedem Beispiel.
> Auch die Initialisierungsanläufe in der AVR151 App Note "Setup and Use
> of the SPI" zeigen nichts anderes.

Das sind Beispiele, da werden nicht alle möglichen Varianten 
aufgelistet.

Oliver

von Gerd (Gast)


Lesenswert?

grüner schrieb:
> Wenn der Master die Daten vom Slave nicht braucht

Doch der braucht sie auch.

Oliver S. schrieb:
> Das sind Beispiele, da werden nicht alle möglichen Varianten
> aufgelistet.

Andere Varianten fand ich bislang nirgens.
Im Zweifelsfall hätte ich mich dann doch lieber aufs Datenblatt 
verlassen.
Aber Du meinst man könnte MISO auch noch nach SPI-Enable auf Ausgang 
schalten? Was würde dann passieren? Der Pin ginge dann wirklich auf 
Ausgang oder wird er durch /SS high noch dran gehindert?

von Oliver S. (oliverso)


Lesenswert?

Gerd schrieb:
> Im Zweifelsfall hätte ich mich dann doch lieber aufs Datenblatt
> verlassen.

Ich auch, aber nicht auf die Beispiele da drin, denn sie sind a) wie 
schon gesagt, nur Beipiele und b) manchmal auch noch falsch.

Verlassen kann man sich (meistens) auf den Text, und die dazugehörigen 
Tabellen. Und da gibt es keine Hinweise darauf, daß das DDR vor 
Aktivierung des SPI gesetzt werden muß.

Oliver

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.