El efecto de los tamaños UART FIFO en el rendimiento de las aplicaciones en serie

Actualizado el Dec 10, 2021

Reportado en

Hardware

  • RS-232
  • RS-422/RS-485
  • RS-232/422

Detalles del problema

¿Cómo afectan los tamaños UART FIFO al rendimiento de las aplicaciones en serie?

Solución

¿Qué es un UART y cuáles son sus FIFO?

Un UART (Receptor / Transmisor Asíncrono Universal) es el dispositivo que controla las operaciones de recepción y transmisión (lectura y escritura) realizadas por un puerto serie dado. En particular, los UART tienen memoria dedicada en forma de estructura FIFO (primero en entrar, primero en salir, una estructura de cola) para cada una de las operaciones de recepción y transmisión.

El propósito de las estructuras FIFO es mantener los datos recibidos del puerto serie o para ser escritos en el puerto serie. La mayoría de los UART permiten que el tamaño del FIFO utilizado se especifique en el software, puede ver cómo hacerlo en el artículo de KnowledgeBase vinculado a continuación titulado: ¿Por qué obtengo desbordamientos de búfer con mi puerto serie cuando uso VISA con control de flujo? Tenga en cuenta que hay un tamaño máximo que está limitado por la cantidad total de memoria en la UART, pero puede definir específicamente el tamaño que se utilizará.

A veces, no se pueden seleccionar todos los tamaños menores o iguales al máximo. Por ejemplo, muchos puertos RS-232 tienen UART que tienen un tamaño máximo de búfer de recepción FIFO de 14, pero solo permiten 1, 4, 8 y 14 como tamaños posibles de uso. Sin embargo, el tamaño del búfer de transmisión de muchos UART a menudo puede tomar cada valor entero de 1 a 16. Los dispositivos serie PCI de NI tienen UART que tienen FIFO de transmisión y recepción de 128 bytes.

¿Cómo afectan los FIFO al rendimiento?

El tamaño de los búferes FIFO determina cuándo la UART interrumpe la CPU para transferir datos entre la FIFO y la memoria de la CPU (RAM, donde las aplicaciones que se ejecutan en la CPU tienen acceso a los datos). Por lo tanto, el tamaño de los FIFO puede afectar las latencias de escritura y lectura del puerto serie (generalmente en el orden de milisegundos), así como el rendimiento general de una aplicación determinada.

Por ejemplo, si configura el búfer de recepción en 1, la UART interrumpirá el procesador para transferir un solo byte a la memoria de la CPU cada vez que se reciba un byte. Si bien esto hará que un byte dado esté disponible en la RAM tan pronto como sea posible después de llegar al puerto, si se reciben datos continuamente en el puerto, esto provocará muchas interrupciones. Como resultado, se dedica más procesamiento de CPU a esas interrupciones que pueden disminuir el rendimiento general si se están ejecutando otros programas. Por lo tanto, si las latencias del orden de unos pocos milisegundos son tolerables para las operaciones en serie, a menudo es beneficioso para el rendimiento general utilizar un tamaño FIFO de recepción mayor.

Tenga en cuenta que se producirá una interrupción con regularidad para garantizar que incluso si el tamaño FIFO de recepción es, por ejemplo, 14 bytes, puede recibir y tener acceso a los datos incluso si solo se recibieron 4 bytes. De manera similar, el tamaño de la FIFO de transmisión dicta el número de bytes que se pueden transferir de la RAM a la FIFO de transmisión a la vez. Por lo tanto, si el tamaño FIFO de transmisión es mayor, puede reducir la latencia en la transferencia de grandes cantidades de datos enviando más datos en cada interrupción.

Información adicional

Hay otro factor importante que contribuye al rendimiento a nivel de la aplicación cuando se escribe en el puerto serie (y desde la RAM al FIFO de transmisión en particular), que se analiza en la KB vinculada a continuación titulada: Elección entre funciones NI-VISA síncronas y asincrónicas .