mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI: Byte in SPDR schreiben während Übertragung


Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt keine Möglichkeit, das auszuprobieren. Weiß jemand, was 
passiert, wenn der Slave während einer Übertragung ein Byte, das er an 
de Master senden will, in den SPDR schreibt? Im Datenblatt steht nur, 
dass es nicht erlaubt ist, nicht aber, was dann passiert.

Wird das gerade gesendete Byte zerstört? Oder ist der SPDR zum Zeitpunkt 
der Übertragung gerade schreibgeschützt?

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergessen: Ist natürlich ein AVR :)

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das SPDR ist das SPI Datenregister, das ist das effektive 
Schieberegister. Was ist so schwierig, darauf zu warten bis das byte 
draussen ist ?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maxim wrote:

> Wird das gerade gesendete Byte zerstört?

Ja, das definitiv. Ich bin mir nicht ganz sicher, aber ich glaube beide 
Bytes gehen vorloren, also das alte und das neue. Und zwar kommt 
anscheinend die ganze Logik durcheinander, denn am Ausgang kommt 
irgendwas undefinierbares raus, was nicht mit den gewollten Daten zu tun 
hat.
Es sind pro Übertragung übrigends mindestens 17 Takte notwendig (bei 
fCPU/2 Taktrate).

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, also muss der Slave eventuell warten, bis die Übertragung fertig 
ist. Das ereknnt er z.B. daran, dass der SS-Pin high ist, oder?

Kann ich das SPDR beschreiben, während der SS-Pin low ist (z.B. vor dem 
Senden eines Pakets)?

Ich denke, ich mache das so:

Der Slave fragt den SS-Pin ab. Ist dieser low, so weiß der Slave, dass 
die SPI gerade aktiv ist. Ist der SS-Pin high, kann der Slave seine zu 
sendenden Daten in den SPDR schieben.

Was passiert aber, wenn der Slave gerade die Daten in den SPRD schieben 
will und zum gleichen Takt der SS-Pin auf low gezogen wird? Kann/darf 
das SPDR-Register bei SS-Pin = low noch aktualisiert werden?

Wenn das so ist, dann könnte ich im Master zwischen dem setzen des 
SS-Pins auf low und dem tatsächlichen Senden der Daten noch eine kurze 
Wartezeit einbauen (ein paar Takte), sodass der Slave da noch 
rechtzeitig das SPDR beschreiben kann.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde einfach warten bis das SPIF Flag gesetzt ist. Dann weißt du, 
dass eine Übertragung fertig ist. Wenn der AVR den zeitpunkt verpennt, 
dann schreibt er dann zwar die Daten mitten in der Übertragung, aber 
selbst wenn er jetzt noch wartet, dann werden die alren und somit 
falschen Daten gesendet. Läuft am Ende auf dasselbe hinaus: Die Pause 
zwischen den Bytes muss ausreichend groß sein.

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.