8 votos

Cómo programar varios STM32Fs en la misma PCB

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

Actualmente estamos trabajando en un producto que tiene 3 STM32F303 y 2 STM32F103, y el procesador principal es un AM5718.

Solo quería saber cómo se subiría y actualizaría el firmware y el bootloader en 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 la PCB esté producida y el producto esté en el campo.

Obviamente preguntaría al ingeniero electrónico que trabaja en el proyecto, pero ya hemos terminado por Navidad.

0 votos

Debes estar fuera de los Estados Unidos, porque el jefe simplemente te llamaría a casa.... :/

0 votos

Jaja tienes razón, ¡estoy en el Reino Unido! No es un problema tan importante como para llamar a alguien en casa. ¡Principalmente para satisfacer mi curiosidad y también es bueno obtener algunos consejos de terceros!

0 votos

Hola. Si hay una respuesta que te ayudó a resolver tu problema, por favor haz clic en Aceptar en esa respuesta. Gracias.

6voto

Harper Shelby Puntos 431

Si el diseño de hardware se hace correctamente y asumiendo que UART se utiliza para la programación, los pasos serían aproximadamente los siguientes:

  1. La CPU principal reinicia un MCU seleccionado.
  2. Luego, la CPU lleva los pines BOOT requeridos a un estado apropiado y libera el reset.
  3. El bootloader del MCU comienza y espera a que lleguen datos por la línea UART apropiada.
  4. La CPU envía los datos binarios a través del UART y reinicia el MCU cuando haya terminado.
  5. El MCU ejecuta un nuevo firmware.

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

ingresa aquí la descripción de la imagen

Los mismos pasos se repetirían para cada MCU.

El procesador principal se puede actualizar de numerosas formas, pero generalmente se hace así:

  1. El firmware se descarga en un almacenamiento local (FLASH, RAM, tarjeta SD, etc.)
  2. La CPU se reinicia y el bootloader descubre el código de actualización.
  3. El bootloader de la CPU lee los datos, verifica que el binario sea válido y programa los sectores FLASH apropiados.
  4. La CPU se reinicia de nuevo y carga con el nuevo firmware.

Actualización.

Basado en su hardware actual, tendría que ejecutar el bootloader saltando a la dirección de memoria adecuada (ver página 20 de AN2606). No sé mucho al respecto, pero su diseñador de hardware debería ser capaz de averiguarlo. Sin embargo, no tener el control de la línea de reset es un poco descuido.

0 votos

Entonces, ¿eso requeriría más pines que los 2 pines USART o los MCUs estarían conectados a la CPU principal a través de otros pines?

0 votos

Me aventuraría a decir que necesitarías al menos dos GPIO más. Uno para reiniciar el MCU y otro para seleccionar el modo BOOT.

0 votos

¿Cuáles serían los pines de reinicio y modo de arranque en las MCUs y a qué pines se conectarían en la CPU? He intentado buscar por mí mismo pero no logro entenderlo. Actualmente, los pines de reinicio (NRST) están conectados a la alimentación a través de una resistencia y los pines de arranque están conectados a tierra.

4voto

Avner Puntos 2065

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 en alto durante el reinicio. Para arrancar tu programa normal necesitas 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 de ST a menudo soporta varios protocolos, y UART es uno muy común. Sin embargo, no todos los UART o las ubicaciones de los pines en el chip STM32 son compatibles, así que necesitas elegir los pines del puerto serie. Este documento es muy útil si puedes encontrar la familia correcta.

El procedimiento que describe Armandas es correcto. Si tienes algunos pines de repuesto en tu CPU AM5718 podrías automatizar la activación del cargador de arranque de ST a través del software. Esto requiere algunos pines GPIO en la CPU - en teoría 1 línea de reinicio adicional por cada CPU añadida. También necesitas considerar cómo arrancará tu placa en esta configuración mientras la AM5718 no esté completamente en funcionamiento.

Un pequeño detalle: en algunas partes STM32 el cargador de arranque ROM se desactiva una vez que habilitas la protección de lectura. Todavía puedes 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 puedes hacer que la activación automatizada parezca adecuada en hardware, es posible que necesites hacerlo manualmente a través de jumpers y un procedimiento en papel. Sin embargo, esto solo es práctico de hacer en la fábrica, no es una solución muy fácil de servicio en campo.

Ambas razones pueden dirigirte hacia un cargador de arranque interno que se puede activar a través de un comando serial. También agrega la ventaja de 'proteger' tus imágenes de firmware a través de cifrado, dado que manejas el desciframiento dentro del propio cargador de arranque.

0 votos

Ok, por el momento pienso que es mejor tener los STM32 conectados a la CPU principal a través de sus propias UARTS y tener sus pines de arranque y reinicio conectados a los GPIO de la CPU. No estoy interesado en el software todavía, solo quiero que el diseño de hardware sea a prueba de futuro.

4voto

Krunal Desai Puntos 593

Si todas las partes son compatibles con JTAG y se encuentran en el mismo dominio de energía (o de alguna manera en un estado que garantiza la integridad de la cadena), puedes construir una cadena de escaneo y usarla para acceder a cada parte sucesivamente.

Sin embargo, parece que el proyecto está terminado y estás en la gestión :), así que creo que la opción de UART es la mejor ruta. Para ser claro, ¿cada STM tiene su propio UART hacia el procesador grande, o comparten (lo cual es un poco extraño...)? Si es lo último, como dijeron los otros usuarios, necesitarás un GPIO por cada uno para seleccionar quién está activo.

0 votos

La primera etapa del desarrollo del hardware está lista para prototipar. Estaba revisando los esquemáticos y me preocupó que los STMs solo estén conectados a la CPU principal a través de UART, sus pines de reinicio y arranque están conectados a la alimentación / gnd como se mencionó anteriormente. Cada STM está conectado a la CPU principal a través de su propio UART. Así que en este momento estoy considerando que lo mejor es tener cada STM conectado a la CPU a través de UARTs separados (como están actualmente) y luego conectar sus pines de arranque y reinicio a los GPIOs de la CPU principal.

0 votos

Sí, eso parece sensato. Lo único de lo que me aseguraría es de que tu cadena de restablecimiento se propague a través de la CPU independientemente del estado del software; es decir, cuando VDD caiga por debajo del umbral aceptable, ¿se encargará un supervisor interno y provocará un restablecimiento, o deberías ejecutar el control GPIO para cada restablecimiento del STM a través de un circuito integrado de supervisión de restablecimiento?

0 votos

Está bien, ahora me has perdido.. Recuerda que no tengo un gran conocimiento en trabajar con electrónica a esta escala. ¿Estás hablando de tener un IC separado para manejar los reinicios? En realidad, solo estoy interesado en hacer bien el hardware en este momento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X