Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[LPC2148][OpenOCD][Linux] Nie działający debuger.

17 Paź 2011 21:27 1959 6
  • Poziom 10  
    Witam! Postanowiłem skorzystać z otwartych narzędzi do debogowania.
    Niestety nie za bardzo funkcjonuje...
    Code:

    Open On-Chip Debugger 0.5.0 (2011-08-26-10:27)
    Licensed under GNU GPL v2
    For bug reports, read
       http://openocd.berlios.de/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    init_targets
    Warning - assuming default core clock 12MHz! Flashing may fail if actual core clock is different.
    trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
    adapter_nsrst_delay: 100
    jtag_ntrst_delay: 100
    1500 kHz
    Info : clock speed 1500 kHz
    Error: JTAG scan chain interrogation failed: all ones
    Error: Check JTAG interface, timings, target power, etc.
    Error: Trying to use configured scan chain anyway...
    Error: lpc2148.cpu: IR capture error; saw 0x0f not 0x01
    Warn : Bypassing JTAG setup events due to errors
    Info : Embedded ICE version 15
    Error: unknown EmbeddedICE version (comms ctrl: 0xffffffff)
    Info : lpc2148.cpu: hardware has 2 breakpoint/watchpoint units
    Warn : ThumbEE -- incomplete support


    używam debugera BF30R (www.boff.pl) wraz z openocd w wersji 0.5(pobrane z repo ubuntu 11.10)

    config interfejsu:
    Code:

    #interface
    interface ft2232
    ft2232_device_desc "OOCDLink"
    ft2232_layout oocdlink
    ft2232_vid_pid 0x0403 0x6010
    #adapter_khz 5


    oraz configi celu:

    lpc2148.cfg
    Code:

    # NXP LPC2148 ARM7TDMI-S with 512kB flash (12kB used by bootloader) and 40kB SRAM (8kB for USB DMA), clocked with 12MHz crystal

    source [find target/lpc2xxx.cfg]

    # parameters:
    # - core_freq_khz - frequency of core in kHz during flashing, usually equal to connected crystal or internal oscillator, e.g. 12000
    # - adapter_freq_khz - frequency of debug adapter in kHz, should be 8x slower than core_freq_khz, e.g. 1000

    proc setup_lpc2148 {core_freq_khz adapter_freq_khz} {
       # 500kB flash and 32kB SRAM
       # setup_lpc2xxx <chip_name> <cputapid> <flash_size> <flash_variant> <workarea_size> <core_freq_khz> <adapter_freq_khz>
       setup_lpc2xxx lpc2148 "0x3f0f0f0f 0x4f1f0f0f" 0x7d000 lpc2000_v2 0x8000 $core_freq_khz $adapter_freq_khz
    }

    proc init_targets {} {
       # default to core clocked with 12MHz crystal
       echo "Warning - assuming default core clock 12MHz! Flashing may fail if actual core clock is different."
       
       # setup_lpc2148 <core_freq_khz> <adapter_freq_khz>
       setup_lpc2148 12000 1500
    }



    lpc2xxx.cfg
    Code:

    # Common setup for the LPC2xxx parts

    # parameters:
    # - chip_name - name of the chip, e.g. lpc2103
    # - cputapids - TAP IDs of the core, should be quoted if more than one, e.g. 0x4f1f0f0f or "0x3f0f0f0f 0x4f1f0f0f"
    # - flash_size - size of on-chip flash (available for code, not including the bootloader) in bytes, e.g. 0x8000
    # - flash_variant - "type" of LPC2xxx device, lpc2000_v1 (LPC22xx and older LPC21xx) or lpc2000_v2 (LPC213x, LPC214x, LPC210[123], LPC23xx and LPC24xx)
    # - workarea_size - size of work-area in RAM for flashing procedures, must not exceed the size of RAM available at 0x40000000, e.g. 0x2000
    # - core_freq_khz - frequency of core in kHz during flashing, usually equal to connected crystal or internal oscillator, e.g. 12000
    # - adapter_freq_khz - frequency of debug adapter in kHz, should be 8x slower than core_freq_khz, e.g. 1000

    proc setup_lpc2xxx {chip_name cputapids flash_size flash_variant workarea_size core_freq_khz adapter_freq_khz} {
       reset_config trst_and_srst
       
       # reset delays
       adapter_nsrst_delay 100
       jtag_ntrst_delay 100
       
       adapter_khz $adapter_freq_khz
       
       foreach i $cputapids {
          append expected_ids "-expected-id " $i " "
       }
       
       eval "jtag newtap $chip_name cpu -irlen 4 -ircapture 0x1 -irmask 0xf $expected_ids"
       
       set _TARGETNAME $chip_name.cpu
       target create $_TARGETNAME arm7tdmi -chain-position $_TARGETNAME
       
       $_TARGETNAME configure -work-area-phys 0x40000000 -work-area-size $workarea_size -work-area-backup 0
       
       if { $flash_size > 0 } {
          # flash bank <name> lpc2000 <base> <size> 0 0 <target#> <variant> <clock> [calc checksum]
          set _FLASHNAME $chip_name.flash
          flash bank $_FLASHNAME lpc2000 0x0 $flash_size 0 0 $_TARGETNAME $flash_variant $core_freq_khz calc_checksum
       }
    }

    proc init_targets {} {
       # FIX!!! read out CPUTAPID here and choose right setup. In addition to the
       # CPUTAPID some querying of the target would be required.
       return -error "This is a generic LPC2xxx configuration file, use a specific target file."
    }


    jakies propozycje? Dodam, że po wywołaniu openocd debuger sobie "mryga".
  • Specjalista - Mikrokontrolery
    "All ones" albo "all zeroes" to generalnie jest problem sprzętowo-konfiguracyjny, czyli albo coś nie łączy/jest zwarte, albo w układzie docelowym jest wyłączony interfejs JTAG (można go wyłączyć którymś tam pinem, programowo i włączając zabezpieczenie CRP).

    4\/3!!
  • Poziom 10  
    przegwizdałem taśmę, sprawdziłem zworki, przegwizdałem przejscia od złącza do proca... wszystko wydaje się w porządku... jakies pomysły teraz?
  • Specjalista - Mikrokontrolery
    Jeśli płytkę robiłeś sam, to zawsze piny układu mogą być odlutowane od padów, a jak dociskasz miernikiem, to stykają.

    Poza problemami sprzętowymi (w tym błędy schematu!) zostają Ci jeszcze problemy programowo/konfiguracyjne - w LPC2xxx interfejs JTAG należy WŁĄCZYĆ odpowiednim pinem.

    Cytat:
    P0.31/UP_LED/
    CONNECT
    17[6] O P0.31 — General purpose output only digital pin (GPO).
    O [...]
    Important: This is an digital output only pin. This pin MUST NOT be
    externally pulled LOW when RESET pin is LOW or the JTAG port will be
    disabled.
    [...]
    P1.26/RTCK 24[6] I/O P1.26 — General purpose input/output digital pin (GPIO).
    I/O
    [...]
    Note: LOW on RTCK while RESET is LOW enables pins P1.31:26 to operate
    as Debug port after reset.


    Można go wyłączyć też z poziomu programu...

    Zawsze zostaje też sprawa kwarcu jaki dołączony jest do mikrokontrolera i związanego z tym zegara JTAGa.

    4\/3!!
  • Poziom 10  
    jest to evalboard od kamami(zl9arm). sprawdzilem debuger z prockiem stm32f103 i działa... czyli cos musi byc z plytka/urzadzeniem. a config na 100% ok?
  • Specjalista - Mikrokontrolery
    Pliki konfiguracyjne które pokazałeś akurat pisałem ja (; Ale nimi się nie masz co przejmować, bo - tak jak pisałem na samym początku - "all ones" lub "all zeroes" to jest problem tego typu, że JTAG w ogóle nie odpowiada, bo np jest wyłączony.

    Bawiłem się dawno temu tą płytką i jest tam zworka od włączania JTAGa - JTAG_ENA. Masz ją ustawioną tak jak trzeba (po zmianie ustawienia odłączasz zasilanie!)?

    4\/3!!
  • Poziom 10  
    Freddie Chopin napisał:
    Pliki konfiguracyjne które pokazałeś akurat pisałem ja (;

    serio? Orientuje się, że w temacie ostro działasz, ale tego się nie spodziewałem :).
    co do zwory to rzecz jasna ustawiona jak Bóg przykazał... no nic. nie jest mi to niezbędne.. i tak czekam na płytę z lpc1768, na tym chcialem się trochę rozruszać. Widzę, że debuger działa, z STMem nie miał problemów. Jeszcze rano ze świeżą głową rzucę okiem, zdam raport w razie czego.