Trabajo en un rol de administración y solo tengo un conocimiento de electrónica muy limitado (suficiente para hacer proyectos simples de arduino, etc.).
Estamos trabajando en un producto en este momento que tiene 3 STM32F303 y 2 STM32F103 y el procesador principal es un AM5718.
Me preguntaba cómo haría para cargar y actualizar el firmware y el gestor de arranque de cada procesador, incluido el AM5718.
Los 5 STM32 están conectados al AM5718 a través de UART y todos están en la misma PCB.
Me gustaría tener una buena idea de cómo se haría esto después de que se produzca el PCB y el producto esté en el campo.
Obviamente le preguntaría al ingeniero electrónico que trabaja en el proyecto, pero hemos terminado para Navidad.
Si el diseño del hardware se realiza correctamente y suponiendo que se utilice UART para la programación, los pasos serían aproximadamente los siguientes:
Aquí hay una imagen que muestra la selección del cargador de arranque para las piezas STM32F10xxx:
Los mismos pasos se repetirían para cada MCU.
El procesador principal se puede actualizar de muchas maneras, pero generalmente funciona así:
Actualizar.
Según su hardware actual, tendría que ejecutar el cargador de arranque saltando a la dirección de memoria adecuada (consulte la página 20 de AN2606 ). No sé mucho sobre esto, pero su diseñador de hardware debería poder resolverlo. Sin embargo, no tener el control de la línea de reinicio es un poco un descuido.
Sospecho que necesita cargar el firmware AM5718 a través de JTAG, sin embargo, no estoy muy familiarizado con esta familia de CPU.
El STM32 (como muchas otras CPU ARM en estos días) tiene un cargador de arranque ROM incorporado por ST. En algunas series STM32, esto se hace manteniendo alto el pin BOOT0 durante el reinicio. Para iniciar su programa normal, debe mantener el pin bajo. Sin embargo, esto no siempre está convenientemente en la hoja de datos, sino a menudo en el manual del usuario.
El cargador de arranque ST a menudo admite varios protocolos, y UART es uno muy común. Sin embargo, no todos los UART o ubicaciones de pines en el chip STM32 son compatibles, por lo que debe elegir los pines del puerto serie. Este documento es muy útil si puede encontrar la familia adecuada.
El procedimiento que describe Armandas es correcto. Si tiene algunos pines de repuesto en su CPU AM5718, puede automatizar la activación del gestor de arranque de ST a través del software. Esto cuesta algunos pines GPIO en la CPU; en teoría, 1 línea de reinicio adicional por cada CPU agregada. Es posible que también deba considerar cómo se iniciará su placa en esta configuración mientras el AM5718 no se está ejecutando por completo.
Una pequeña advertencia: en algunas partes de STM32, el gestor de arranque de ROM se apaga una vez que habilita la protección contra lectura. Todavía puede acceder al chip a través de JTAG (después de borrar), pero no a través del gestor de arranque. Además, si no puede hacer que la activación automática parezca encajar en el hardware, es posible que deba hacerlo manualmente a través de puentes y un procedimiento en papel. Sin embargo, esto solo es práctico para hacer en la fábrica; no es una solución muy útil en el campo.
Ambas razones pueden guiarlo hacia un gestor de arranque interno que se puede activar a través de un comando en serie. También agrega la ventaja de 'proteger' las imágenes de su firmware a través del cifrado, dado que maneja el descifrado dentro del cargador de arranque.
Si todas las partes son compatibles con JTAG y están todas en el mismo dominio de energía (o en un estado que garantice la integridad de la cadena), puede construir una cadena de escaneo y usarla para golpear cada parte por turno.
Sin embargo, parece que el proyecto está terminado y usted está en la administración :), por lo que creo que la opción UART es la mejor ruta. Para ser claros, cada STM tiene su propio UART para el procesador grande, ¿o lo comparten (lo cual es un poco extraño...)? Si es lo último, como dijeron los otros carteles, necesitará un GPIO para seleccionar quién está activo.
Daniel
novato novato
Armanda