Por qué hay bits de datos inferiores a 8 bits de uart

2

Nuestro grupo está creando un UART IP Soft Core con Wishbone Wrapper y estamos utilizando 5,6,7 y 8 bits de datos. Solo quiero saber cuál es el uso de los bits de datos 5, 6 y 7?

Además de mi pregunta anterior, ¿cuáles son las posibles aplicaciones del uart personalizable? ¿Alguna sugerencia por favor?

    
pregunta sol

4 respuestas

3

En el pasado, código Baudot era un código popular de 5 bits utilizado con las máquinas de telégrafo. La idea de poder cambiar entre letras y cifras le dio cobertura de letras mayúsculas, numéricos y otros símbolos de puntuación comunes por encima del total habitual de 32 que esperaría de un número de 5 bits.

ASCII es un código de 7 bits (aunque a menudo ahora se transmite como 8 bits independientemente), por lo que explica por qué fue común. Nunca había oído hablar de seis bits, pero probablemente en el pasado, si valía la pena cubrir cinco, siete y ocho bits, el manejo de seis bits no aportaba una complejidad adicional, pero lo más probable es que la respuesta de Michael Karas es que la codificación de seis bits También fue popular.

    
respondido por el PeterJ
2

La longitud de los valores de datos en un UART es histórica y se relaciona con el día en que las comunicaciones fueron lentas (como 110 bits por segundo). Si una aplicación en particular podía codificar todos los símbolos que querían ser transmitidos a un número menor de bits, entonces era posible enviar esa información a otra ubicación en menos tiempo. Por ejemplo, si usó un alfabeto de 26 símbolos de letras mayúsculas más 6 signos de puntuación y caracteres de control, cabría en un código de 5 bits (32 combinaciones). El código de Baudot fue un ejemplo de un código de 5 bits.

La codificación de caracteres ASCII original utilizó codificación de 7 bits. El EBCDIC de IBM fue otro ejemplo de un código de 7 bits.

Se utilizaron varios sistemas de codificación de caracteres de 6 bits. Había un código SIXBIT de DEC y también una codificación uu que usaba un juego de caracteres de 6 bits para representar datos binarios arbitrarios como texto. De hecho, las tarjetas de banda magnética comunes que todavía utilizamos hoy en día utilizan una codificación de caracteres de 6 bits en su pista 1.

    
respondido por el Michael Karas
1

El UART original (como un solo chip) apareció a principios de los años 70. Fue diseñado para que se pueda utilizar con cualquiera de los sistemas de comunicaciones en serie en uso en ese momento. Los teleprinters clásicos (en su mayoría vendidos bajo la marca Teletype) utilizaban un código de 5 bits. También se desarrollaron algunos sistemas de 6 bits, pero eran mucho menos comunes. Y aunque los primeros equipos compatibles con ASCII solo usaban 7 bits, nunca vi una implementación que no usara los 8 bits completos. El octavo bit se puede usar para la paridad (par o impar), o se puede establecer de forma permanente en 0 o 1.

Un UART completamente compatible también permitió establecer el número de bits de parada en uno y medio, ya que esta era la sincronización utilizada con las máquinas Baudot de 5 niveles.

Una vez que las máquinas de envío y recepción se convirtieron en todas electrónicas, y especialmente basadas en microcontroladores, uno podría elegir la configuración que deseara y hacer que funcione utilizando la misma configuración en cada extremo. Pero la mayoría de las personas se apegaron a la convención "8-N-1" en uso en ese momento.

    
respondido por el gbarry
1

Al enviar ASCII, si ninguno de los caracteres tiene el bit alto establecido, usar 7-N-1 en lugar de 8-N-1 a una velocidad de transmisión determinada ofrecerá una mejora de velocidad del 11%. Más allá de eso, no he visto mucho uso para longitudes de bits más cortas.

El buen soporte para datos de 9 bits es útil, aunque su uso está limitado por el hecho de que muchos dispositivos UART no lo admiten bien. Es común que los UART admitan 8 bits más paridad configurable, pero para que una característica de este tipo sea realmente útil, los datos para el noveno bit deben almacenarse en búfer tanto en los FIFO de transmisión como en los de recepción, y debe ser posible configurar el estado del noveno bit para la transmisión sin interferir con la recepción de noveno bit. Tener un UART cuyo búfer de recepción registra si la paridad recibida coincide con la configuración de paridad de transmisión es inútil si puede ocurrir un byte mientras el software se está preparando para cambiar la paridad para la próxima transmisión, ya que el software no tendrá forma de saber si se compararon los datos entrantes a la configuración antigua o nueva.

Por cierto, un enfoque que no he visto usado, pero que podría ser interesante sería usar un byte de longitud variable que consideraría como un bit de parada el primer bit de marcado después de los ocho. Esto permitiría que 256 valores se envíen en diez tiempos de bit, 256 valores diferentes que se enviarán en once, y posiblemente otros 256 valores diferentes en doce, etc. Eso brindaría las ventajas de protocolo asociadas con los datos de nueve bits, pero sin agregar recursos adicionales. sobrecarga en la mayoría de los bytes. Aumentaría la probabilidad de que el UART no "notara" errores de encuadre, pero la aparición de caracteres "especiales" inesperados podría detectarse en el protocolo.

    
respondido por el supercat

Lea otras preguntas en las etiquetas