SPI/I2C Slave AA_COMMUNICATION_ERROR unter Verwendung eines Aardvarks
Sie haben einen I2C-/SPI-Slave aktiviert, haben bereits Nachrichten von diesem Empfangen und wollen ihn nun Deaktivieren, aber sie erhalten einen Statuscode AA_COMMUNICATION_ERROR.? Dies Ist wahrscheinlich kein Fehler ihres Codes!
Erläuterung:
Es kann vorkommen, dass ein Master große Datenmengen sendet und dadurch den Host-PC-Empfangspuffer für den Aardvark I2C / SPI Host-Adapter vollständig belegt. Der Kommunikationsfehler bedeutet, dass, während der PC die Deaktivierungsanforderung an den Slave gesendet hat, keine Bestätigung vom Aardvark-Adapter empfangen wurde.
In den meisten Fällen war der Slave wahrscheinlich deaktiviert. Wenn der Aardvark-Adapter den Slave deaktiviert hat, werden keine weiteren Daten mehr gesendet oder empfangen, somit kann die Verbindung/Puffer nicht mehr vollständig belegt werden. Ein nachfolgender Aufruf zum Deaktivieren des Slaves sollte ohne Fehler zurückkehren.
Lösungsmöglichkeiten:
Dies ist zwar nicht unbedingt ein kritisches Problem in Ihrem Code, Sie können die Situation jedoch auf verschiedene Arten verbessern.
a.) Eine besteht darin, die Menge an Verkehr zu reduzieren, die vom Master gesendet wird. Dies erfordert die Möglichkeit, das störende Master-Gerät neu zu konfigurieren.
b.) Eine andere Möglichkeit besteht darin, den Slave regelmäßig abzufragen, um anstehende asynchrone Nachrichten zu erhalten. Beachten Sie, dass jeder Aufruf zum Lesen anstehender Nachrichten eine Zeitüberschreitung von bis zu 500 ms haben kann. Wenn es also einen anderen zeitkritischen Code gibt, der gleichzeitig ausgeführt werden muss, ist es am besten, ein Threading-Modell zu verwenden. (Aardvark-Adapter-API-Aufrufe sind nicht Thread-sicher, können aber verwendet werden, wenn sie von entsprechenden Thread-Synchronisierungsaufrufen umschlossen werden.)
Für die leistungsstärksten Entwicklungsumgebungen ist es ratsam, zwei Aardvark-Adapter zu verwenden. Ein Aardvark-Adapter kann so konfiguriert werden, dass er die asynchronen I2C / SPI-Slave-Nachrichten empfängt, und der andere kann für die synchrone I2C / SPI-Master-Kommunikation verwendet werden. Mit dieser Konfiguration kann ein Thread in der Anwendung eine enge Schleife ausführen, um die Slave-Nachrichten zu verarbeiten, und ein anderer Thread kann synchrone Operationen verarbeiten.