2016-04-15 4 views
-1

Ich übertrage 10 Bytes vom Master zum Slave über SPI + DMA mit HAL. Wie kann ich überprüfen, wie viele Bytes der Empfänger in diesem Moment hat und ob alle 10 Bytes nicht empfangen wurden, dann stoppt der Vorgang erneut. Weil der Master nach dem Senden von 10 Bytes eine Antwort vom Slave bekommen sollte, aber wenn der Slave kein vollständiges Byte empfangen hat, wartet er und das System geht in Gleichgültigkeit ...HAL SPI DMA prüfen, wie viele Bytes im laufenden Betrieb empfangen wurden

Irgendeine Idee ??

+0

In SPI-Protokoll-Master-Antwort zur gleichen Zeit empfangen, während Paket übertragen. Und um ein Byte von SPI zu empfangen, müssen Sie ein Byte übertragen. Wenn der Befehl abgeschlossen gesendet wird, der Slave jedoch eine längere Anfrage senden muss, müssen Sie Dummy-Bytes senden. – imbearr

Antwort

0

"Ich übertrage 10 Bytes vom Master zum Slave über SPI + DMA mit HAL." Da Sie DMA verwenden, konfigurieren Sie nur die Übertragungsgröße für die DMA-Empfänger-API und aktivieren den DMA-Interrupt. Wenn DMA 10 Bytes empfängt, wird der vollständige Interrupt des DMA-Empfängers ankommen, mit der Ausnahme, dass der Sender weniger als 10 Bytes überträgt.

"Weil der Master nach dem Senden von 10 Bytes eine Antwort vom Slave erhalten sollte, aber wenn der Slave kein vollständiges Byte empfangen hat, wartet er und das System geht in Gleichgültigkeit ..." Sie können dieses Problem lösen Timeout-Mechanismus auf der Slave-Seite.

Verwandte Themen