Cómo programar múltiples STM32F en la misma PCB

7

Trabajo en un rol de administración y solo tengo un conocimiento muy limitado de electrónica (suficiente para hacer proyectos simples de arduino, etc.).

Estamos trabajando en un producto en este momento que tiene 3 STM32F303s y 2 STM32F103s y el procesador principal es un AM5718.

Me preguntaba cómo subirá y actualizará el firmware y el cargador de arranque en cada procesador, incluido el AM5718.

Los 5 STM32s están conectados al AM5718 a través de UART y todos están en el mismo PCB.

Me gustaría obtener 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.

    
pregunta Terry Gould

3 respuestas

5

Si el diseño del hardware se realiza correctamente y suponiendo que se usa UART para la programación, los pasos serían aproximadamente los siguientes:

  1. La CPU principal restablece una MCU seleccionada.
  2. La CPU luego lleva los pines BOOT requeridos a un estado apropiado y libera el reinicio.
  3. El cargador de arranque de MCU se inicia y espera a que los datos ingresen a la línea UART adecuada.
  4. La CPU envía los datos binarios a través de UART y restablece la MCU cuando termina.
  5. La MCU se ejecuta con un nuevo firmware.

Aquí hay una imagen que muestra la selección del cargador de arranque para las partes STM32F10xxx:

LosmismospasosserepetiríanparacadaMCU.

Elprocesadorprincipalsepuedeactualizardevariasmaneras,perogeneralmentefuncionaasí:

  1. Elfirmwaresedescargaenunalmacenamientolocal(FLASH,RAM,tarjetaSD,etc.)
  2. LaCPUsereiniciayelgestordearranquedescubreelcódigodeactualización.
  3. ElcargadordearranquedelaCPUleelosdatos,compruebaqueelbinarioesválidoyprogramalossectoresFLASHapropiados.
  4. LaCPUsereinicianuevamenteysecargaconelnuevofirmware.

Actualización.

Segúnsuhardwareactual,tendríaqueejecutarelgestordearranquesaltandoaladireccióndememoriaapropiada(consultelapágina20de 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 descuidado.

    
respondido por el Armandas
3

Sospecho que necesitas cargar el firmware AM5718 a través de JTAG, sin embargo, no estoy muy familiarizado con esta familia de CPU.

El STM32 (como muchos otros CPU ARM en estos días) tiene un cargador de arranque ROM incorporado por ST. En algunas series STM32 esto se hace manteniendo el pin BOOT0 alto durante el reinicio. Para arrancar su programa normal necesita mantener el pin bajo. Sin embargo, esto no siempre es conveniente en la hoja de datos, pero a menudo en el manual del usuario.

El gestor de arranque ST a menudo admite varios protocolos, y UART es uno muy común. Sin embargo, no todas las UART o las ubicaciones de los 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 a 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 cargador 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 esté funcionando completamente.

Una pequeña advertencia: en algunas partes del STM32, el cargador de arranque ROM se apaga una vez que habilita la protección de lectura. Aún puede acceder al chip a través de JTAG (después de borrar), pero no a través del cargador de arranque. Además, si no puede hacer que la activación automatizada parezca encajar en el hardware, es posible que deba hacerlo manualmente a través de puentes y amp; Un procedimiento en papel. Sin embargo, esto solo es práctico en la fábrica, no es una solución de servicio en el campo.

Ambas razones pueden llevarlo hacia un gestor de arranque interno que puede activarse a través de un comando en serie. También agrega la ventaja de "proteger" las imágenes de firmware a través del cifrado, dado que usted maneja el descifrado dentro del propio cargador de arranque.

    
respondido por el Hans
3

Si todas las partes son compatibles con JTAG, y todas están en el mismo dominio de poder (o en un estado que garantiza la integridad de la cadena), puede construir una cadena de exploración y usarla para golpear cada parte por turno.

Sin embargo, parece que el proyecto está terminado y usted está en administración :), así que creo que la opción UART es la mejor ruta. Para ser claros, cada STM tiene su propia UART para el procesador grande, o comparten (lo que es un poco extraño ...)? Si es lo último, como dijeron los otros carteles, necesitará un GPIO por para seleccionar quién está activo.

    
respondido por el Krunal Desai

Lea otras preguntas en las etiquetas