Un búfer es simplemente una colección de registros de datos a los que puede acceder su programa. En el caso de CAN, generalmente hay uno o varios "registros de campo de control" donde puede encontrar el identificador CAN, la longitud de los datos del mensaje, el RTR y esas cosas. Seguido por 8 bytes de los datos reales.
Un FIFO (primero en entrar, primero en salir) es simplemente un número de buffers, que forman una cola. El primer artículo que llega a la cola es el primero en salir. Esto es manejado por el hardware, para que no tenga que desencadenar una interrupción para dar servicio a todos y cada uno de los mensajes CAN. Lo más común es que haya un Rx FIFO para los mensajes recibidos, esto tiene más sentido ya que esto podría causar interrupciones, pero algunos controladores CAN también admiten alguna forma de Tx FIFO.
En el caso de Tx FIFO, generalmente es solo un mecanismo que le permite tener varios mensajes salientes (generalmente 3), pero haga que el controlador CAN elija el que tenga el identificador CAN más bajo en el próximo punto de arbitraje del mensaje. el autobús. También hay muchos controladores CAN tontos que requieren que configure un "Prio Tx" manual en lugar de simplemente usar el identificador CAN. Evita estos.
Es posible que algunos microcontroladores sean compatibles con DMA para búferes CAN, de modo que pueda tenerlos almacenados directamente en algún trozo conveniente de RAM, en lugar de tener que activar / desactivar repetidamente el disparo en los registros del periférico CAN.
Los buzones son una alternativa diferente. Cada buzón es un búfer (rx y / o tx), pero se puede configurar para que funcione solo con un identificador CAN específico. Lo que significa que también tiene un indicador de recepción y quizás también posibilidades de interrupción. Son perfectos para sistemas en los que su MCU solo está interesada en una cantidad limitada de identificadores.
Una configuración más avanzada, pero bastante común, es combinar un Rx FIFO con buzones, de modo que los mensajes de alta prioridad terminen en su buzón dedicado, mientras que todo lo demás termina en el FIFO. Esta podría ser una buena solución para aplicaciones CAN más avanzadas como, por ejemplo, CANopen, donde tiene innumerables identificadores posibles en el mismo bus.