Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

AT91SAM7S - OpenOCD, AT91SAM7S, SAM-ICE

fasset 09 Apr 2015 13:42 1140 7
Computer Controls
  • #1
    fasset
    Level 13  
    Witam. Próbuje zwiększyć prędkość programowania z wykorzystaniem OpenOCD 0.8.0, programator Atmel SAM-ICE.
    Plik konfiguracyjny at91sam7x256.cfg z /OpenOCD/share/openocd/scripts/chip/atmel/at91.

    Układ programuje się poprawnie, ale z bardzo niską prędkością - 5KB/s. Komendy:
    
    openocd -c "interface jlink" -c "adapter_khz 12000" -f jlink.cfg -f at91sam7x256.cfg  -c "init" -c "reset" -c "halt" -c "flash write_image erase xyz.bin 0x00100000"  -c "reset run" -c "shutdown" 
    

    Informacja zwrotna:
    
    Warn : NOTE! DCC downloads have not been enabled, defaulting to slow memory writ
    es. Type 'help dcc'.
    Warn : NOTE! Severe performance degradation without fast memory access enabled.
    Type 'help fast'.
    target state: halted
    target halted in ARM state due to debug-request, current mode: Supervisor
    cpsr: 0xa00000d3 pc: 0x0003846c
    auto erase enabled
    wrote 65536 bytes from file greymbw_305.bin in 32.931660s (1.943 KiB/s)
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0x
    f0f0, ver: 0x3)
    Warn : Unexpected idcode after end of chain: 32 0x00000000
    Warn : Unexpected idcode after end of chain: 64 0x00000000
    Warn : Unexpected idcode after end of chain: 96 0x00000000
    Warn : Unexpected idcode after end of chain: 128 0x00000000
    Warn : Unexpected idcode after end of chain: 160 0x00000000
    Warn : Unexpected idcode after end of chain: 192 0x00000000
    Warn : Unexpected idcode after end of chain: 224 0x00000000
    Warn : Unexpected idcode after end of chain: 256 0x00000000
    Warn : Unexpected idcode after end of chain: 288 0x00000000
    Warn : Unexpected idcode after end of chain: 320 0x00000000
    Warn : Unexpected idcode after end of chain: 352 0x00000000
    Warn : Unexpected idcode after end of chain: 384 0x00000000
    Warn : Unexpected idcode after end of chain: 416 0x00000000
    Warn : Unexpected idcode after end of chain: 448 0x00000000
    Warn : Unexpected idcode after end of chain: 480 0x00000000
    Warn : Unexpected idcode after end of chain: 512 0x00000000
    Warn : Unexpected idcode after end of chain: 544 0x00000000
    Warn : Unexpected idcode after end of chain: 576 0x00000000
    Warn : Unexpected idcode after end of chain: 608 0x00000000
    Error: double-check your JTAG setup (interface, speed, missing TAPs, ...)
    Error: Trying to use configured scan chain anyway...
    Error: IR capture error at bit 4, saw 0x01 not 0x...3
    Warn : Bypassing JTAG setup events due to errors
    Warn : NOTE! DCC downloads have not been enabled, defaulting to slow memory writ
    es. Type 'help dcc'.
    Warn : NOTE! Severe performance degradation without fast memory access enabled.
    Type 'help fast'.
    shutdown command invoked 

    Po dodaniu komendy: arm7_9 fast_memory_access enable otrzymuje:
    
    
    C:\Users\AT1\Desktop\OpenOCD\bin>TITLE PROGRAMOWANIE ATSAM4SA16C
    
    C:\Users\AT1\Desktop\OpenOCD\bin>COLOR 8F
    
    C:\Users\AT1\Desktop\OpenOCD\bin>ECHO OFF
    Open On-Chip Debugger 0.8.0 (2014-05-02-12:11)
    Licensed under GNU GPL v2
    For bug reports, read
            http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    adapter speed: 12000 kHz
    srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst
    fast memory access is enabled
    Info : J-Link initialization started / target CPU reset initiated
    Info : J-Link ARM V6 compiled JUN 30 2009 11:05:04
    Info : J-Link caps 0x99ff7bbf
    Info : J-Link hw version 60000
    Info : J-Link hw type J-Link
    Info : J-Link max mem block 8408
    Info : J-Link configuration
    Info : USB-Address: 0x0
    Info : Kickstart power on JTAG-pin 19: 0xffffffff
    Info : Vref = 3.293 TCK = 1 TDI = 0 TDO = 1 TMS = 0 SRST = 0 TRST = 0
    Info : J-Link JTAG Interface ready
    Info : clock speed 12000 kHz
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0x
    f0f0, ver: 0x3)
    Info : Embedded ICE version 1
    Info : sam7x256.cpu: hardware has 2 breakpoint/watchpoint units
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0x
    f0f0, ver: 0x3)
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x400000d3 pc: 0x0003da44
    Warn : NOTE! DCC downloads have not been enabled, defaulting to slow memory writ
    es. Type 'help dcc'.
    auto erase enabled
    Warn : Bad value '00000001' captured during DR or IR scan:
    Warn :  check_value: 0x00000009
    Warn :  check_mask: 0x00000009
    Error: JTAG error while reading cpsr
    Warn : Cannot identify target as an AT91SAM
    Error: auto_probe failed
    in procedure 'flash' 


    Proszę o wskazanie przyczyny.
  • Computer Controls
  • #2
    Freddie Chopin
    MCUs specialist
    Zaczął bym od zmiany prędkości JTAGa. 12MHz to raczej zbyt dużo dla tego układu. Zacznij od konserwatywnej wartości typu 1MHz i jak nie będzie żadnych dziwnych błędów to wtedy "podkręcaj".

    Przy okazji jest jeszcze jedna rzecz którą warto właczyć dla przyspieszenia całej operacji, nawet OpenOCD podpowiada jaka to opcja:

    fasset wrote:
    Warn : NOTE! DCC downloads have not been enabled, defaulting to slow memory writ
    es. Type 'help dcc'.


    Kolejna sprawa - czy musisz programować układ plikiem bin? Wydaje mi się wysoce podejrzane, że zajmuje on akurat idealnie 64kB, więc pewnie plik hex jest mniejszy i nie trzeba by podawać offsetu do programowania.

    4\/3!!
  • Computer Controls
  • #3
    fasset
    Level 13  
    Sprawdzałem 1MHz i niższe, niestety nic to nie daje.
    Drugą opcję (DCC download) też wcześniej włączałem - błędy te same.
    Przekonwertowałem bin do hex; błąd pozostaje ten sam (offset i tak trzeba podać).

    Pozdrawiam.

    EDIT: jlink commanderem ten sam bin wgrywa się przy maks. prędkości.
  • #4
    Freddie Chopin
    MCUs specialist
    fasset wrote:
    Przekonwertowałem bin do hex; błąd pozostaje ten sam (offset i tak trzeba podać).

    No ale to absolutnie nie o to chodzi <: Chodzi o to, żeby plik .elf przerobić na .hex, a nie .elf->.bin.

    fasset wrote:
    Sprawdzałem 1MHz i niższe, niestety nic to nie daje.

    Te wszystkie błędy i ostrzeżenia które się tam pojawiają są wysoce podejrzane i jeśli się ich nie pozbędziesz, to raczej bym się cudów nie spodziewał. Inną sprawą jest "jakość" obsługi JLinka w OpenOCD - jest to zamknięte narzędzie i z tego co mi wiadomo cała implementacja w OpenOCD opiera się na reverse engineering, choć istnieje szansa, że pewne informacje od producenta udało się komuś wyciągnąć. Jeśli masz więc jakiś inny interfejs, to dla porównania bym spróbował z alternatywnym rozwiązaniem. Byle było to coś naprawdę dobrze wspieranego przez OpenOCD, jak np. JTAGi oparte o układ FTx232 (bo ST-Link pewnie nie zadziała z ARM7).

    Inną sprawą jest dwukrotna konfiguracja interfejsu w Twoim wywołaniu OpenOCD. Powinno być tak:

    openocd -f jlink.cfg -f at91sam7x256.cfg -c "adapter_khz 12000; init; reset; halt; flash write_image erase xyz.bin 0x00100000; reset run; shutdown;"

    Patrząc do skryptu dla układu którego używasz, wnioskuję również, że koniecznie powinieneś użyć "reset init" zamiast "reset" + "halt". Tak wiec spróbuj raczej czegoś takiego:

    openocd -f jlink.cfg -f at91sam7x256.cfg -c "adapter_khz 1000; init; reset init; flash write_image erase xyz.bin 0x00100000; reset run; shutdown;"

    4\/3!!
  • #5
    tadzik85
    Level 38  
    Freddie Chopin wrote:
    Inną sprawą jest "jakość" obsługi JLinka w OpenOCD - jest to zamknięte narzędzie i z tego co mi wiadomo cała implementacja w OpenOCD opiera się na reverse engineering, choć istnieje szansa, że pewne informacje od producenta udało się komuś wyciągnąć.
    4\/3!!


    Wiem z dobrego źródła ze Segger wspiera OpenOCD.
  • #6
    fasset
    Level 13  
    Freddie Chopin, Twoje komendy działają z tym, że po dodaniu trybu fast memory access wyrzuca te same błędy co wcześniej tzn.:
    Warn : Bad value '00000001' captured during DR or IR scan:
    Warn :  check_value: 0x00000009
    Warn :  check_mask: 0x00000009
    Error: JTAG error while reading cpsr
    Warn : Cannot identify target as an AT91SAM 
  • #8
    fasset
    Level 13  
    Błędy te same więc nie można powiedzieć, że działają lepiej.
    Jeżeli chodzi o zegar to zmniejszenie dopiero do częstotliwości 120kHz pozwala na zaprogramowanie w trybie "fast memory access" - wtedy mija się z to z celem. Z tym, że pojawiają się błędy typu:
    Error: DCC write failed, expected end address 0x0030060c got 0x300014.