Estoy tratando de diseñar una placa de desarrollo con un micro de diálogo. Estoy tratando de eliminar la necesidad de un programador en esta placa. Para que el usuario simplemente pueda conectar un cable USB y poder comunicarse con el chip y arrancarlo. He visto que arduino usa un micro adicional (ATMEGA16U2) para hacer usb a uart y esto se alimenta al micro real de arduino (ATMEGA328P-PU). Disculpas si lo siguiente parece muy estúpido, pero para mis propias aclaraciones, tengo 2 preguntas:
En primer lugar, ¿cómo se programa el primer micro para empezar? Me imagino que el chip viene vacío, así que si conecto un USB al principio, ¿no vería nada?
En segundo lugar, ¿podría usar un chip FTDI usb a serie para hacer lo mismo? ¿No habría sido una solución más sencilla?
Supongo que una vez que se inicie la comunicación entre mi computadora portátil a través de USB y mi micro a través de UART, podría usar cualquier IDE para programar este chip.
Tengo una experiencia previa muy básica trabajando con micros y me gustaría aprovechar esta oportunidad para mejorar eso.
En primer lugar, ¿cómo se programa el primer micro para empezar?
En la fábrica con un programador.
En segundo lugar, ¿podría usar un chip FTDI usb a serie 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 necesitaría saber qué interfaz y qué protocolo usar. También es poco probable que funcione trabajar con puntos de interrupción y recorrer paso a paso el código. Es la razón por la cual gastar algo de dinero en un programador decente (ICE) vale cada centavo.
Cuando compras Arduino, el chip (Atmega8U2/16U) ya viene programado con firmware. Se puede actualizar mediante el protocolo DFU, comúnmente compatible con muchos dispositivos USB. Si compra el chip solo, tendrá que cargar el mismo firmware la primera vez utilizando el mecanismo ISP normal.
Habiendo dicho eso, el firmware en Atmega8U2/16U es un puente simple de USB a UART, por lo que definitivamente puede sustituirlo por FTDI o 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 y mi micro a través de UART, podría usar cualquier IDE para programar este chip.
La conexión eléctrica entre USB y UART usando cualquier chip puente no significa comunicación. Necesita un software que se ejecute en un microcontrolador y escuche UART. El software se llama "cargador de arranque" y debe cargarse la primera vez usando 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 Dialog requiere registro, por lo que no puedo verla. A partir de este documento, parece que los MCU de Dialog usan un mecanismo complejo con dos cargadores de arranque, uno de los cuales puede reemplazarse por el suyo, otro parece estar grabado en la memoria OTP (Programable por única vez) en la fábrica.
Si ese es el caso, conectar USB al puerto UART con FTDI sería suficiente para comenzar el desarrollo. Alternativamente, puede usar JTAG para cargar su aplicación directamente en la RAM (el llamado modo de desarrollo en la documentación)
Tienes que averiguarlo tú mismo si tienes acceso a la documentación. Hay algo de información aquí
Para que el usuario simplemente pueda conectar un cable USB y poder comunicarse con el chip y arrancarlo
Hay algún problema con la terminología aquí. Cuando dice "el usuario", ¿se refiere a usted mismo o al "usuario final"? Debido a que los usuarios finales no "arrancan el chip", conectan el dispositivo al puerto USB (o suministran energía por otros medios) y se inicia solo.
Si podrán o no comunicarse con él depende completamente del software que cargue. Sin ese software, ellos (o usted) podrían comunicarse con el cargador de arranque existente y cargar sus propios programas, como se mencionó anteriormente.
Si en "comunicar" quiere decir algo diferente a cargar la aplicación desde IDE, entonces el chip FTDI no lo ayudará. Por ejemplo, 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 otra cosa (por ejemplo, dispositivo de entrada o almacenamiento), entonces debe cambiar la clase de dispositivo USB. No puede hacer esto con el chip FTDI.
ACTUALIZAR
Como dijo @chris-stratton en los comentarios a continuación, es muy recomendable agregar al menos un marcador de posición para SWD (Conector de depuración Cortex de 10 pines), incluso si hay otros métodos de programación disponibles. Te ahorrará muchos dolores de cabeza a la larga.
Tanto Arduino como NodeMCU usan un chip puente USB a UART, como FTDI, y ambos usan líneas de control adicionales (CTS RTS) para controlar los pines de reinicio y/o selección de arranque del uC de destino, de esta manera puede restablecer el uC de destino y también póngalo en modo bootloader, donde un software especial dentro de la uC se encargará de recibir el nuevo código a través de serial y grabarlo en flash. En el caso de Arduino, como ya se ha dicho, este código del cargador de arranque debe grabarse previamente en la uC 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 de la PC fuerza el reinicio de ESP8266 (a través de CTS) y usa la señal RTS. (conectado a otro IO) para forzar el inicio del gestor de arranque de la ROM, luego la aplicación utiliza el protocolo del gestor de arranque para enviar el nuevo código que se va a flashear.
Ya trabajé con microcontroladores STM32 Cortex-M3, y también tienen un gestor de arranque de ROM que se puede seleccionar en el momento del reinicio 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 funcione exactamente en de la misma manera que un NodeMCU-ESP8266, que no requiere ningún cargador de arranque preinstalado y tampoco es "bloqueable", ya que el cargador de arranque siempre estará accesible.
Pham largo
Pham largo
viejo contador de tiempo
viejo contador de tiempo
viejo contador de tiempo
Arce
viejo contador de tiempo
viejo contador de tiempo
Hasman404