6 votos

Comunicación serial (UART)

Sólo tengo un par de preguntas generales que aquellos con más experiencia podría responder con facilidad.

Estoy trabajando con un arduino, y de una interfaz con varios dispositivos como el PC que uso para escribir el arduino código C, que es, obviamente, conectado a través de USB, y he tenido éxito con un vínculo serie de un iphone al conectar el tx/rx pines.

  • ¿Qué tipo de integridad de los datos de garantías hay para el enlace de serie? Por ejemplo si el cable de conexión de dos dispositivos están desgastados o dañados, ¿qué tipo de cambios puede, espero que el flujo de datos a someterse? Podría empezar a recibir datos ilegibles, o simplemente cortados?

  • Es su funcionalidad totalmente encapsulado por una secuencia de bytes? Supongamos que quiero relé de números de 16 bits. Mi primer y único instinto es que me tiene que venir con mi propio protocolo (big-endian o little, por ejemplo) a empacar mis datos en un flujo de bytes y escribir en el puerto? Funciona más o menos como una toma de red (menos el concepto de paquetes) ¿no es así?

16voto

AnonJr Puntos 111
  • Async serie no tiene la integridad de los datos garantiza. Si la integridad de los datos es importante para la aplicación, agregar una suma de comprobación. Pero si todo está conectado correctamente, debería ser bastante sólido.

  • Usted obtener una serie de bytes. El resto depende de usted.

  • Si el número de serie está conectado mientras la transmisión está en marcha, no se sincroniza automáticamente. Algunas de basura aparecerá en la línea.

Un sistema común que es la de representar los datos con los paquetes. A continuación, el formato de paquetes es como:

[sync byte][longitud de datos byte][bytes de datos][bytes suma de comprobación]

Hay un montón de variaciones. El byte de sincronización permite que el receptor sincronice si llega un mensaje parcial. La sincronización de bytes puede ser escapado si aparece en otro lugar en el paquete, o no. Suma de comprobación puede ser una suma de todos los bytes, o XOR, o CRC16, etc.

Una alternativa es usar solamente ASCII para las comunicaciones serie. A continuación, puede sincronizar en el '\n' al final del mensaje. Este es un buen formato para la depuración, ya que puede usar su favorito emulador de terminal.

5voto

Julien Puntos 627

Sólo para aclarar los diversos comentarios acerca de la sincronización a nivel de bit, he esbozado algunos ejemplos de patrones de bits (no se muy bien!). En primer lugar, recordar que el asíncrono de flujo de bits consiste de una lógica de inicio de bajo bits de datos bits (normalmente 7 o 8), un opcional de paridad bits y un número de lógica-de alta stop-bits (normalmente 1 o 2). Los datos de los bits se envían primero el LSB. La paridad no es que se utiliza a menudo como la integridad que ofrece es mínima en comparación a la vertical de la suma de comprobación como markrages ha recomendado. El formato más común de datos es de 8 bits, sin paridad y con un stop-bit.

Async serial examples

La primera traza muestra un par de 0x55 bytes - la roja y la verde rectángulos que representan el inicio y stop-bits respectivamente. Como se puede ver, esta es una onda cuadrada de modo que el receptor no puede decir que bajo bit es el bit de inicio, ya que todos los bits baja, está precedida por un poco alto (que podría ser un bit de parada). Que nunca, el receptor mira, esto representa un par de 0x55 bytes, pero sólo una manera que tiene el correcto encuadre. Esta fue la base de mi comentario anterior.

El segundo trazo representa un par de 0x10 bytes. Sin embargo, el receptor puede ver los bits marcados por los triángulos como la elaboración de bits y (incorrectamente) decodificar un par de 0x04 bytes.

La tercera traza representa un par de 0xFF bytes. No hay ninguna ambigüedad aquí como todos los bits bajos son genuinos de inicio bits de ahí JustJeff el anterior comentario.

Una secuencia típica es como markrages dice en su respuesta. Tradicionalmente, 0x01 (Inicio-De-Encabezado) o 0x02 (Inicio-De-Texto) se han utilizado como un byte de inicio, pero un par de 0xFF bytes es más fiable como JustJeff dice. También puede ser que desee poner un "stop-byte" al final. Tradicionalmente, 0x04 (Fin De Transmisión) y 0x03 (Fin De Texto) han sido utilizados para este propósito. Por último, verifique siempre que los receptores de encuadre-estado de error!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X