Desenvolvendo em Linux para FRDM-KL25Z – Gravação

Publicado: 13 mar 2014 em Tech
Tags:, , , ,

english

Tópicos:

  1. Introdução
  2. Ferramentas
  3. Compilação
  4. Gravação
  5. Debug

Anteriormente em Compilação nós geramos um ELF executável como resultado da construção do aplicativo frdm-kl25z-blink3:

user@localhost /tmp/frdm-kl25z-blink3-1.0 $ file frdm_kl25z_blink3 
frdm_kl25z_blink3: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped

Agora iremos gravar esse arquivo na memória flash da placa para execução.

Atualize a placa FRDM-KL25Z com um firmware CMSIS-DAP

Primeiramente, extraia o arquivo CMSIS-DAP.S19 da Nota de Aplicação Keil 232. Esse é um firmware para a FRDM-KL25Z que suporta a interface CMSIS-DAP com o on-chip debugger da placa.

Os passos a seguir devem ser executados em Windows: A seguir, entre em modo Bootloader mantendo o botão Reset pressionado enquanto liga um um cabo USB do seu computador no conector OpenSDA da placa. (Quando o led D4 piscar você pode soltar o botão pois isso indica o modo bootloader.) O Bootloader MSD aparece no Windows como um dispositivo removível chamado BOOTLOADER. Copie o arquivo CMSIS_DAP.s19 para o dispositivo BOOTLOADER, espere alguns segundos e desplugue a placa.

De volta ao Gentoo Linux, replugue a placa e verifique pela existência do dispositivo usb com ID de vendedor 0xc251 e ID de produto 0xf002:

localhost ~ # lsusb
Bus 001 Device 023: ID c251:f002 Keil Software, Inc. 
...

Crie o arquivo /etc/udev/rules.d/99-frdm-kl25z-cmsis-dap.rules contendo:

SUBSYSTEM=="usb", ATTR{idVendor}=="c251", ATTR{idProduct}=="f002", MODE="0660", GROUP="plugdev"
SUBSYSTEM=="hidraw", ACTION=="add", MODE="0660", GROUP="plugdev"

Desplugue e replugue a placa novamente, e verifique que o arquivo de dispositivo hidraw recém criado pertence ao grupo plugdev e possui acesso de escrita de grupo:

localhost ~ # ls -l /dev/hidraw*
crw-rw---- 1 root plugdev 252, 0 Mar 10 21:58 /dev/hidraw0
...

Isso permite que o processo de gravação possa ser feito por usuários normais pertencendo ao grupo plugdev.

Instale o OpenOCD com suporte a CMSIS-DAP

Para comunicação com o on-chip debugger da FRDM-KL25Z de forma a fazer a gravação, usamos o OpenOCD. Infelizmente até o momento da escrita desse texto a versão mais atual do OpenOCD disponível na árvore Portage (0.7.0-r1) não suporta CMSIS-DAP; entretanto eu obtive sucesso na gravação usando o OpenOCD de openocd.zylin.com. Como sugestão, pegue um snapshot da árvore openocd mais recente, descompacte, compile e instale:

localhost ~/src/openocd # ./configure --enable-cmsis-dap
...
OpenOCD configuration summary
--------------------------------------------------
CMSIS-DAP Compliant Debugger            yes

localhost ~/src/openocd # make
...

localhost ~/src/openocd # make install
...

Num sistema Gento recém instalado a fase de configuração irá provavelmente falhar devido a bibliotecas e softwares ausentes; apenas instale (emerge) as coisas solicitadas e retome o processo como mostrado acima. Ao fim do processo você terá uma instalação operacional do openocd:

localhost ~ # openocd --version
Open On-Chip Debugger 0.8.0-dev-00350-g6c74255 (2014-02-14-16:00)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html

Grave frdm_kl25z_blink3 usando OpenOCD

O Makefile nos fontes do frdm-kl25z-blink3 tem um alvo que cuida da gravação:

user@localhost /tmp/frdm-kl25z-blink3-1.0 $ make flash
openocd \
        -c 'interface cmsis-dap' \
        -f ./support/openocd/kl25_init.cfg \
        -f ./support/openocd/kl25_flash.cfg
Open On-Chip Debugger 0.8.0-dev-00350-g6c74255 (2014-02-14-16:00)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'cmsis-dap'
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
cortex_m reset_config sysresetreq
adapter speed: 50 kHz
Info : add flash_bank kinetis kl25.flash
#0 : kl25.flash (kinetis) at 0x00000000, size 0x00000000, buswidth 0, chipwidth 0
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)
Info : CMSIS-DAP: Interface ready
Info : clock speed 50 kHz
Info : IDCODE 0x0bc11477
Info : kl25.cpu: hardware has 2 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x00002038 msp: 0x20003000
** Programming Started **
auto erase enabled
Info : Probing flash info for bank 0
Info : Padding image section 0 with 832 bytes
Warn : flash configuration field erased, please reset the device
Warn : Kinetis L Series supports Program Longword execution only.
Info : Kinetis: FLASH Write ...
wrote 11264 bytes from file frdm_kl25z_blink3 in 14.069720s (0.782 KiB/s)
** Programming Finished **
** Verify Started **
verified 10060 bytes in 1.938245s (5.069 KiB/s)
** Verified OK **
** Resetting Target **
shutdown command invoked

Se a gravação é bem sucedida, o aplicativo deverá iniciar automaticamente e o led RGB deverá piscar repetidamente numa sucessão de cores vermelho, verde e azul.

A seguir em Debug iremos usar o OpenOCD como um servidor remoto para o GNU debugger, permitindo o debug do aplicativo gravado.


Referências

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s