¿Cómo se 'dividen' los datos binarios?

6

Si una computadora envía datos, por ejemplo 001101, ¿cómo sabe la otra computadora, dónde comienza un bit y dónde termina la otra? Si solo fuera a monitorear el cambio, obtendría 0101, lo cual es totalmente inexacto. ¿Es solo una cuestión de tiempo? (Pido disculpas si esta es una pregunta de noob)

    
pregunta Some Guy

5 respuestas

3

Es una cuestión de tiempo (no me gusta la palabra 'solo').

En el caso de un UART, en el que A significa Asíncrono, hay un estado de línea inactiva, luego un bit de inicio, cuyo borde utiliza el receptor para sincronizar su temporización. Después de eso, todos los bits se envían cada uno con un período igual. La palabra termina con un bit de parada, lo que garantiza que haya una transición a cualquier bit de inicio siguiente.

    
respondido por el Neil_UK
3

Normalmente, ambas partes deben saber de antemano cuál es la tasa de bits.

Si no es así, a veces puede detectar la velocidad observando el cambio de estado más corto. 0000011111111101111111 pero puede ser un tiempo y puede ver algo más corto.

Por lo general, ambas partes saben de antemano. Algunas cosas como ethernet, pcie, etc. usarán una velocidad lenta acordada para hablar entre sí, luego cambiarán o probarán una velocidad más alta como parte de un ejercicio de entrenamiento.

También hay soluciones de codificación de bits, el capítulo 4 de Irig 106 si recuerdo bien tiene una buena gráfica, con nrz-l, s, m bifase-l / m / s, etc. Cuando usa bifase, bifase-l en particular algunas industrias lo llaman codificación Manchester o Manchester, en cualquier caso, un bit se define con un cambio de estado de celda de bit medio, por lo que cada bit es dos celdas de medio bit con un alto a bajo o de bajo a alto en el medio que determina un uno o cero . Para flujos largos de datos o datos continuos, nunca verá más de dos celdas de medio bit en el mismo nivel por definición, lo que hace que sea mucho más fácil sincronizar con bits hacia el otro lado. siempre que ambos lados estén de acuerdo, la codificación de los datos es bifase-1.

Además de averiguar la frecuencia de la muestra, hay otro problema típico si cada lado está usando su propio oscilador. Así que incluso con una tasa de datos acordada, cada lado se desplaza con el tiempo, por lo que tiene que resolverlo de alguna manera. en algunas situaciones, como uart, donde el marco / mensaje es muy corto, puede usar el borde de bit de inicio para definir dónde sería una muestra de celda de bit medio para una tasa acordada, y para esa tasa de 10 celdas o para que pueda tener una cantidad justa De diferencia entre los relojes y todavía funciona. Si realmente quisieras por cada borde que muestra (si existe) puedes reajustarlo.

En el mundo de la telemetría (lo que es irig 106), los datos son continuos y la sincronización de bits maneja el sobremuestreo y el seguimiento, pero se necesita cierto número de transiciones a lo largo del tiempo para poder hacer esto, por lo tanto, esas soluciones de codificación que aseguran las transiciones de bits.

algunos protocolos aseguran las transiciones de otras maneras. Ethernet no resuelve con gracia esto, el receptor puede / usará un reloj recuperado para muestrear los datos, pero los datos una vez hechos en bytes y paquetes se almacenan en búfer y se manejan, si su cristal es un poco más lento que el cristal del remitente y usted están a la velocidad de la línea, y usted está haciendo una cosa de almacenamiento y reenvío (hay un enrutador, por ejemplo) luego eventualmente desbordará sus buffers y tendrá que controlar el flujo. así que ahí está el mecanismo.

luego, por supuesto, como se comentó, si está sincronizado en lugar de asíncrono, "simplemente" lleva el reloj con usted, pero dependiendo de las velocidades y la longitud del cable, puede haber un cambio entre el reloj y los datos, por lo que debe tratarse con. Spi tiene este problema, ciertamente, ya que algunos productos (como los flashes) ven su solicitud de envío en el flanco ascendente, comienzan su respuesta en el flanco descendente y muestrean basándose en su flanco ascendente, por lo que tiene medio ciclo de reloj para la ronda. viaje, si, por ejemplo, coloca un cpld o fpga en línea para poder acceder por la puerta trasera al flash (en lugar de un cable o compartir las señales) puede hacer que el viaje de ida y vuelta sea demasiado largo. La memoria QDR tiene este problema y también algunas soluciones, los mismos datos paralelos de la historia con un reloj para el viaje. Si las señales tienen algún problema de tiempo, puede muestrear uno o ambos lados en el momento equivocado. pci lleva un reloj con él, pero es el reloj de referencia, no el reloj de gigaherz usado para hacer los datos (es el reloj de referencia usado para hacer el reloj de gigahertz).

respuesta corta, la mayoría de las veces ambas partes acuerdan la velocidad anticipada, ya sea por protocolo, velocidad fija o por un ejercicio de entrenamiento a una velocidad más baja acordada / definida, o simplemente estamos de acuerdo como Uart, lo sé el otro lado es 1152008N1, así que me puse a ese lado. En ocasiones, con uart, por ejemplo, puede detectar una velocidad, pero tiene que hacer que el otro lado envíe caracteres que permitan que ... (tenga las transiciones correctas, no 00110011, sino 101 o 010 en algún lugar.

    
respondido por el old_timer
2

Hay dos enfoques generales:

Asynchronous

  

La comunicación en serie asíncrona es una forma de comunicación en serie en la que las interfaces de los puntos finales que se comunican no están continuamente sincronizadas por una señal de reloj común.

Un UART es una pieza de hardware que permite que un dispositivo envíe y reciba datos de forma asincrónica - es decir, no está sincronizado con una señal de reloj.

Si tuviera que mirar un pinout del puerto serie RS232, notaría que hay pines Receive Data (RXD) y Transmit Data (TXD), pero un pin "reloj" está notablemente ausente.

Los dos lados del canal de comunicaciones tienen que acordar (de antemano) la velocidad a la que se enviarán los bits. Esta es la razón por la que debe configurar la velocidad en baudios (velocidad de símbolos) para que los dispositivos de puerto serie funcionen.

También verá cosas como los bits de "inicio" y "parada", que se usan para sincronizar el receptor con la transmisión entrante.

Los buses asíncronos incluyen:

  • SATA
  • UART
  • USB

Synchronous

  

La comunicación síncrona requiere que los relojes en los dispositivos de transmisión y recepción estén sincronizados, funcionando a la misma velocidad, de modo que el receptor pueda muestrear la señal en los mismos intervalos de tiempo utilizados por el transmisor. No se requieren bits de inicio o parada.

Los buses síncronos utilizan una señal de reloj , una onda cuadrada, que sube y baja a una velocidad específica muy regular. Todas las otras señales están sincronizadas con esta señal; sus valores se suelen muestrear en el flanco ascendente o descendente del reloj.

Debido a que el extremo receptor tiene una buena referencia de reloj, los buses síncronos pueden ejecutarse a una tasa mucho mayor.

La mayoría de los buses integrados de chip a chip son síncronos, incluyendo:

  • DDR
  • I2C
  • PCI
respondido por el Jonathon Reinhart
1

En los días de TTL, los bloques de unidades de disco comenzaron con un patrón alternativo de 0-1, que sincronizamos con un PLL. El patrón terminó con 11 para indicar el inicio de los datos de lectura. El PLL proporcionó el reloj de lectura y se usó un oscilador de cristal (un total de 5 MHz) para el reloj de escritura. Los datos de lectura se muestrearon 1/2 reloj entre los bordes del cuadro de bits.

    
respondido por el stark
0

Lo que estás preguntando es la sincronización. Para poder comunicar información a través de algún enlace, debe proporcionar una forma de sincronizar los "bits" de información y su inicio. Hay una multitud de enfoques para lograr esto y todos están diseñados para el entorno físico (PHY) con el que está tratando. Más específicamente, estos cables se encuentran a una corta distancia en una PCB, por lo que puede usar un bus paralelo, con un reloj y una luz estroboscópica de lectura / escritura (como memoria), o un enlace cableado en serie (por ejemplo, I2C, SPI, USB, Ethernet, ...), módem de línea eléctrica, fibra óptica, controles remotos de I / R, RF inalámbrico, ... y muchos más.

Más específico para su pregunta, y como lo aluden algunos otros encuestados en este hilo, las comunicaciones en serie caen en una sincronización síncrona o asíncrona binaria. La idea es que necesita recrear un reloj para muestrear los datos para ver si el bit de datos es uno o cero (o un voltaje más y menos en algunas implementaciones como RS-232). Si envía el reloj por separado como una señal separada, entonces es sincrónico. Si es asíncrono, envía los datos y agrega información adicional (patrones conocidos al inicio y al final de su transmisión; o los datos se pueden codificar con algo como la codificación Manchester que combina el reloj y los datos de una manera inteligente). El punto aquí es que debe activar las transiciones de bits que recibe de una manera que calibra su reloj local, para que pueda bloquear el flujo de bits y muestrearlo correctamente durante una cierta longitud de cuadro. Cada nuevo marco es una oportunidad para corregir su reloj para que el reloj del remitente permanezca sincronizado.

También se necesita una forma de sincronizar con el inicio de la transmisión. Esto se puede hacer de varias maneras, pero a menudo se basa en un patrón de preámbulo. Se utiliza un patrón conocido para descubrir el principio.

Espero que haya ayudado - gran pregunta!

    
respondido por el GOTIL

Lea otras preguntas en las etiquetas