Microcontrolador colgando durante la comunicación en serie

Estaba trabajando en un proyecto en el que el microcontrolador se comunica en serie con la computadora.

Inicialmente funciona correctamente, pero después de un tiempo (es decir, 2-3 horas), el microcontrolador se cuelga.

Creo que se cuelga debido a la comunicación serial con la computadora. Para verificarlo, he escrito un programa para que el microcontrolador y la computadora transmitan y reciban datos en serie.

En mi programa, primero transmito una cadena de cinco caracteres en serie desde la computadora. El microcontrolador recibirá la cadena y la retransmitirá a la computadora. La computadora recibirá la cadena transmitida por el microcontrolador.

Ahora he transmitido una cadena y una cadena recibida en la computadora, estoy comparando ambas cadenas y, si son iguales, estoy escribiendo '1' en un archivo y '0' si son diferentes.

¿Quiero saber si mi proceso para verificar la comunicación del puerto serie es correcto o no?

Código o no sucedió.
¿Cómo se alimenta? Podría estar captando ruido de la fuente de alimentación.

Respuestas (3)

El cableado serial más largo puede sufrir errores de bits. ¿Qué tal agregar una suma de verificación a cada mensaje (marco de datos) que envíe, para que el extremo receptor pueda verificar esa suma de verificación y, si es incorrecta, descartar todo el marco de datos, probablemente solicitando una retransmisión?

Se puede lograr un mecanismo simple de suma de verificación mediante EOR de todos los bytes en el marco y enviando el byte resultante como suma de verificación. El extremo receptor debe poder calcular la misma suma de verificación.

Lo que sugiera probará que el hardware y el software básico de bajo nivel están funcionando. Sin embargo, ya lo sabía, ya que dice que funciona durante más de 2 horas antes de que algo se detenga.

Esto significa que tiene un error en algo que solo sucede en raras ocasiones, como un error de bit, un desbordamiento o un error de encuadre. ¿Qué sucede bajo cada una de estas condiciones en el micro? Es posible que sea necesario restablecer el hardware en caso de error de trama o saturación. ¿Estás haciendo esto?

También hay que tener en cuenta que el ruido puede entrar en la línea. ¿Cómo se recupera su protocolo cuando un lado recibe algo un poco diferente de lo que envió el otro lado? Tienes que pensar en estas cosas. Puede enviar datos en paquetes con sumas de verificación, ACK y reintentos. Podría hacer algún tipo de esquema de actividad con reinicio automático en caso de inactividad después de un tiempo de espera. Hay muchas maneras. Estas razones explican por qué es mucho más difícil diseñar un buen protocolo serial de lo que la mayoría de la gente parece pensar a primera vista.

Si siempre son 2 horas, un desbordamiento del búfer de memoria también podría ser una causa.

¿Está ejecutando otras cosas en el microprocesador al mismo tiempo? Si es así, intente desactivarlos. Si es posible, intente usar otro chip y vea si obtiene el mismo comportamiento.