Uso OpenOCD para programar los microcontroladores Cortex-M3 sobre JTAG. Funciona con muchos adaptadores JTAG, incluidos Olimex ARM-OCD-USB, Segger J-Link y Bus Pirate.
Supongo que el .out es el binario sin formato que se copiará a flash.
Cuando se carga JTAG, necesita este binario ya que está escribiendo directamente en el flash.
Si el .out es de hecho un archivo ELF. Usa objdump para convertirlo.
"archivo" en un sistema Linux puede identificar archivos ELF:
$ jrt@linux: file myfile.elf
ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
Pero, no binarios ARM en bruto
$ jrt@linux: file myfile.bin
myfile.out: data
Para ver si su .out es un binario ARM, podría desarmarlo. O bien, simplemente haga un hexagonal en el inicio y busque lo que espera en la ubicación 0 (probablemente los vectores de interrupción).
$ xxd myfile.out | head
0000000: 7037 0020 fd52 0300 6553 0300 6d53 0300 p7. .R..eS..mS..
0000010: 8553 0300 7953 0300 8553 0300 0000 0000 .S..yS...S......
0000020: 0000 0000 0000 0000 0000 0000 8553 0300 .............S..
El ELF no puede ser recreado a partir de esto. El archivo Intel Hex es otra versión del binario. Es una lista de direcciones y fragmentos de datos para escribir en la memoria flash, pero puede contener agujeros.