Tengo un diseño que utiliza un STM32F105 . Mi aplicación escrita en C; usando Eclipse y gcc. He estado usando Eclipse (con OpenOCD y un ST-LINK/V2 programador) para escribir el firmware en los dispositivos. Ahora necesito programar muchos dispositivos y estoy buscando un método más rápido.
El Utilidad ST-LINK El software parece ser una buena opción. Puedes apuntar a un archivo .hex y ponerlo en "modo automático". Entonces detecta cuando un dispositivo está conectado al programador y escribe en él. Luego conectas otro dispositivo que se escribirá automáticamente. Muy suave.
Este es el problema: Parece que el firmware escrito en el dispositivo por Eclipse es realmente diferente al archivo hexadecimal generado por Eclipse .
Esto es lo que estoy viendo:
- Programo el Dispositivo#1 a través de Eclipse. Retiro el programador, reinicio el dispositivo y funciona bien.
- Encuentro el archivo .hex generado por Eclipse (.../Debug/application.hex).
- Programo el Dispositivo#2 usando la Utilidad ST_LINK y este archivo. Retiro el programador. El el código no se ejecuta incluso después de un reinicio del dispositivo.
- Utilizo la Utilidad ST-LINK para leer el código (que funciona) directamente desde el Dispositivo#1.
- Utilizo la Utilidad ST-LINK para programar este código en el Dispositivo#2. Ahora, El dispositivo #2 funciona correctamente .
OK, entonces el archivo .hex generado debe estar equivocado. Puedo usar la utilidad ST-LINK para comparar los dos archivos hexadecimales (de los pasos 2 y 4). Muestra que los archivos son idénticos hasta el final:
(haga clic para ampliar si lo necesita)
Por último, mis preguntas:
¿Por qué el archivo .hex generado es incorrecto? ¿Quizás Eclipse utiliza gcc para crear el hexágono, y luego lo modifica de camino al dispositivo? ¿Cómo puedo hacer que Eclipse emita un archivo hexadecimal que coincida con el código que programa en un dispositivo real?
Tenga en cuenta que estoy construyendo la configuración "Debug". Cuando Eclipse se conecta al dispositivo de destino programa el código y me permite depurar. Si quito el hardware de depuración, el dispositivo sigue funcionando. Es decir, el código funciona bien sin el depurador conectado.
1 votos
Parece que tienes un problema de comunicaciones con bits/bytes caídos/insertados. Parece un problema clásico de buffering/control de flujo, con el buffer de entrada desbordado después de haber transferido 48 bytes. ¿Puedes ejecutar el programador a una velocidad más lenta? Además, asegúrate de que tienes una toma de tierra común en todo el sistema.
1 votos
"Tenga en cuenta que estoy construyendo la configuración "Debug"". - ¿qué ocurre si construyes con la configuración "release"?
2 votos
@Mick Gracias por eso. Ya veo los valores desplazados de los que hablas. Sin embargo, el archivo que funciona es el que leí de un dispositivo y escribí en otro. El archivo que no funciona es directamente desde el IDE y nunca ha sido transmitido...
0 votos
@BruceAbbott: No había configurado una configuración de "liberación", así que me llevó un tiempo probar esto. Adivina qué; ¡funcionó! Si quieres convertir tu comentario en una respuesta me gustaría aceptarlo. Aparentemente Eclipse programa el código de 'depuración' (usando el archivo .elf) de tal manera que puede ejecutarse sin el depurador conectado, aunque el archivo hexadecimal de 'depuración' no puede ejecutarse por sí mismo.