SAM4E SPI-Slave mit DMA

OP #4510602
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
#4584485
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
#4585515
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren