On 12/12/15 16:46, Stuart Longland wrote:
> On 12/12/15 16:38, Steve wrote:
>> > looking at that photo, it's the one on the left. R19 trace sneaks
>> > between the right and middle pins and goes down to the left pin.
> Ahh, gotcha.  Okay, I'll plug 'er in and see what I get.
> 
> Hopefully not smoke signals. :-)

Okay, took a bit of tinkering, but here's the full detail.

You'll need a recent OpenOCD, likely not the one shipped as a binary in
Debian/Ubuntu.  I'm doing this on a Gentoo host, and use
dev-embedded/openocd-9999 which pulls source from their git repository.

You'll also need a cable that exposes the SWD pins from the JTAG header.
 The three pins you need are:

Pin 7: SWDIO
Pin 8: GND
Pin 9: SWCLK

http://www.longlandclan.id.au/~stuartl/freedv/2015/12/12-swd/sm1000-stlinkv2-swd.jpg
shows how to connect this cable.  I've actually broken out the other
three signals as well.  SWDIO is the green wire, SWCLK is the blue wire,
and the white/orange one is the ground.

Also visible but not used is MCU VDD (orange, pin 1), TRACESWO (brown,
pin 13) and nRST (white/green, pin 15).

Open up two terminal sessions.  In the first, create a file in your
local working directory called openocd.cfg with the following content
(thanks to Glen English for getting me started with the ST-Link/V2):

source [find interface/stlink-v2.cfg]
source [find target/stm32f4x.cfg]
reset_config none separate

That last line is important, since we don't connect nRST to the target
on the SM1000.

Then start openocd, you should see this:
> RC=0 stuartl@vk4msl-mb /tmp $ openocd 
> Open On-Chip Debugger 0.10.0-dev-00120-g7a8915f (2015-11-25-18:49)
> Licensed under GNU GPL v2
> For bug reports, read
>         http://openocd.org/doc/doxygen/bugs.html
> Info : auto-selecting first available session transport "hla_swd". To 
> override use 'transport select <transport>'.
> Info : The selected transport took over low-level target control. The results 
> might differ compared to plain JTAG/SWD
> adapter speed: 2000 kHz
> adapter_nsrst_delay: 100
> none separate
> none separate
> Info : Unable to match requested speed 2000 kHz, using 1800 kHz
> Info : Unable to match requested speed 2000 kHz, using 1800 kHz
> Info : clock speed 1800 kHz
> Info : STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748
> Info : using stlink api v2
> Info : Target voltage: 1.555905
> Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
> Info : accepting 'gdb' connection on tcp/3333
> Info : device id = 0x10016413
> Info : flash size = 1024kbytes
> undefined debug reason 7 - target needs reset
> stm32f4x.cpu: target state: halted
> target halted due to debug-request, current mode: Thread 
> xPSR: 0x01000000 pc: 0x0802cdb0 msp: 0x20020000
> Info : Unable to match requested speed 8000 kHz, using 4000 kHz
> Info : Unable to match requested speed 8000 kHz, using 4000 kHz
> adapter speed: 4000 kHz
> 

Now flip over to your second session and run gdb:
> RC=0 stuartl@vk4msl-mb ~ $ arm-none-eabi-gdb 
> projects/sm1000/codec2/stm32/sm1000.elf
> GNU gdb (Gentoo 7.8 vanilla) 7.8
> Copyright (C) 2014 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "--host=x86_64-pc-linux-gnu 
> --target=arm-none-eabi".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://bugs.gentoo.org/>.
> Find the GDB manual and other documentation resources online at:
> <http://www.gnu.org/software/gdb/documentation/>.
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from projects/sm1000/codec2/stm32/sm1000.elf...done.

Tell gdb to connect to the "remote" target:
> (gdb) target remote localhost:3333
> Remote debugging using localhost:3333
> warning: Can not parse XML target description; XML support was disabled at 
> compile time
> warning: Can not parse XML memory map; XML support was disabled at compile 
> time
> 0x00000000 in ?? ()

At this point, you simply need to tell the device to reset and initialise:
> (gdb) monitor reset init
> stm32f4x.cpu: target state: halted
> target halted due to debug-request, current mode: Thread 
> xPSR: 0x01000000 pc: 0x0802cdb0 msp: 0x20020000
> Unable to match requested speed 8000 kHz, using 4000 kHz
> Unable to match requested speed 8000 kHz, using 4000 kHz
> adapter speed: 4000 kHz

Now, set your breakpoints, when you're happy, use `c` to continue execution.
> (gdb) break main
> Breakpoint 1 at 0x802baa8: file src/sm1000_main.c, line 256.
> (gdb) c
> Continuing.
> 
> Breakpoint 1, main () at src/sm1000_main.c:256
> warning: Source file is more recent than executable.
> 256     int main(void) {
> (gdb) list
> 251         /* Load from the latest image */
> 252         memcpy(&prefs, &image[newest], sizeof(prefs));
> 253         return 0;
> 254     }
> 255
> 256     int main(void) {
> 257         struct freedv *f;
> 258         int            nin, nout, i;
> 259         int            n_samples, n_samples_16k;
> 260

You should be able to stop the program anywhere by hitting ^C, inspect
variables, adjust breakpoints, etc.  There are also front-ends to gdb if
that's preferred.

Regards,
-- 
Stuart Longland (aka Redhatter, VK4MSL)

I haven't lost my mind...
  ...it's backed up on a tape somewhere.

------------------------------------------------------------------------------
_______________________________________________
Freetel-codec2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freetel-codec2

Reply via email to