Flash del Bootloader (SAMD21 Pro RF) - EDAE-Chile/tt-and-c GitHub Wiki

Tanto los sistemas de control y telemetria a bordo como el sistema de recepcion de telemetria se encuentran controlados por la placa de desarrollo Sparkfun SAMD21 Pro RF (Rev. 1). Algunos links imporantes:

En caso de perdida del bootloader por flashear firmware sobre los primeros 16 kB de flash, se puede recuperar el sistema de la siguiente manera:

  1. Descargar OpenOCD. En Windows, se puede encontrar el software precompilado aqui. En Linux, se debería poder encontrar el software en el package manager de sistema.
  2. Conseguir un debugger para ARM. El AK-CMSIS-DAP de Artekit fue probado para estas instrucciones, aunque un SEGGER J-Link EDU Mini o un programador CMSIS-DAP genérico deberian funcionar igual.
  3. Conectar los pines SWDIO, SWDCLK, VCC, GND y RST entre el programador y la placa Sparkfun. Los pines SWD no estan disponibles en los headers de las placas que se tienen, por lo cual es necesario soldar jumpers en los test pads entre el pin RST y el modulo LORA. CUIDADO con tirar de los cables dado que se van a rajar los test pads y sera necesario soldar cables directo al IC para acceder a la conexión SWD.
  4. Descargar el firmware con el bootloader del repositorio de Github de Sparkfun. Link directo
  5. Para usar OpenOCD, se debe especificar el siguiente comando en Windows (desde el directorio que contiene openocd.exe y asumiendo que el firmware está en el mismo directorio y se llama bootloader.bin):
    openocd.exe -f ..\share\openocd\scripts\interface\cmsis-dap.cfg -f ..\share\openocd\scripts\board\atmel_samd21_xplained_pro.cfg -c "program bootloader.bin verify exit 0x2000"
    
    En el caso de usar la version en Linux, el comando deberia poder acortarse para no usar las direcciones relativas de los archivos de configuracion:
    openocd.exe -f cmsis-dap.cfg -f atmel_samd21_xplained_pro.cfg -c "program bootloader.bin verify exit 0x2000"
    
    En la salida del programa se deberia identificar bien el MCU (SAMD MCU: SAMD21G18A (256KB Flash, 32KB RAM)) y se debería mencionar ** Verified OK **.

La instrucción de OpenOCD esta compuesta por dos llamados a archivos. El primero busca cmsis-dap.cfg, que contiene la información para comunicarse con el programador CMSIS-DAP. En el caso de usar otro programador, este llamado debe cambiarse al archivo de configuración correspondiente. El segundo archivo especifica el MCU que se esta programando. Como OpenOCD no cuenta con un archivo de configuración especifico para el SAMD21, se usa el archivo para el kit de desarrollo de Atmel que contiene el SAMD21, el SAMD21 Xplained Pro. Finalmente, se entrega una serie de comandos que programan un archivo (program bootloader.bin), verifican la programación exitosa (verify), apagan el MCU (exit, se debe reiniciar la placa antes de programarla!) y fijan un offset para la dirección de programación. El bootloader debe situarse en la dirección 0x2000 (equivalente a 8 kB de offset, mas información aqui). Luego de esto, se debería poder programar depositando archivos .elf, .hex o .bin, mediante el IDE de Arduino o usando Arduino-CLI.

En el caso de tener problemas conectándose al programador CMSIS-DAP, se pueden agregar las siguientes lineas al final del archivo cmsis-dap.cfg (el cual ya debe contener la linea adapter driver cmsis-dap):

transport select swd
adapter_khz 500

Esta solución proviene del siguiente link. El comando OpenOCD se encuentra explicado aquí.