Difference between revisions of "Dev/Debugging"

From PaparazziUAV
Jump to: navigation, search
(Introduction)
Line 1: Line 1:
 
= Introduction =
 
= Introduction =
 
GDB can be used for debugging the code on the boards.
 
GDB can be used for debugging the code on the boards.
 +
 +
JTAG interface was designed for on chip debug. That means, it can debug chips that has no bootloader at all.
 +
The board provided by JobyRobotics is based on FTDI chip that allows two simultaneous USB connections. For us it means that FLOSS JTAG allows JTAG and UART/COM connections.
 +
 +
Let's take a look at upper side of the board. It contains JTAG connector (which is connected on photo) and two sets of RX/TX LEDs for JTAG and UART/COM interface separately.
 +
 +
[[Image:Jtag-up.jpg]]
 +
 +
On the other side of the board there is 4 pin UART/COM connector, which contains: Ground (black), TX (yellow), RX (orange) and +5V (red)
 +
 +
[[Image:Jtag-down.jpg]]
 +
 +
Usage of board is pretty simple: JTAG can be used to upload firmware into the board and/or repair board with broken bootloader, and UART/COM interfaced can be used to make "COM port style" connection to the board. COM connection can be used for example for telemetry debug.
  
 
= Procedure =
 
= Procedure =

Revision as of 12:38, 2 December 2011

Introduction

GDB can be used for debugging the code on the boards.

JTAG interface was designed for on chip debug. That means, it can debug chips that has no bootloader at all. The board provided by JobyRobotics is based on FTDI chip that allows two simultaneous USB connections. For us it means that FLOSS JTAG allows JTAG and UART/COM connections.

Let's take a look at upper side of the board. It contains JTAG connector (which is connected on photo) and two sets of RX/TX LEDs for JTAG and UART/COM interface separately.

Jtag-up.jpg

On the other side of the board there is 4 pin UART/COM connector, which contains: Ground (black), TX (yellow), RX (orange) and +5V (red)

Jtag-down.jpg

Usage of board is pretty simple: JTAG can be used to upload firmware into the board and/or repair board with broken bootloader, and UART/COM interfaced can be used to make "COM port style" connection to the board. COM connection can be used for example for telemetry debug.

Procedure

  1. Start openocd in a new shell since this process needs to remain running.
    To program the Lisa/L board run the command
    openocd -f interface/lisa-l.cfg -f board/lisa-l.cfg
    or if you are still using the old paparazzi-stm32 package and your path is not set properly
    cd /opt/paparazzi/stm32/share/openocd/scripts/; /opt/paparazzi/stm32/bin/openocd -f interface/lisa-l.cfg -f board/lisa-l.cfg
    To program the Lisa/M board via JTAG change dir to "<paparazzi root>/arm-multilib/share/openocd/scripts", and run the command:
    openocd -f interface/flossjtag.cfg -f board/lisa-l.cfg
  2. Start GDB with an argument of the elf file created and uploaded to the board.
    If you programmed with the ap target then the command would be along the lines of
    arm-none-eabi-gdb var/<airframe>/ap/ap.elf
    or (if you are using the old paparazzi-stm32 package)
    /opt/paparazzi/stm32/bin/arm-none-eabi-gdb ./var/<airframe>/ap/ap.elf
    Replace <airframe> with the name of the airframe that has been built.
  3. Now connect GDB to the board
    target remote localhost:3333
  4. Now we need to set some break points in the code.
    In this example the ap target was part of the rotorcraft and main.c contains the main program. Open rotorcraft sw/airborne/firmwares/rotorcraft/main.c and find a line at which you'd like to set a break point.
    break main.c:113
  5. Stop the currently running code
    monitor reset halt
  6. Reset the code back to the start
    monitor reset init
  7. We probably want to ignore the interrupt calls for the moment so we can step through the code as it's being called. Note that we don't always want to do this.
    monitor cortex_m3 maskisr on
  8. Now we can run the program which will stop at the break point we set.
    continue

Useful commands

  • A stack trace can be printed with the command
    bt
  • show the variable of a variable
    print i2c1.status
  • Show (eXamine) the value of the 9 bytes hardware register at address 0x40005800 and show them in hex format:
    x/9x 0x40005800