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

[AT91SAM7S][WinARM]OpenOCD+Turtelizer2+AT91SAM7 konfiguracja

WWektor 17 Jul 2009 16:29 3463 4
Computer Controls
  • #1
    WWektor
    Level 12  
    Witam
    Bardzo proszę o pomoc w konfiguracji programu OpenOCD. Męcze się już drugi dzień, czytam fora i manuale, już ściągnąłem kilka wersji oprogramowania i nic:/
    Problem jest następujący. Wykonałem układ turtelizera2 i mam do niego podłączony swój układ z AT91SAM7S64 na pokładzie (dodam że pod CrossStudio wszystko chodzi bezbłędnie i układ był już testowany wielokrotnie). Zakupiłem książkę pana Roberta Brzozy \"Mikrokontrolery AT91SAM7 w przykładach\" i chciałem przesiąść się na darmowe oprogramowanie WinARM.
    Ze strony pana Freddie Chopin ściągnąłem instalator OpenOCD pod windowsa. OpenOCD wywala następujący komunikat:

    Kod:
    
    OLD SYNTAX: DEPRECATED - translating to new syntax
    jtag newtap CHIP TAP -irlen 4 -ircapture 0x1 -irvalue 0xf
    Example: STM32 has 2 taps, the cortexM3(len4) + boundryscan(len5)
    jtag newtap stm32 cortexm3  ....., thus creating the tap: \"stm32.cortexm3\"
    jtag newtap stm32 boundry  ....., and the tap: \"stm32.boundery\"
    And then refer to the taps by the dotted name.
    NEW COMMAND:
    invalid command name \"daemon_startup_reset\"



    Jeśli wykomentuje tą linijkę w konfiguracji to następna też jest zła i tak do końca :/
    Starsza wersja OpenOCD z kolei wysypuje się na ft2232_layout turtelizer2
    albo w ogóle nie wie co to ft2232

    Tutaj plik konfiguracyjny:
    Kod:
    
    #daemon configuration
    telnet_port 4444
    gdb_port 3333
    
    #interface
    interface ft2232
    ft2232_device_desc "Turtelizer JTAG/RS232 Adapter A"
    ft2232_layout turtelizer2
    ft2232_vid_pid 0x0403 0xbdc8
    jtag_speed 3
    jtag_nsrst_delay 200
    jtag_ntrst_delay 200
    #use combined on interfaces or targets that can't set TRST/SRST separately
    reset_config srst_only srst_pulls_trst
    
    #jtag scan chain
    #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
    jtag_device 4 0x1 0xf 0xe
    
    #target configuration
    daemon_startup reset
    #target <type> <startup mode>
    #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
    target arm7tdmi little run_and_init 0 arm7tdmi_r4
    # mthomas: the file oocd_flash2138.script is a list of the openocd-commands
    target_script 0 reset C:\WinARM\utils\openocd\sam7_flash\oocd_flash_sam7.script
    run_and_halt_time 0 30
    working_area 0 0x40000000 0x4000 nobackup
    
    
    # mthomas AT91SAM7
    flash bank at91sam7 0 0 0 0 0
    # Informatione: erase command (telnet-interface) for complete flash:
    # flash erase 0 0 numlockbits-1
    # SAM7S64 with 16 lockbits: flash erase 0 0 15
    

    Bardzo proszę o pomoc


    Pozdrawiam
    Wiktor
  • Computer Controls
  • #2
    arrevalk
    Level 25  
    Ja przy AT91SAM7S korzystam z takiej konfiguracji, co prawda mój JTAG to ARM-USB-OCD ale jest podobny do turtelizera:
    plik /interface/olimex-arm-usb-ocd.cfg (konfiguruje parametry serwera gdb oraz sam interfejs do JTAG):
    
    # daemon configuration
    telnet_port 4444
    gdb_port 3333
    tcl_port 6666
    
    # tell gdb our flash memory map
    # and enable flash programming
    gdb_memory_map enable
    gdb_flash_program enable 
    
    interface ft2232
    ft2232_device_desc "Olimex OpenOCD JTAG"
    ft2232_layout olimex-jtag
    ft2232_vid_pid 0x15ba 0x0003
    


    plik /target/sam7s256.cfg(konfiguruje tap i łaczy z targetem, jest to zmodyfikowany plik sam7x256):
    
    #########################################################
    #
    # Target section, this example was tested with an
    # Olimex SAM7-P256 board.
    #
    
    # Start slow, speed up after reset
    jtag_khz 1000 
    
    #use combined on interfaces or targets that can't set TRST/SRST separately
    reset_config srst_only srst_pulls_trst
    
    if { [info exists CHIPNAME] } {	
       set  _CHIPNAME $CHIPNAME    
    } else {	 
       set  _CHIPNAME sam7s256
    }
    
    if { [info exists ENDIAN] } {	
       set  _ENDIAN $ENDIAN    
    } else {	 
       set  _ENDIAN little
    }
    
    if { [info exists CPUTAPID ] } {
       set _CPUTAPID $CPUTAPID
    } else {
       set _CPUTAPID 0x3f0f0f0f
    }
    
    jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
    
    set _TARGETNAME [format "%s.cpu" $_CHIPNAME] 
    
    target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi
    $_TARGETNAME configure -event reset-init { 
    	# disable watchdog
    	mww 0xfffffd44 0x00008000	
    	# enable user reset
    	mww 0xfffffd08 0xa5000001	
    	# CKGR_MOR : enable the main oscillator
    	mww 0xfffffc20 0x00000601	
    	sleep 10
    	# CKGR_PLLR: 96.1097 MHz
    	mww 0xfffffc2c 0x00481c0e 	
    	sleep 10
    	# PMC_MCKR : MCK = PLL / 2 ~= 48 MHz
    	mww 0xfffffc30 0x00000007	
    	sleep 10
    	# MC_FMR: flash mode (FWS=1,FMCN=60)
    	mww 0xffffff60 0x003c0100	
    	sleep 100
    }
    
    $_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x00200000 -work-area-size 0x4000 -work-area-backup 0
    
    #flash bank <driver> <base> <size> <chip_width> <bus_width>
    flash bank at91sam7 0 0 0 0 0
    init
    reset halt
    
    # For more information about the configuration files, take a look at:
    # openocd.texi


    i na sam koniec skrypt do programowania projektu, flash.script (umieszczony w katalogu projektu):
    wait_halt                                 # halt the processor and wait
    armv4_5 core_state arm                    # select the core state
    mww 0xffffff60 0x00320100                 # set flash wait state (AT91C_MC_FMR)
    mww 0xfffffd44 0xa0008000                 # watchdog disable (AT91C_WDTC_WDMR)
    mww 0xfffffc20 0xa0000601                 # enable main oscillator (AT91C_PMC_MOR)
    sleep 100                                 # wait 100 ms
    mww 0xfffffc2c 0x00480a0e                 # set PLL register (AT91C_PMC_PLLR)
    sleep 200                                 # wait 200 ms
    mww 0xfffffc30 0x7                        # set master clock to PLL (AT91C_PMC_MCKR)
    sleep 100                                 # wait 100 ms
    mww 0xfffffd08 0xa5000401                 # enable user reset AT91C_RSTC_RMR
    flash write_image erase RTOSDemo/RTOSDemo.elf 0x0  # program the onchip flash
    reset run                                 # reset processor
    shutdown                                  # stop OpenOCD


    Serwer debugowania startuje tak:
    openocd -f /usr/local/lib/openocd/interface/olimex-arm-usb-ocd.cfg -f /usr/local/lib/openocd/target/sam7s256.cfg

    Natomiast programowanie tak:
    openocd -f /usr/local/lib/openocd/interface/olimex-arm-usb-ocd.cfg -f /usr/local/lib/openocd/target/sam7s256.cfg -f flash.script

    Skoro pracujesz na win to te dwa pliki powinny się znajdować w katalogu instalacyjnym openocd. Możliwe że będziesz musiał pozmieniać ścieżki nieco. Dodam że używam wersji 0.1 svn:1353.
  • Computer Controls
  • #3
    Freddie Chopin
    MCUs specialist
    Używanie starych skryptów w nowych wersjach nie jest możliwe.

    Wykorzystaj po prostu skrypty standardowe uruchamiając OpenOCD mniej więcej tak:

    openocd -f interface/turtelizer2.cfg -f target/sam7s64.cfg

    Plik sam7s64.cfg musisz stworzyć sam - bazuj na przykladzie powyzej, albo na pliku dla innego procka z tej rodziny z katalogu OpenOCD.

    Daj znać jak poszło, bo na 99% nie jest to ostatni krok.

    4\/3!!
  • #4
    WWektor
    Level 12  
    Ruszyło :)
    Wywołane w taki sposób:
    openocd -f interface/turtelizer2.cfg -f target/sam7s64.cfg (dla debugowania)

    openocd -f interface/turtelizer2.cfg -f target/sam7s64.cfg -f flash.script (dla programowania)

    Musiałem zmienić jedną linijkę w skrypcie kolegi arrevalk:
    flash write_image erase RTOSDemo/RTOSDemo.elf 0x0

    nazwa pliku do wgrania:) i przede wszystkim adres pamięci flash 0x0 się nie zgadzał i wywalało komunikat że nie ma pod 0x0 flasha.
    Zastosowałem komende "flash probe" która zwraca adres wykrytego flasha i wyszło 0x00100000. W moim przypadku ta linijka wygląda tak:

    flash write_image erase main.elf 0x00100000

    Bardzo dziękuje za wszelką pomoc, mam nadzieje że ten temat przyda się te innym.
    Pozdrawiam
    Wiktor
  • #5
    WWektor
    Level 12  
    Chciałem trochę odświeżyć temat, mianowicie wysypuje mi się debuger. korzystam z GDB insight, Co jakiś czas wywala mi błąd Unable to set 32 bit software breakpoint at address.... i lipa.
    Dzieje się to w momencie przeskakiwania do konkretnej procedury w trybie step.
    macie jakies pomysły??
    Pozdrawiam