Forum: Mikrocontroller und Digitale Elektronik SAM4E SPI-Slave mit DMA


von Rangi J. (rangi)


Lesenswert?

Hallo Forum,

ich habe ein Problem mit Atmels SAM4E. Ich baue eine SPI-Slave-Anwendung 
mit der USART im SPI-Modus. Dabei kommuniziert mein Controller mit einem 
anderen System. Weil Interrupt u.U. nicht schnell genug ist, verwende 
ich die DMA. Ich habe schon den DMAC und auch den PDC probiert aber bei 
beiden verhält es sich gleich.
Wenn der Master das CS am Ende eine Kommunikation (1 oder mehrere Bytes) 
wieder auf High zieht geht das Byte welches als nächstes im 
Slave-Ausgabepuffer liegt verloren.

Bsp: ich weise die DMA an, 10 Bytes zu senden. Wenn der Master nach dem 
ersten Byte das CS auf High zieht, wird das folgende zweite Byte im 
Slave verschluckt und die DMA rückt (scheinbar) um 2 weiter. Beim 
nächsten Byte sendet der Slave jetzt das dritte Byte. Folge: es kommt 
nur jedes 2. Byte an.
Wenn das CS über alle 10 Bytes auf Low bleibt funktioniert alles prima.

Was ist das für ein beklopptes Verhalten und wie kann ich das 
unterdrücken?

Danke für Hilfe und Ratschläge

von Adam P. (adamap)


Lesenswert?

hey,

du kannst es mal mit den transfer delays versuchen,
datenblatt seite 790 (DLYBCS), dies wäre hilfreich, falls immer das 
letzte byte beim deselect verloren gehen würde.
sonst - beim sam4l zumindest konnte man einstellen, ob er das CS
für die gesamte dauer einer übertragung auf low halten soll,
hab es jetz jedoch nicht im datenblatt vom sam4e gesucht.
schon länger her, könnt sein das es was mit dem LASTXFER zu tun hatte.
möchte mich da jetzt aber nicht festlegen.
man kann es jedoch im "user interface" der schnittstelle in den 
registern konfigurieren.

hatte teilweise gleiche fehler. sobald CS für die gesamtdauer low war 
und am ende nicht zu schnell high wurde, hat alles funktioniert.

gruß
adam

von Marco H. (damarco)


Lesenswert?

es hängt mit CSAAT, LASTXFER and CSNAAT zusammen.

Seite 700 der Referenz.

Beim Empfang könnte Transfer Size nicht stimmen bzw. sie wird falsch 
übergeben und dann meint der PDC er hätte fertig ;)

Seite 699 :)

Ein Stück Code würde sicherlich weiterhelfen wenn du die Ursache nicht 
findest.

: Bearbeitet durch User
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.