De los bits que viajan por la línea a los bytes que guarda tu búfer
Cuando pones un analizador lógico sobre una línea UART, SPI, I²C o CAN, la captura se mide en bits. Tu firmware, en cambio, trabaja en bytes: un búfer de recepción de 64 posiciones, un mapa de 12 registros, un campo de datos limitado a 8 bytes. Cada vez que saltas de una vista a la otra estás dividiendo entre ocho, y hacerlo de cabeza a las tres de la madrugada mientras una trama falla la suma de verificación es justo como se cuelan los errores de una unidad.
bytes = bits ÷ 8 (equivale a bits × 0,125). Una trama CAN 2.0A de 108 bits son 108 ÷ 8 = 13,5 bytes de tiempo de línea en bruto, de los cuales solo 8 son tus datos.La división no tiene misterio. Lo que despista es saber cuáles bits acabas de contar. Un byte de datos de aplicación casi nunca ocupa exactamente ocho tiempos de bit en un enlace físico, porque el entramado, la sincronización y la detección de errores piden sitio en ese mismo cable.
Bits de línea frente a bits de datos
Anchos de registro
Presupuestos de tiempo
Convertir una captura paso a paso
Cuenta los bits que de verdad quieres contar
Decide primero si estás contando bits de datos o todos los bits que vio el analizador. En un byte UART 8N1 son 8 y 10 respectivamente: dos respuestas distintas a la misma pregunta.
Escribe el número de bits
Introduce la cifra en el campo de bits. El valor en bytes se actualiza mientras escribes, así que puedes recorrer el desglose de una trama entera sin pulsar nada. Las exportaciones largas de un decodificador suelen traer espacios o coma decimal: ambas se aceptan y los espacios se ignoran.
Copia el número directo al código
El botón de copiar de cada campo entrega el número pelado, sin unidad ni separadores, que es justo lo que necesitas cuando el valor va a un #define, al tamaño de un búfer o a una aserción de prueba.
Invierte el sentido al volver al osciloscopio
Pulsa el botón de intercambiar unidades para trabajar de bytes a bits, útil cuando sabes que tu carga útil son 32 bytes y necesitas los tiempos de bit que ocupará. Los dos menús de unidades tienen buscador, así que también puedes saltar a kilobits o a bytes por segundo sin salir de la página.
Sobrecarga de entramado UART: de baudios a bytes por segundo reales
La clásica configuración 8N1 envuelve cada byte de datos en un bit de arranque y otro de parada, de modo que diez tiempos de bit transportan ocho bits útiles: un peaje fijo del 25 %. Por eso la estimación ingenua de «dividir los baudios entre ocho» siempre promete más de lo que el enlace entrega.
| Velocidad en baudios (bit/s) | División ingenua bits ÷ 8 | Carga útil real (8N1, 10 bit/byte) | Tiempo de un byte |
|---|---|---|---|
| 9 600 | 1 200 B/s | 960 B/s | 1 042 µs |
| 19 200 | 2 400 B/s | 1 920 B/s | 521 µs |
| 38 400 | 4 800 B/s | 3 840 B/s | 260 µs |
| 57 600 | 7 200 B/s | 5 760 B/s | 174 µs |
| 115 200 | 14 400 B/s | 11 520 B/s | 86,8 µs |
| 921 600 | 115 200 B/s | 92 160 B/s | 10,9 µs |
Añade un bit de paridad y la trama pasa a once tiempos de bit, con lo que 9 600 baudios bajan a unos 873 bytes útiles por segundo. Dos bits de parada cuestan otra ranura. Nada de eso cambia la aritmética del ÷8: cambia cuántos bits deberías meterle.
Los dos campos siguen vivos mientras comparas tramas
Escribe en cualquiera de las casillas y la otra reacciona al instante, así que puedes sostener la cifra de carga útil en una mano y la de tiempo de línea en la otra sin volver a teclear nada.
Salida legible para ráfagas largas
Los millares se separan con un espacio y las capturas muy grandes pasan a notación científica, lo que mantiene legible una traza de varios millones de bits en lugar de un muro de dígitos.
Todas las unidades del bus en un mismo menú
Los menús de unidades con buscador cubren bits, kilobits, bytes y unidades de velocidad por segundo, así que una cifra de CAN, SPI o UART se puede reexpresar sin ir a buscar otra página.
Nada sale del banco de pruebas
Toda la aritmética se ejecuta en el navegador una vez cargada la página, así que las cifras sacadas de la captura de un cliente no se transmiten a ningún sitio.
Preguntas sobre protocolos serie
¿Por qué un enlace a 9 600 baudios mueve 960 bytes por segundo y no 1 200?
Porque el baudio cuenta símbolos en el cable, no bits de datos. En una UART binaria estándar un símbolo es un bit, así que 9 600 baudios son 9 600 tiempos de bit por segundo, pero diez de esos tiempos se consumen por cada byte de datos con entramado 8N1. Dividir entre 8 da los 1 200 B/s teóricos que verías si la línea solo llevara datos; dividir entre 10 da los 960 B/s que tu aplicación recibe de verdad.
¿Qué aportan al recuento los bits de arranque, parada y paridad?
El bit de arranque es un flanco de bajada que indica al receptor cuándo empezar a muestrear; el de parada mantiene la línea en reposo el tiempo suficiente para que el siguiente flanco de arranque no sea ambiguo. Ninguno transporta información. La paridad, cuando está activada, añade un bit contiguo a los datos solo para detectar errores de un bit. Por eso una trama 8E1 son 11 tiempos de bit: 1,375 equivalentes de byte de tiempo de línea por cada byte útil.
¿El orden MSB primero o LSB primero cambia cuántos bytes obtengo?
No: el recuento es idéntico en ambos casos, solo cambia el valor que se arma. La UART desplaza primero el bit menos significativo, mientras que SPI e I²C lo hacen por convención con el más significativo. Confundirlos produce bytes con los bits invertidos que siguen ocupando exactamente los mismos tiempos de bit, y por eso el síntoma parece dato corrupto y no un desajuste de longitud.
¿Cómo altera el relleno de bits de CAN la relación entre bits y bytes?
CAN inserta un bit complementario tras cinco bits idénticos consecutivos para que los receptores mantengan la sincronización de reloj. Una trama estándar con identificador de 11 bits y carga útil completa de 8 bytes son 108 bits antes del relleno y puede llegar a unos 135 bits en el peor caso. Esos bits de más son puro tiempo de línea: tu carga útil sigue siendo de 8 bytes por muchos bits de relleno que haya inyectado el transceptor.
Mi decodificador exporta la longitud de una ráfaga en bits: ¿cómo la comparo con el búfer de recepción?
Divide la cifra exportada entre la longitud de la trama, no entre ocho, y compara ese recuento de bytes con la profundidad del búfer. Una ráfaga de 12 000 bits en 8N1 son 1 200 tramas, así que necesita 1 200 bytes de espacio; la cuenta cruda 12 000 ÷ 8 = 1 500 describe la ocupación de la línea. Meter la cifra equivocada en el dimensionado de un FIFO es una causa habitual de banderas de desbordamiento fantasma.
Aún no hay comentarios. ¡Sé el primero en comentar!