¿Por qué las MCU suelen tener tan poco búfer en los USARTS?

5

Actualmente estoy trabajando con Atmel AT91SAM7X256. Tiene un CAN i / f con múltiples cuadros de mensaje multibyte. Sin embargo, los USART solo tienen un byte de almacenamiento en búfer, lo cual es un poco molesto cuando intento hacer cosas basadas en paquetes RS485.

    
pregunta Dirk Bruere

3 respuestas

10

Su AT91SAM7X256 tiene 13 canales de controlador DMA y 64 KB de RAM. Es más eficiente hacer el propósito general de la RAM y utilizar el DMAC para almacenar los datos del transmisor y el receptor.

En cambio, si la RAM se coloca en pequeños grupos para FIFO, etc., no se puede usar para otros fines en aplicaciones que no sean UART. Tener dos cosas que hacen el mismo trabajo, FIFO y DMAC, no es un buen uso de los recursos de transistores.

Su software normalmente movería los datos entre los FIFO y la RAM de todos modos. La transmisión sería RAM- > FIFO- > TxUART pero ahora es RAM- > TxUART. De manera similar, la recepción sería RxUART- > FIFO- > RAM pero ahora es RxUART- > RAM.

Usando el DMAC, el software puede decidir los tamaños del búfer de transmisión y recepción, dividiendo la RAM como mejor le parezca.

    
respondido por el TonyM
3

La utilidad principal de un FIFO radica en su capacidad para evitar tener que hacer que la CPU interactúe con eventos de caracteres individuales de manera crítica en el tiempo. Si el hardware de un chip puede ocuparse de todas las respuestas de tiempo crítico a los eventos de caracteres individuales, eso puede permitir que el manejo del puerto serial tenga una prioridad más baja de lo que sería necesario, permitiendo así que el chip sea mejor satisfacer las necesidades de tiempo de otros procesos.

Desafortunadamente, una FIFO en sí misma no suele ser suficiente para cumplir con los requisitos de tiempo, y en algunos casos podría ser más un obstáculo que una ayuda. Si, por ejemplo, una conexión usa señalización xon / xoff (anticuada, quizás, pero a veces aún se requiere en ausencia de otros cables de intercambio de manos) y un dispositivo recibe un xoff, debe diferir la transmisión en cualquier lugar más allá del carácter actual en el búfer de transmisión. . Para que un chip que tiene un búfer de transmisión grande pueda comunicarse de manera confiable con un dispositivo que tenga un búfer de recepción pequeño y use señalización xon / xoff, debe tener un medio para pausar la transmisión sin borrar el búfer [hardware adicional] o bien abstenerse de hacerlo poner más bytes en el búfer que el receptor podría manejar más allá del xoff [lo que requeriría una forma para que el transmisor sepa cuántos bytes había en el búfer - nuevamente, hardware adicional].

Además, no importa cuán grande sea el búfer de recepción de un chip, tendría que estar capturando constantemente todos los datos del búfer de recepción cada vez que estuviera transmitiendo para buscar un xoff a menos que un xoff recibido pueda ser detectado sin buscando todo [otra vez, más hardware].

Algunos dispositivos UART de hardware que están diseñados para ser encuestados de forma dispersa (por ejemplo, convertidores de USB a serie) tienen FIFO bastante grandes en ellos, pero también tienen hardware que les permite reaccionar de manera autónoma ante una serie de eventos externos. Para que un búfer grande en un UART integrado sea realmente útil, necesitaría tener un hardware junto con él que no se necesitaría tanto cuando se usa un UART más pequeño.

Todo lo que se ha dicho, el argumento de que DMA elimina la necesidad de un búfer grande no retiene totalmente el agua. Si los requisitos externos requieren que una aplicación maneje todos los eventos de caracteres en serie dentro de los tiempos de tres caracteres, el uso de un UART con doble búfer sin DMA puede facilitar los requisitos de tiempo de respuesta del software en comparación con el de un solo búfer y sin DMA, mientras que es mucho más conveniente que usar DMA.

    
respondido por el supercat
2

En una MCU, no hay razón para tener hardware dedicado para grandes búferes de UART, ya que es muy fácil hacer lo mismo en la RAM de propósito general mediante interrupciones y / o DMA.

De esa manera, los usuarios de chips que no necesitan ese tipo de almacenamiento en búfer para sus UART pueden usar la memoria para otra cosa.

Con la interfaz CAN, las restricciones de tiempo son más estrictas y la longitud del mensaje tiene un límite fijo. Además, puede tomar varios intentos para transmitir un mensaje, por lo que tiene sentido almacenar mensajes completos en lugar de bytes.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas