Programación del microcontrolador utilizando UART

0

Estoy intentando diseñar una placa de desarrollo con un micro de diálogo. Estoy tratando de eliminar la necesidad de un programador en este tablero. Para que el usuario pueda simplemente conectar un cable USB y poder comunicarse con el chip y arrancarlo. He visto que el arduino usa un micro adicional (ATMEGA16U2) para hacer usb a uart y esto se alimenta en el micro real del arduino (ATMEGA328P-PU). Le pido disculpas si lo siguiente es muy estúpido, pero para mis propias aclaraciones, tengo 2 preguntas:

En primer lugar, ¿cómo está el primer micro programado para comenzar? Me imagino que el chip se queda vacío, así que si conecto un USB al principio, ¿no vería nada?

En segundo lugar, ¿podría usar un usb FTDI a un chip serial para hacer lo mismo? ¿No habría sido una solución más simple?

Supongo que una vez que se inicie la comunicación entre mi computadora portátil a través de usb a mi micro vía uart, podría usar cualquier IDE para programar este chip.

Tengo una experiencia previa muy básica trabajando con micro y me gustaría aprovechar esta oportunidad para mejorar eso.

    
pregunta Hassan Nasir

3 respuestas

4
  

En primer lugar, ¿cómo se empieza a programar el primer micro?

En la fábrica con un programador.

  

En segundo lugar, ¿podría usar un usb FTDI a un chip serial para hacer lo mismo?

El Atmega328 se puede programar usando el "protocolo" SPI. Para obtener una transmisión SPI de un chip FTDI se requiere una programación ingeniosa.

La mayoría de los kits de desarrollo de "autoprogramación" tienen un programa de arranque básico en una sección protegida de su memoria FLASH. Se pone allí en la fábrica. Tiene SW para usar una interfaz (UART, USB) que le permite cargar datos en el resto del FLASH y saltar a él. El protocolo es propietario pero a veces se divulga.

  

Entonces podría usar cualquier IDE para programar este chip.

No, su IDE debería saber qué interfaz y qué protocolo utilizar. También es poco probable que funcione el trabajo con puntos de interrupción y el paso a través del código. Es la razón por la que gastar algo de dinero para un programador decente (ICE) vale cada centavo.

    
respondido por el Oldfart
0

Cuando compras Arduino, el chip (Atmega8U2 / 16U) ya viene programado con firmware. Se puede actualizar utilizando el protocolo DFU, generalmente compatible con muchos dispositivos USB. Si compra el chip solo, tendrá que cargar el mismo firmware primera vez utilizando el mecanismo ISP normal.

Habiendo dicho eso, el firmware en Atmega8U2 / 16U es un simple puente USB-a-UART, por lo que definitivamente puede sustituirlo por FTDI o el puente de hardware de Silicon Labs.

  

Supongo que una vez que se inicie la comunicación entre mi computadora portátil a través de usb a mi micro vía uart, podría usar cualquier IDE para programar este chip

La conexión eléctrica entre USB y UART mediante cualquier chip puente no significa comunicación. Necesita un software que se ejecute en el microcontrolador y que escuche UART. El software se llama "cargador de arranque" y se debe cargar la primera vez utilizando un método alternativo.

Para ATMega328P, este método alternativo es el mismo ISP utilizado para programar el firmware en el puente USB ATmega8U.

Sin embargo, está utilizando el microcontrolador Dialog, que parece ser una variante de Cortex-M0. La documentación en el sitio de diálogo requiere registro, por lo que no puedo ver eso. Desde este documento parece que las MCU de Dialog utilizan un mecanismo complejo con dos cargadores de arranque, uno de que puede ser reemplazado por el suyo, otro parece estar grabado en la memoria OTP (Programable por única vez) en la fábrica.

Si ese es el caso, entonces conectar USB a puerto UART con FTDI sería suficiente para comenzar el desarrollo. Alternativamente, puede usar JTAG para cargar su aplicación directamente en la RAM (denominado modo de desarrollo en la documentación)

Usted mismo debe resolverlo si tiene acceso a la documentación. Hay información aquí

  

Para que el usuario pueda simplemente conectar un cable USB y poder comunicarse con el chip y arrancarlo

Aquí hay algún problema con la terminología. Cuando dices "el usuario", ¿te refieres a ti mismo o "usuario final"? Debido a que los usuarios finales no "inician el chip", conectan el dispositivo al puerto USB (o suministran energía por otros medios) y se inicia a sí mismo.

El hecho de que puedan o no comunicarse con él depende completamente del software que cargue. Sin ese software, ellos (o usted) podrían poder comunicarse con el gestor de arranque existente y cargar sus propios programas, como se explicó anteriormente.

Si en "comunicarse" quiere decir algo diferente a cargar una aplicación desde IDE, el chip FTDI no lo ayudará. Por ejemplo, usted desea admitir el protocolo DFU (para que los usuarios finales puedan actualizar el software fácilmente), o si desea que su dispositivo aparezca en la PC como algo más (por ejemplo, un dispositivo de entrada o de almacenamiento), entonces tiene que cambiar la clase de dispositivo USB. No puedes hacer esto con el chip FTDI.

ACTUALIZACIÓN

Como @ chris-stratton declaró en los comentarios a continuación, es altamente recomendable agregar al menos un marcador de posición para SWD (conector de depuración de corteza de 10 pines), incluso si hay otros métodos de programación disponibles. Le ahorrará muchos dolores de cabeza a largo plazo.

    
respondido por el Maple
0

Tanto Arduino como NodeMCU usan un chip de puente USB a UART, como FTDI, y ambos usan líneas de control adicional (CTS RTS) para controlar los pines de reinicio y / o selección de arranque de la unidad de destino, de esta manera puede restablecer la meta uC y también lo puso en modo de cargador de arranque, donde un software especial dentro de la uC se encargará de recibir el nuevo código a través de la serie y grabarlo en flash. En el caso de Arduino, como ya se dijo, este código del gestor de arranque debe grabarse previamente en la unidad de usuario a través de una interfaz de programación estándar

Pero en el caso de NodeMCU (ESP8266) el cargador de arranque ya está presente en la memoria ROM (y siempre estará allí, no es posible borrarlo), por lo que el software del PC fuerza el reinicio de ESP8266 (mediante CTS), y el uso la señal RTS (asociada a otro IO) para forzar el inicio del cargador de arranque de la ROM, luego la aplicación usa el protocolo del cargador de arranque para enviar el nuevo código para que se actualice.

Ya trabajé con los microcontroladores STM32 Cortex-M3, y también tienen un cargador de arranque ROM que se puede seleccionar en el momento de restablecer a través de una señal en uno de los IO, por lo que en teoría es totalmente posible hacer una "placa arduino" STM32 que funciona exactamente de la misma manera que un NodeMCU-ESP8266, no requiere ningún cargador de arranque pre-flash y tampoco es "bloqueable", ya que el cargador de arranque siempre estará accesible.

    
respondido por el Gustavo Laureano

Lea otras preguntas en las etiquetas