Forum: Mikrocontroller und Digitale Elektronik Syncronisation SS bei SPI Slave


von L. R. (keyboard)


Lesenswert?

hei,

PIC18F26K22

Habe eine Interrupt gesteuerte SPI Slave Routine.
Das Paket enthält 30 Byte. 1.Byte Anzahl dann 28 Daten Byte und zum 
Schluß 1 Prüfbyte.
Nach jedem empfangenem Byte speichere ich das Byte in einem Ringbuffer 
und erhöhe dann die Adresse des Ringbuffers. Nach komplettem Empfang des 
Paket wird es noch überprüft auf Fehler, danach Adresse wieder auf 0 und 
alles von vorne.

Wenn sich die Übertragung verschluckt hat, wie bekomme ich eine 
Synchronisation der Adresse und dem SS Signal?

Müsste ich hier auch noch für das SS Signal einen Interrupt anlegen, der 
mir bei aktiven SS die Adresse auf 0 setzt?

schönen Tag

von Stefan F. (Gast)


Lesenswert?

Genau. Dazu kann man das SS Signal nutzen.

Oder einen Timer: Wenn für eine gewisse Zeit nichts übertragen wird, 
setzt du die Adresse zurück.

von doppelschwarz (Gast)


Lesenswert?

Zu beachten ist dabei das Timing, denn wenn man alle Bytes einzeln lesen 
muss, dann darf der SS-Interrupt nicht zu lange sein, damit man nicht 
das erste Byte verpasst. Also kurz fassen.

2. Möglichkeit:
Im Main-loop prüfen, ob SS aktiv ist, wenn nein, dann Startbyte = 0. 
Setzt allerdings voraus, dass die Schleife mindestens einmal zwischen 2 
Übertragungen durchlaufen wird.
Bei beiden Lösungen muss SS während der gesamten Kommunikation aktiv 
sein (ohne Unterbrechung), aber anders wäre es auch nicht sinnvoll.

von L. R. (keyboard)


Lesenswert?

hei,
Habe es jetzt am laufen.

Taktfrequenz 2500Hz;  Alle 100ms senden/empfangen; je Paket 240 Bit

Derzeitig ein kleiner Langzeittest.  Über 20.000 Pakete mit 0 
Übertragungsfehler.

In der main  while Schleife frage ich das SS Signal ab. Hier wird das 
Paket überprüft und verarbeitet.

In der SPI ISR habe ich nur das notwendige.

Vielen Dank für die Mithilfe.
schönen Tag

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.