SPI/I2C Esclavo AA_COMMUNICATION_ERROR utilizando un Aardvark
¿Has activado un esclavo I2C/SPI, ya has recibido mensajes de él y ahora quieres desactivarlo, pero recibes un código de estado AA_COMMUNICATION_ERROR? ¡Probablemente no se trate de un error de tu código!
Explicación:
Puede ocurrir que un maestro envíe grandes cantidades de datos y, por tanto, ocupe completamente el búfer de recepción del PC anfitrión para el adaptador de host I2C / SPI Aardvark. El error de comunicación significa que, mientras el PC enviaba la solicitud de desactivación al esclavo, no se recibía ningún acuse de recibo del adaptador Aardvark.
En la mayoría de los casos, es probable que el esclavo estuviera desactivado. Si el adaptador Aardvark ha desactivado al esclavo, no se enviarán ni recibirán más datos, por lo que la conexión/buffer ya no podrá ocuparse por completo. Una llamada posterior para desactivar el esclavo debería devolver sin error.
Posibles soluciones:
Aunque no se trata necesariamente de un problema crítico en tu código, puedes mejorar la situación de varias formas.
a.) Una es reducir la cantidad de tráfico enviado desde el maestro. Esto requiere la capacidad de reconfigurar el dispositivo maestro infractor.
b.) Otra forma es sondear periódicamente al esclavo para obtener los mensajes asíncronos pendientes. Ten en cuenta que cada llamada para leer mensajes pendientes puede tener un tiempo de espera de hasta 500 ms. Por tanto, si hay otro código de tiempo crítico que deba ejecutarse al mismo tiempo, es mejor utilizar un modelo de hilos. (Las llamadas a la API del adaptador Aardvark no son seguras para los hilos, pero pueden utilizarse si van acompañadas de las correspondientes llamadas de sincronización de hilos)
Para los entornos de desarrollo más potentes, es aconsejable utilizar dos adaptadores Aardvark. Un adaptador Aardvark puede configurarse para recibir los mensajes asíncronos I2C / SPI esclavo, y el otro puede utilizarse para la comunicación síncrona I2C / SPI maestro. Con esta configuración, un hilo de la aplicación puede ejecutar un bucle cerrado para procesar los mensajes esclavos y otro hilo puede procesar las operaciones síncronas.