neděle 1. února 2015

První pokusy s JTAGem

Oprava rozbitého satelitního přijímače IPBox 910 HD začíná připojením STM32F3 Discovery Boardu a prvním seznámením s OpenOCD.



Nejprve jsem začal se zprovozněním ST-Linku pod IAR. OpenOCD je server, který komunikuje skrze JTAG či jiné rozhraní s MCU a pomocí univerzálního rozhraní poskytuje svoje možnosti dalším aplikacím. Nejprve je tedy nutné spustit OpenOCD se správným nastavením:
openocd-x64-0.8.0.exe -f scripts\board\stm32f3discovery.cfg -c init -c "reset init"

Obsah souboru je následující:
# This is an STM32F3 discovery board with a single STM32F303VCT6 chip.
# http://www.st.com/internet/evalboard/product/254044.jsp

source [find interface/stlink-v2.cfg]

source [find target/stm32f3x_stlink.cfg]

# use hardware reset, connect under reset
reset_config srst_only srst_nogate

Dalším krokem je nastavení IAR, zde na kartě Debugger vybereme z roletky Driver položku GDB Server a pokračujeme na kartu GDB Server, kde je potřeba zadat adresu a případně port na kterém běží náš GDB server. Ladění je tedy možné provádět i prostřednictvím vzdáleného počítače připojeného k aplikaci. Pozor, oddělovač adresy a čísla portu je v IAR čárka, nikoli klasická dvojtečka. (:-) Číslo portu pro GDB je ve výchozím nastavení 3333, pro konzoli je připraven port 4444 ale k tomu se ještě dostaneme.

Dialog nastavení parametrů GDB Serveru. (formát [hostname],[port])

Nyní by již mělo stačit zmáčknout tlačítko Download and Debug a IAR funguje normálně jako při připojení pouze prostřednictvím ST-Linku.

Open On-Chip Debugger 0.8.0 (2014-04-28-08:42)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v23 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.922546
Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'gdb' connection from 3333
Info : device id = 0x10036422
Info : flash size = 256kbytes
target state: halted
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x01000003 pc: 0xfffffffe msp: 0xffffffd8

Tím jsem si ověřil, že program je možné do FLASH mikroprocesoru nahrát a také spustit. Nyní pokročíme k dalšímu laborování. Pomocí PuTTY se připojíme telnetem k localhost:4444. Ale to na nás již významně bliká kurzor příkazové řádky GDB Serveru:

Open On-Chip Debugger

Příkazem help si vyvoláme seznam podporovaných příkazů. První můžeme použít flash probe 0:

> flash probe 0
device id = 0x10036422
flash size = 256kbytes
flash 'stm32f1x' found at 0x08000000

Zjistili jsme, že FLASH tohoto procesoru, o velikosti 256 kB, začíná na adrese 0x08000000 a unikátní ID je 0x422.
Dalším příkazem si můžeme obsah FLASH uložit do souboru, dump_image [název_souboru] [počáteční_adresa] [délka]

> dump_image STM32F3_FLASH.bin 0x08000000 0x40000
dumped 262144 bytes in 2.556579s (100.134 KiB/s)

Výsledek můžeme pomocí ST-LINK Utility verifikovat s obsahem paměti, nečekaně souhlasí jak ID, tak i obsah FLASH.

Zapsání souboru do FLASH obstarává příkaz program [název_souboru[počáteční_adresa]

> program STM32F3_FLASH.bin 0x08000000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
** Programming Started **
auto erase enabled
device id = 0x10036422
flash size = 256kbytes
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0xfffffffc
wrote 262144 bytes from file STM32F3_FLASH.bin in 7.837327s (32.664 KiB/s)
** Programming Finished **
shutdown command invoked

Hotovo obsah FLASH byl úspěšně zapsán, opět můžeme verifikovat s původním souborem.

Bohužel s programátorem PRESTO se JTAG nepodařilo zprovoznit. Ještě bude nutné trochu laborovat.

http://openocd.sourceforge.net/doc/html/Flash-Programming.html

Žádné komentáře:

Okomentovat