Forum: Compiler & IDEs Software SPI - Unterberechung während der Übertragung


von Stefan T. (stefan90)


Lesenswert?

Hallo,

ich bin gerade dabei, Software SPI zu schreiben. Ich habe aber eine 
grundlegende Frage zur SPI Übertragung. Was passiert, wenn während der 
Übertragung(z.B nachdem 5 von 8 bits übertragen sind) ein Interrupt 
auftritt, der abgearbeitet wird und danach die Übertragung fortgesetzt 
wird? Ist das ein Problem?

Die Interrupts möchte ich während der Übertragung wenn möglich nicht 
deaktivieren. Ich denke, es sollte kein Problem sein, da sich der Slave 
ja an den Flanken von SCK orientiert. Wenn nun mal eine Pause von sagen 
wir 10ms zwischen 2 bits stattfindet, müsste das egal sein.

Ich hoffe, dass ich mich nicht irre.

mfg Stefan

von liftmonteuer Winne (Gast)


Lesenswert?

beim senden
solange du die pegel auf der leitung hälst, Nein !

der empfänger muss dem clk des senders beim empfang der bits folgen 
könnnen, sonst gehen bits verloren.

von Stefan T. (stefan90)


Lesenswert?

Hallo,

danke. Empfänger kann clk sicher folgen, so schnell ist software spi 
dann auch nicht

Noch was anderes: was passiert, wenn CS auf low ist, die Pins SCK und 
MOSI vom Master aber keine definierten Pegel haben, also z.B high 
impedance sind?
Es wurde gerade ein Byte gesendet, nun bleibt CS aber auf low, SCK und 
MOSI nehmen nun für einige Zeit einen hohen Ausgangswiderstand an, 
danach wird wieder weitergesendet (SCK und MOSI wieder low impedance). 
Muss ich Pullup bzw Pulldown verwenden, damit keine Probleme entstehen?

Das ganze ist für folgende Anwendung: ich möchte bzw muss die Pins SCK 
und MOSI und MISO zwischendurch vom Bus trennen, CS muss aber auf low 
bleiben. Gibts sonst eine bessere Lösung für mein Problem? Das Trennen 
will ich mit einem 74HC125 machen.

mfg Stefan

von holger (Gast)


Lesenswert?

>Es wurde gerade ein Byte gesendet, nun bleibt CS aber auf low, SCK und
>MOSI nehmen nun für einige Zeit einen hohen Ausgangswiderstand an,
>danach wird wieder weitergesendet (SCK und MOSI wieder low impedance).
>Muss ich Pullup bzw Pulldown verwenden, damit keine Probleme entstehen?

Das hängt von deinem SPI Mode ab. Du solltest auf jeden
Fall die SPI Leitungen nicht floaten lassen wenn CS low ist.

Mir fällt im Moment aber auch keine Anwendung ein, wo man so
etwas unglaublich dummes tun müsste ;)

von Stefan T. (stefan90)


Lesenswert?

Hallo,

Ich brauche das für eine SD Karte. CS von der SD darf nicht auf high 
gehen während auf diese zugegriffen wird, und das braucht etwas Zeit die 
Sektoren zu lesen/schreiben.

Damit ich aber auch zwischendurch mal Daten an ein anderes SPI Gerät 
schicken kann (auch zeitkritische Daten zu empfangen) darf ich nicht 
immer warten, bis die SD fertig ist. Eine Abhilfe wäre ein 2. SPI, z.B 
Software SPI, aber wenn ich alles am Hardware-SPI unterbringen kann, 
wäre das besser. Die SPI Pins von der SD wollte ich dann vom Bus 
trennen, sobald Daten an ein anderes Gerät geschickt werden, wenn das 
irgendwie geht.

Wie könnte ich das sonst lösen?

mfg Stefan

von holger (Gast)


Lesenswert?

Dann brauchst du auf jeden Fall einen Pulldown
an SCLK. Was am Dateneingang passiert dürfte der
SD dann egal sein. Der Ausgang ist PushPull.
Den kannst du einfach wegschalten.

von Stefan T. (stefan90)


Lesenswert?

Ok danke.

Blöde Frage: Da hier ja Signale im MHz Bereich übertagen werden (max 8 
MHz), muss der Pulldown besondere Eigenschaften erfüllen oder kann man 
da ruhig einen gewöhnlichen Widerstand nehmen? Anders gesagt: Kann der 
Widerstand bei hoher Frequenz seine Eigenschaften verändern?

mfg Stefan

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.