Estoy usando el comando SPI ioctl () half duplex (base de Linux) para enviar un comando y leer el resultado del ADC del chip ADC (esclavo) a una MCU (maestra). Sin embargo, la lectura de ADC en algún momento me mostrará un valor incorrecto, de 1000 datos y obtengo 5 datos no válidos ("255"), aproximadamente un 0,5% de error. ¿El ADC y el SPI deberían estar funcionando al 100% todo el tiempo? No estoy seguro de qué está causando el problema.
Con el analizador lógico, observo que el tiempo de demora entre el envío y la lectura del resultado del ADC no siempre es consistente. No estoy seguro de que sea un síntoma común para la comunicación SPI o qué, y sospecho que esta es la causa principal de la lectura del error.
paso de programación:
- iniciar ADC
- retraso para completar ADC
- enviar comando de lectura // Se produce un retraso incoherente entre los pasos 3 y 4, aunque mi codificación no haya establecido ningún retraso en el medio.
- recibir el resultado ADC
- vuelve al paso 3 y continúa con la siguiente lectura. // También se producen retrasos inconsistentes entre los pasos 5 y 3.
La lectura de error aparece cada vez que el tiempo de retardo desconocido (aprox. 1-12 ms) es más largo de lo normal. (El tiempo de retardo normal debe estar en el rango de 40us según otra lectura exitosa)
Desde el sitio web o el material de lectura sobre SPI, la mayoría de ellos muestran la condición perfecta / ideal, el tiempo es tan preciso como pensamos, pero creo que la aplicación real no sería el caso. O me equivoco al respecto, no estoy seguro, esta es la primera vez que intento implementar SPI para la comunicación de datos en mi pequeño proyecto.
Comparta su experiencia si ha encontrado el mismo problema al que me estoy enfrentando ahora.