En las placas Arduino "normales" como la Uno, el UART serie del microcontrolador AVR se utiliza para comunicarse con una PC.
Debido a que las PC modernas ya no suelen tener puertos serie, el conector serie de 9 pines y los traductores de nivel que se encuentran en las primeras placas Arduino han sido reemplazados hace mucho tiempo con un chip de puente Serial & USB integrado en la placa. Originalmente, este era un FT232R, pero desde el Uno ha sido un MCU Atmel diferente, como el ATmega8u2 o el 16u2 que ejecuta un firmware que proporciona una funcionalidad similar.
Esencialmente, el procesador principal de Arduino debe tener su hardware UART configurado para emitir mensajes de depuración o datos del programa a una velocidad de transmisión elegida, utilizando una señalización serial asíncrona de nivel lógico. Si el puerto USB está conectado a una computadora que ejecuta los controladores ACM del CDC apropiados, se le ordenará al chip puente USB que envíe por lotes los datos recibidos y los envíe al ordenador host, donde se puede reclamar desde las API seriales como si vinieran de un puerto serial tradicional.
Para comunicarse en la otra dirección, un programa en la PC envía datos a través de API en serie, esto se agrupa en paquetes USB y se envía al chip puente, que los convierte en datos seriales asíncronos y los envía a la MCU principal. Un programa que se ejecute en el Arduino en sí debería escribirse para recopilar estos datos del UART, generalmente utilizando interrupciones (u opcionalmente, sondeos frecuentes) y luego interpretarlos.
El cargador de arranque usado en el Arduino realiza ambas operaciones en su propio nombre mientras se ejecuta, brevemente después de cada reinicio, más tiempo si ve tráfico relacionado con un cargador de arranque. Pero esa capacidad es irrelevante para el programa principal (también conocido como "boceto") que debe volver a implementar la lógica para interactuar con el propio UART. Cabe destacar que puede usar el gestor de arranque Arduino sin usar el IDE o escribir programas de estilo Arduino.
Si miras a tu alrededor en línea, es probable que encuentres muchos ejemplos de código para utilizar ATmega UART en un programa en C, en comparación con uno en C ++ o Arduino.
Algunas otras tablas Arduino funcionan de manera diferente; por ejemplo, el Leonardo utiliza un chip ATmega32u4 como su procesador principal, que puede hablar directamente USB. En ese caso no hay puente extra necesario. Pero en lugar de la simple configuración de UART, el programa en la MCU principal ahora debe incluir una lógica mucho más compleja para manejar el hardware USB, incluidas las interrupciones que deben ejecutarse con bastante frecuencia. Esto es mucho más difícil de implementar en un proyecto desde cero, aunque sí significa un menor número de partes y un poco más de flexibilidad, ya que el puerto USB se puede usar para fines que van más allá de la canalización de una transmisión en serie virtual.