Wednesday, July 6, 2016

nRF51822 Debuggen mit gdb ? Yes we can!

Hallo,

bisher habe ich mich mit dem Thema Debuggen von Mikrocontrollern nur sehr am Rande auseinander gesetzt. Doch im Rahmen eines Projekts musste auch mal ein komplizierter Fehlerzustand analysiert werden. Da aus Budgetgründen nicht die von Nordic vertriebenen Entwicklungsboards und auch nicht KEIL oder nrfStudio verwendet wurde sondern alles mit GNU unter Linux entwickelt werden sollte, blieb beim Debuggen nur gdb in der Wahl. Auch zur Verbindung des nRF51822  mit dem Computer wurde  wurde nicht ein Segger Produkt verwendet, sondern ein ST-Link V2.

Letztendlich waren folgende Schritte nach neuer Installation der Linux Variante
Ubuntu 16.04 (Xenial Xerus) notwendig:

    sudo apt-get install git
    sudo apt-get install autoconf
    sudo apt-get install libusb-1.0-0-dev
- Bauen und Installtion der USB Treiber für den ST-Link V2
  (https://github.com/texane/stlink stlink.git)

    git clone https://github.com/texane/stlink stlink.git
    cd stlink.git/
    ./autogen.sh
    ./configure
    make
    sudo cp st-* /usr/bin
    sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d

- Bauen und Installtion von openocd
   (git://git.code.sf.net/p/openocd/code openocd-code)

    git clone git://git.code.sf.net/p/openocd/code openocd-code
    cd openocd-code/
    ./bootstrap
    ./configure
    make
    sudo make install

- Download und Auspacken GCC
   https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q1-update/+download/gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2

   z.B. über tar xvjf  gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2










- Download und Auspacken nRF5 SDK
   https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v11.x.x/nRF5_SDK_11.0.0_89a8197.zip

   z.B. unzip  nRF5_SDK_11.0.0_89a8197.zip

- Kompilieren der C-Quellcodes mit gcc (arm-none-eabi-gcc mit Schalter -O0 -g)

  make

- flashen mit openocd und telnet

    Beispiel openocd.cfg 


    #nRF51822 Target
    source [find interface/stlink-v2.cfg] 

    transport select hla_swd
    set WORKAREASIZE 0x4000
    source [find target/nrf51.cfg] 

 
   openocd -d2 openocd.cfg

   telnet 127.0.0.1  4444

    halt    nrf51 mass_erase         (nur beim ersten mal notwendig)
    program <pfad>/blinky.hex verify
    reset



- Debuggen mit openocd und gdb (arm-none-eabi-gdb)
   arm-none-eabi-gdb -ex “target remote :3333“  blinky.out

   list main (Zeilennummern Anzeigen)
   break blinky.c:Zeilennummer (Breakpoint setzen)
   continue     (gdb stoppt bei Zeilennummer)
   step oder next bis zur Fehlerhaftenzeile
   print Variable auswerten
   clear blinky.c:Zeilennummer (Breakpoint löschen)
   continue (weiter ohne Breakpoints)


weitere Infos unter https://www.youtube.com/playlist?list=PLxJ8_KSR8bp6XCGlEVSwO6zdMXLkDi2lT

Viel Spaß beim Debuggen
pcbreflux

No comments:

Post a Comment