Verständnisfrage AVR-SPI Slave MISO Konfiguration

Gast #6215998
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
Gast #6216028
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.
Gast #6216058
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...
#6216082
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
Gast #6216117
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.
Gast #6216199
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.
Gast #6216211
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.
Gast #6216223
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?
#6216428
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren