logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AT91sams256] Błąd uruchamiania AT91sams256 z Eclipse i OpenOCD przy użyciu OLIMEX ARM-USB-OCD

rafbie6 28 Sty 2011 15:45 2508 3
REKLAMA
  • #1 9069354
    rafbie6
    Poziom 2  
    Posty: 2
    Witam,

    używam płytki AT91sams256, Eclipse IDE for C/C++ Developers, yagarto-bu-2.17_gcc-4.2.1-c-c++_nl-1.15.0_gi-6.6_20070901, yagarto-tools-20070303-setup oraz openocd-2007re204-setup-rc01. Komunikuję się za pomocą OLIMEX ARM-USB-OCD.

    Staram się uruchomić przykładowy program zgodnie z tą książką (wersja we flashu)"Using_Open_Source_Tools_for_AT91SAM7S_Cross_Development_revision_C"

    Zainstalowałem całe powyższe oprogramowanie oraz sterowniki dla mojego JTAGa.
    Skonfigurowałem OpenOCD z Eclipse tak jak jest napisane w tym poradniku używając pliku konfiguracyjnego dla mojej płytki i JTAGa (at91sam7s256-armusbocd).



    #define our ports
    telnet_port 4444
    gdb_port 3333

    #commands specific to the Amontec JTAGKey
    interface ft2232
    ft2232_device_desc "Olimex OpenOCD JTAG A"
    ft2232_layout "olimex-jtag"
    ft2232_vid_pid 0x15BA 0x0003
    jtag_speed 2
    jtag_nsrst_delay 200
    jtag_ntrst_delay 200

    #reset_config <signals> [combination] [trst_type] [srst_type]
    reset_config srst_only srst_pulls_trst

    #jtag_device <IR length> <IR capture> <IR mask> <IDCODE instruction>
    jtag_device 4 0x1 0xf 0xe

    #daemon_startup <'attach'|'reset'>
    daemon_startup reset

    #target <type> <endianess> <reset_mode> <jtag#> [variant]
    target arm7tdmi little run_and_init 0 arm7tdmi_r4

    #run_and_halt_time <target#> <time_in_ms>
    run_and_halt_time 0 30



    Po uruchomieniu OpenOCD pojawia się taki błąd.
    Info: openocd.c:93 main(): Open On-Chip Debugger (2007-09-05 09:00 CEST)
    Error: ft2232.c:1341 ft2232_init_ftd2xx(): unable to open ftdi device: 1

    Szukałem informacji na ten temat na obcojęzycznych forach ale rozwiązania nie znalazłem.
  • REKLAMA
  • #2 9069371
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    OMG, przecież ty używasz narzędzi z ery paleozoiku, to nie dziwne, że coś nie działa... Zainstaluj najnowsze Eclipse, najnowsze OpenOCD, najnowsze kompilatory, a potem dopiero walcz.

    https://www.elektroda.pl/rtvforum/topic1313509.html
    https://www.elektroda.pl/rtvforum/topic1339518-0.html

    4\/3!!
  • REKLAMA
  • #3 9082017
    rafbie6
    Poziom 2  
    Posty: 2
    Witam,

    Zainstalowałem najnowsze wersje OpenOCD, Yagarto i Eclipse IDE for C/C++ Developers. Korzystam z przykładowego projektu:

    # ***************************************************************
    # *     Makefile for Atmel AT91SAM7S256 - flash execution       *
    # *                                                             *
    # *                                                             *
    # *   James P Lynch  May 12, 2007                               *
    # ***************************************************************
    
    NAME = demo_at91sam7_blink_flash
    
    # variables 
    CC      = arm-none-eabi-gcc
    LD      = arm-none-eabi-ld -v
    AR      = arm-none-eabi-ar
    AS      = arm-none-eabi-as
    CP      = arm-none-eabi-objcopy
    OD		= arm-none-eabi-objdump
    
    CFLAGS  = -I./ -c -fno-common -O0 -g
    AFLAGS  = -ahls -mapcs-32 -o crt.o
    LFLAGS  =  -Map main.map -Tdemo_at91sam7_blink_flash.cmd
    CPFLAGS = --output-target=binary
    ODFLAGS	= -x --syms
    
    OBJECTS = crt.o	main.o timerisr.o timersetup.o isrsupport.o lowlevelinit.o blinker.o
    
    
    # make target called by Eclipse (Project -> Clean ...)
    clean:
    	-rm $(OBJECTS) crt.lst main.lst main.out main.bin main.hex main.map main.dmp
    
             
    #make target called by Eclipse  (Project -> Build Project)
    all:  main.out
    	@ echo "...copying"
    	$(CP) $(CPFLAGS) main.out main.bin
    	$(OD) $(ODFLAGS) main.out > main.dmp
    
    main.out: $(OBJECTS) demo_at91sam7_blink_flash.cmd 
    	@ echo "..linking"
    	$(LD) $(LFLAGS) -o main.out $(OBJECTS) libc.a libm.a libgcc.a 
    
    crt.o: crt.s
    	@ echo ".assembling"
    	$(AS) $(AFLAGS) crt.s > crt.lst
    
    main.o: main.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) main.c
    	
    timerisr.o: timerisr.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) timerisr.c
    	
    lowlevelinit.o: lowlevelinit.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) lowlevelinit.c
    	
    timersetup.o: timersetup.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) timersetup.c
    	
    isrsupport.o: isrsupport.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) isrsupport.c
    
    blinker.o: blinker.c
    	@ echo ".compiling"
    	$(CC) $(CFLAGS) blinker.c
    	
    
    # **********************************************************************************************
    #                            FLASH PROGRAMMING                                         
    #
    # Alternate make target for flash programming only
    #
    # You must create a special Eclipse make target (program) to run this part of the makefile 
    # (Project -> Create Make Target...  then set the Target Name and Make Target to "program")
    #
    # OpenOCD is run in "batch" mode with a special configuration file and a script file containing
    # the flash commands. When flash programming completes, OpenOCD terminates.
    #
    # Note that the script file of flash commands (script.ocd) is part of the project
    #
    # Programmers: Martin Thomas, Joseph M Dupre, James P Lynch
    # **********************************************************************************************
    
    # specify output filename here (must be *.bin file)
    TARGET = main.bin
    
    # specify the directory where openocd executable and configuration files reside
    OPENOCD_DIR = 'c:/Program Files/openocd-2007re141/bin/'
    
    # specify OpenOCD executable (pp is for the wiggler, ftd2xx is for the USB debuggers)
    #OPENOCD = $(OPENOCD_DIR)openocd-pp.exe
    OPENOCD = $(OPENOCD_DIR)openocd-ftd2xx.exe
    
    # specify OpenOCD configuration file (pick the one for your device)
    #OPENOCD_CFG = $(OPENOCD_DIR)at91sam7s256-wiggler-flash-program.cfg
    #OPENOCD_CFG = $(OPENOCD_DIR)at91sam7s256-jtagkey-flash-program.cfg
    OPENOCD_CFG = $(OPENOCD_DIR)at91sam7s256-armusbocd-flash-program.cfg
    
    # program the AT91SAM7S256 internal flash memory
    program: $(TARGET)
    	@echo "Flash Programming with OpenOCD..."			# display a message on the console
    	$(OPENOCD) -f $(OPENOCD_CFG)						# program the onchip FLASH here
    	@echo "Flash Programming Finished."					# display a message on the console




    Najpierw wywalał się taki błąd:

    **** Build of configuration Default for project gfgfg ****

    make all
    .assembling
    arm-elf-as -ahls -mapcs-32 -o crt.o crt.s > crt.lst
    /usr/bin/sh: arm-elf-as: command not found
    make: *** [crt.o] Error 127


    więc zamieniłem arm-elf-as na arm-none-eabi-as i wszystkie inne zmienne również. I wywala się coś takiego:


    **** Build of configuration Default for project demo_at91sam7_blink_flash ****
    
    make all 
    ..linking
    arm-none-eabi-ld -v -Map main.map -Tdemo_at91sam7_blink_flash.cmd -o main.out crt.o	main.o timerisr.o timersetup.o isrsupport.o lowlevelinit.o blinker.o libc.a libm.a libgcc.a 
    GNU ld (GNU Binutils) 2.21
    arm-none-eabi-ld: error: Source object libc.a(atol.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libc.a(atol.o)
    arm-none-eabi-ld: error: Source object libc.a(strlen.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libc.a(strlen.o)
    arm-none-eabi-ld: error: Source object libc.a(strtol.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libc.a(strtol.o)
    arm-none-eabi-ld: error: Source object libc.a(ctype_.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libc.a(ctype_.o)
    arm-none-eabi-ld: error: Source object libc.a(impure.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libc.a(impure.o)
    arm-none-eabi-ld: error: Source object libgcc.a(_udivsi3.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libgcc.a(_udivsi3.o)
    arm-none-eabi-ld: error: Source object libgcc.a(_umodsi3.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libgcc.a(_umodsi3.o)
    arm-none-eabi-ld: error: Source object libgcc.a(_dvmd_tls.o) has EABI version 0, but target main.out has EABI version 5
    arm-none-eabi-ld: failed to merge target specific data of file libgcc.a(_dvmd_tls.o)
    make: *** [main.out] Error 1


    Widzę, że z wersjami jest problem , więc dlatego chciałem zainstalować starsze wersje pasujące do przykładu.
  • #4 9082037
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Pobierz z mojej strony przykład dla LPC2103 i przerób go dla Twojego układu:
    - w skrypcie linkera ustaw prawidłowe adresy i rozmiary pamięci
    - w startupie nic nie musisz zmieniać
    - w tablicy wektorów nic nie musisz zmieniać jeśli nie korzystasz z przerwań, jeśli z nich korzystasz poprzez układ AIC, to musisz upewnić się, że offset do rejestru podającego adres funkcji jest prawidłowy - raczej jest
    - w makefile nie zmieniasz nic (ewentualnie nazwę projektu czy nazwę skryptu linkera, jeśli ją zmienisz)

    Pozatym oczywiście podstawiasz swój kod z miejsce mojego pliku main.c

    4 lata odkąd powstały te pliki to wieczność - zmieniło się tak wiele, że wg mnie prościej wziąć działający zestaw plików i przerobić do Twoich potrzeb niż próbować poprawić niedziałający.

    Ewentualnie problem może być prozaiczny i wystarczy zrobić "make clean" przed kompilacją nowymi narzędziami, bo pewnie stare pliki obiektowe zostały i nie zgadzają się z nowymi bibliotekami.

    4\/3!!
REKLAMA