Forum: Mikrocontroller und Digitale Elektronik SPI buffering ATmega8


von John Twenty (Gast)


Lesenswert?

Im Datenblatt des ATmega8 zu SPI heisst es folgendes:
"The system is single buffered in the transmit direction and double 
buffered in the receive direction.
This means that bytes to be transmitted cannot be written to the SPI 
Data Register before the entire shift cycle is completed. When receiving 
data, however, a received character must be read from the SPI Data 
Register before the next character has been completely shifted in. 
Otherwise,
the first byte is lost."

Kann mir das mal jemand erklären, was das bedeutet, kappiere es nicht 
ganz?

von Nico E. (masta79)


Lesenswert?

Wenn per SPI Daten reinkommen, dann werden diese alle 8 (SPI)-Takte in 
ein Register geschrieben, welches man dann ausliest.
Vorteil: Man hat ein wenig Zeit die daten einzulesen bis sie von 
eventuellen weiteren Daten überschrieben werden.

In Senderichtung ist das aber anders. Es gibt zwischen dem 
Sende-Register und dem "Programm" keinen weiteren Puffer. Das heisst, 
wenn du SPDR beschreibst, während eine Transaktion im Gange ist, wird 
das momentan zu sendende Byte direkt überschrieben.

Solange man den AVR als Master betreibt ist das relativ egal, da dieser 
dann auch den Takt vorgibt. Als Slave hat man dann aber das Problem das 
man kaum Takte zur verfügung hat in denen man beim schreiben das SPDR 
setzen kann. Um einen AVR als sendenen SPI Slave zu nutzen muss man also 
immer noch einen Warte-mechanismus beim Master haben.  Entweder mit 
festen Zeiten oder über eine Signalisierungsleitung vom Slave zum 
Master.

von John Twenty (Gast)


Lesenswert?

Vielen Dank!

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.