¿Cuál es el propósito de un gestor de arranque de microcontrolador? [duplicar]

Según tengo entendido, para un microcontrolador común (por ejemplo, AVR, PIC), generalmente hay dos métodos para programar su memoria flash.

  1. Usando un programador: Programación en serie en circuito (¿o alguna variante?)
  2. Alguna forma de gestor de arranque, al que se comunica un dispositivo externo, lo que finalmente permite que el microcontrolador actualice su propia memoria.

Ciertamente, debe haber una muy buena razón para usar un cargador de arranque, de lo contrario, su uso generalizado actual sería muy extraño. Simplemente no he parecido haberlo captado completamente todavía.

¿Será que un programador es caro? Pero luego, hay Arduinos (microcontrolador ATmega) que pueden funcionar como programadores . ¿El costo de un IC adicional es suficiente para justificar el uso de un gestor de arranque? Si no me equivoco, los últimos Arduinos se deshacen del chip FTDI por completo, reemplazándolo con un procesador ATmega que hace la interfaz USB a serie. Seguramente sería posible integrar la función del programador en este IC, por ejemplo.

O tomemos, por ejemplo, el microcontrolador PIC. Hay algo que he visto llamado programador JDM . Si algo como esto, virtualmente sin componentes activos, puede programar un PIC entonces,

  1. ¿Por qué usar un cargador de arranque en absoluto?
  2. ¿Cuál es el propósito del PICkit relativamente mucho más complejo (aparte de la robustez)? ¿Capacidad de depuración?
arduino.cc/en/Hacking/Bootloader?from=Main.Bootloader La respuesta es más o menos "conveniencia"
para inicializar hardware o cargar código desde una fuente externa al almacenamiento interno
Para agregar a algunas de las respuestas aquí, con respecto a "caro": para algunos MCU (AVR, STM8/32, ...) los programadores son baratos. Puede obtener un programador AVR por $ 15 o menos. Sin embargo, para otras familias de MCU (Kinetis, por ejemplo), los programadores pueden costar más de $100, y los programadores/depuradores que pueden programar muchas familias ARM pueden costar más de $500. Pero como han dicho otros, se trata principalmente de conveniencia, actualización remota y eliminación de hardware externo.

Respuestas (6)

El objetivo principal de un cargador de arranque es permitir la actualización del firmware a través de interfaces distintas a la interfaz de hardware predeterminada. Por ejemplo, esto permite actualizaciones a través de canales de comunicación que la aplicación usa para sus propios fines, lo que significa que puede realizar actualizaciones remotas en el sistema sin necesidad de intervención física en el sitio remoto.

Una vez que tenga esta capacidad, no necesita ningún hardware adicional, lo que lo convierte en el método con el costo recurrente más bajo, y es por eso que los sistemas de aficionados como Arduino lo usan. También proporciona una pequeña cantidad de bloqueo de marketing, porque ahora necesita comprar sus chips AVR con el gestor de arranque ya programado en ellos.

Hay algunos escenarios en los que un cargador de arranque no agrega mucho valor. Tiene razón si tiene un par de placas, ciertamente puede conectar el programador y mostrar el código nuevamente. Si eres un aficionado con un par de tablas o tienes aunque sea una pequeña producción puedes hacerlo de esta manera.

Los cargadores de arranque tienen más sentido en escenarios donde conectar físicamente a un programador sería menos práctico. Los productos terminados que ya están implementados, por ejemplo, es uno de esos escenarios

Generalmente, cuando tiene un producto electrónico, no deja expuesto un puerto de "depuración" o "programación". Solo tiene Ethernet, serial, RS485, CAN o inalámbrico en su producto.

Además, ¿qué sucede si tiene varias decenas o quizás cientos de ellos ya vendidos/implementados y tiene una actualización de firmware?

En lugar de abrir los gabinetes uno por uno, conectar el programador, programar, cerrar la caja del producto, etc., puede usar una de las interfaces existentes de su producto actual para programarlo.

Es aún mejor cuando tiene dispositivos "conectados" con, por ejemplo, ethernet o cualquier tipo de conexión inalámbrica. Si pones un módulo inalámbrico en cualquiera que sea tu producto puedes usar esa comunicación inalámbrica con un bootloader para actualizar el código, de esta forma puedes actualizar varios dispositivos a la vez y sin tocarlos.

Y se convierte en una función de ensueño si sus dispositivos están conectados a Internet. De esa manera, puede actualizar el firmware de todo con solo un clic, a medida que su teléfono recibe sus actualizaciones.

Para un aficionado, tal vez no tenga mucho sentido usar un cargador de arranque, pero desde una perspectiva comercial en la que en realidad vende dispositivos, tiene mucho sentido ya que ahorra tiempo, agrega mucha comodidad al proceso y si sus usuarios tienen contacto con su dispositivo, no tiene que venderles programadores solo para actualizaciones de firmware (o hacer que compren los programadores de otra manera). ¿Y si sus dispositivos tienen la misma funcionalidad pero con diferentes microcontroladores? tendrías que determinar quién tiene qué para enviar o vender el programador correcto, ¡se convierte en una pesadilla!

En lugar de esto, simplemente coloque un puerto USB en él y todo se oculta al usuario, todos saben cómo conectar un USB a la PC, copiar un archivo y adjuntarlo a otro dispositivo, pero ningún usuario normal sabe qué diablos. es un depurador de P&E, un PICKit o un Segger J-Link.

Lo siento si esto es un poco confuso, el inglés no es mi idioma y tal vez la redacción sea un desastre, pero espero que entiendas la idea.

¡¡Salud!!

Buena respuesta, tal vez un poco detallada. Tu inglés está bien (al menos desde mi perspectiva de hablante no nativo).
El inglés es extraño en el sentido de que, al ser el idioma predeterminado para el comercio mundial, probablemente haya más hablantes no nativos que nativos. Entonces, el inglés "correcto" se vuelve mucho más difícil de definir. Como hablante nativo de Kansas City, Estados Unidos, no tuve problemas para entenderte.

El objetivo principal de un gestor de arranque es:

  • recuperar el programa del almacenamiento/red y cargarlo.

Puede haber una cantidad muy limitada de almacenamiento rápido cerca de la unidad de procesamiento, y el programa que desea ejecutar puede ser diferente de una placa a otra o puede que desee cambiar el programa en su placa. El cargador de arranque es un programa de denominador común que sabe cómo cargar su software personalizado desde donde está almacenado y alimentarlo a la unidad de procesamiento.

Los cargadores de arranque avanzados pueden hacer:

  • autoevaluaciones
  • arranque de red
  • cargar firmware adicional
  • ...
El OP pregunta específicamente sobre los cargadores de arranque que se encuentran en los microcontroladores basados ​​en flash. Si bien es relevante para los cargadores de arranque en un sentido más general, esta respuesta se está desviando un poco del tema.

Además de todas las otras excelentes respuestas, hay una razón más, al menos para los productos comerciales: después de la programación de producción, la mayoría de los chips tienen una opción configurada para protegerlos de la lectura de datos.

Dependiendo de la MCU, esta opción de protección de lectura puede deshabilitar la conexión del programador de hardware (como SWD o JTAG). Si no tienes el gestor de arranque hecho, no puedes reprogramar el dispositivo.

Y luego termina con 10k unidades con software defectuoso en el mercado, incurre en una gran pérdida por algo que es esencialmente un par de meses de codificación.

No es el costo del programador. Las ventas no provienen de aficionados; es un factor pero no el factor, las personas que compran en volumen ciertamente pueden permitirse programadores. Tienes algunas opciones:

  1. Haga que el proveedor de piezas o un intermediario o su casa de fabricación programen previamente las piezas, luego colóquelas en el tablero

  2. Algún tipo de programación de circuitos después de ser colocado en el tablero

Dentro de la segunda categoría, tiene las soluciones de lógica dura (la cosa SPI o SPI-ish en los chips AVR) y las soluciones suaves (un cargador de arranque, un programa que se ejecuta en la parte que usa la parte). Algunos tienen ambos.

La solución difícil que tienes que hacer bien, si te equivocas en el diseño, tienes que detectarlo lo suficientemente pronto o tu producto es un montón de piezas inútiles que tienes que tirar a la basura. Puede cambiar las soluciones de software incluso en la medida en que sea posterior al silicio; incluso puede hacer un balance, ejecutarlo y reprogramarlo. Entonces existe ese lujo si un error en su producto es más fácil de corregir y/o crear. La solución suave también puede permitir una variedad más amplia de opciones para el usuario. SPI E I²C Y USB Y serie Y cualquier solución de hardware, si corresponde. Una solución suave en algunos casos, el usuario puede reemplazar el gestor de arranque con el suyo propio por sus propios motivos.

No todos los microcontroladores pueden tener un software que pueda programar su propio flash, pero para cualquiera que lo tenga, el usuario puede crear su propio cargador de arranque independiente del suministrado por el proveedor del chip, si hay uno suministrado por el proveedor del chip.

Con ARM Cortex-M y SWD veo que las cosas cambian; algunos chips son solo SWD y ningún otro de la opción de fábrica. Acabo de recibir un Atmel SAM D21 ; ya no tienen el cargador de arranque SAM-BA y proporcionan una fuente para que pueda agregar la suya propia al comienzo del flash del usuario, y algunos registros para protegerlo, pero es trivial borrarlo. Mucho para eso; también podrías hacer el tuyo propio o usar SWD.

Mire el mundo de Arduino/AVR, los aficionados. Tienen su propio cargador de arranque y esa es la interfaz principal, ya que es gratis. Puede obtener un programador de ISP por unos pocos (o unas pocas docenas) de dólares. Pero observe cómo hay una serie de otras placas AVR que funcionan con protocolos basados ​​​​en USB en lugar de los cargadores de arranque populares hasta ese momento. Algunos de estos protocolos USB se utilizan entre proveedores.

Al final del día, si sus clientes lo desean y/o su departamento de marketing puede usarlo para distinguir nuestro producto del de ellos, y no reduce el costo del producto ni las ganancias. ¿Por qué no? ganar-ganar

No hay una respuesta correcta ni única para esta pregunta; Todo está basado en opiniones. Puede ponerse en contacto con cada uno de los proveedores de chips y preguntarles, pero las personas que respondan darán su opinión, es probable que ni siquiera sepan o hayan hablado con las personas que agregaron esa función o la mantienen. No hay respuesta para esta pregunta.

Solo para dar también la perspectiva de un aficionado:

Hace la vida mucho más fácil al no requerir ningún hardware adicional o mucho conocimiento de bajo nivel. Un ejemplo extremo que utilicé fue el fotón de partículas (sin afiliación) que puede brillar sobre la nube. Lo único que se requiere para flashear este chip es:

  • Fuente de alimentación
  • WiFi
  • conexión a Internet
  • Otra computadora para escribir el software

Hace que el proceso sea bastante económico y, en realidad, es bastante simple desde una perspectiva no profesional.