LINUX.ORG.RU

stm32f0discovry и openocd

 , , , ,


0

1

собрал с опциями

CC=gcc CXX=g++ LD=ld AR=ar ./configure --prefix=/home/splinter/INSTALL/openocd --program-suffix=-060 --enable-ft2232_libftdi --enable-rlink --enable-stlink
запускаю
./openocd -d2 -f ../share/openocd/scripts/board/stm32f0discovery.cfg -f ../share/openocd/scripts/interface/stlink-v2.cfg
Получаю ошибку:
Open On-Chip Debugger 0.7.0 (2013-11-10-21:17)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
debug_level: 2
Error: The specified debug interface was not found (hla)
The following debug interfaces are available:
Runtime Error: /home/splinter/INSTALL/openocd/share/openocd/scripts/interface/stlink-v2.cfg:5: 
in procedure 'script' 
at file "embedded:startup.tcl", line 58
at file "../share/openocd/scripts/board/stm32f0discovery.cfg", line 4
in procedure 'interface' called at file "/home/splinter/INSTALL/openocd/share/openocd/scripts/interface/stlink-v2.cfg", line 5

★★★★★

Последнее исправление: splinter (всего исправлений: 1)
Ответ на: комментарий от UVV

Cannot access memory at address 0xffffffff

В общем с openocd так и незавелось, но удалось подцепить к eclipse st-util, код компилится и заливается на плату, но любой код на устройстве валится с ошибкой:

Cannot access memory at address 0xffffffff

Пример кода:

#include <stm32f0xx.h>
void main() {
	int i;
	i = 1;
}
В дизассемблере:
00000000:   Failed to execute MI command:
          -data-disassemble -s 0 -e 32 -- 1
          Error message from debugger back end:
          putpkt: write failed: Обрыв канала.
00000001:    ; <UNDEFINED> instruction: 0xffffffff
...
00000059:   Failed to execute MI command:
          -data-disassemble -s 89 -e 181 -- 1
          Error message from debugger back end:
          putpkt: write failed: Обрыв канала.
В консоле:
2013-11-11T23:44:52 INFO src/stlink-common.c: Loading device parameters....
2013-11-11T23:44:52 INFO src/stlink-common.c: Device connected is: F0 device, id 0x20006440
2013-11-11T23:44:52 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
Chip ID is 00000440, Core ID is  0bb11477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
GDB connected.
recv: qSupported:qRelocInsn+
query: Supported;qRelocInsn+
send: PacketSize=3fff;qXfer:memory-map:read+
recv: Hg0
send: 
recv: ?
send: S05
recv: Hc-1
send: 
recv: qC
send: 
recv: qAttached
query: Attached;
...
send: 
recv: g
libusb_handle_events() | has_error
[!] send_recv
send: 00000000000000000000000008100000305472b7987c0000230000000f270000404972b700000000010000001007dabf2f8c77b7d8ca78b720a057b701000000
recv: qXfer:memory-map:read::0,fff
query: Xfer;memory-map:read::0,fff
Xfer: type:memory-map;op:read;annex:;addr:0;length:4095
send: m<?xml version="1.0"?><!DOCTYPE memory-map PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"     "http://sourceware.org/gdb/gdb-memory-map.dtd"><memory-map>  <memory type="rom" start="0x00000000" length="0x10000"/>  <memory type="ram" start="0x20000000" length="0x2000"/>  <memory type="flash" start="0x08000000" length="0x10000">    <property name="blocksize">0x400</property>  </memory>  <memory type="ram" start="0x40000000" length="0x1fffffff"/>  <memory type="ram" start="0xe0000000" length="0x1fffffff"/>  <memory type="rom" start="0x1fffec00" length="0xc00"/>  <memory type="rom" start="0x1ffff800" length="0x10"/></memory-map>
recv: qXfer:memory-map:read::27c,d83
query: Xfer;memory-map:read::27c,d83
Xfer: type:memory-map;op:read;annex:;addr:636;length:3459
send: l
recv: m0,4
libusb_handle_events() | has_error
[!] send_recv
send: 8000ffff
recv: qTStatus
query: TStatus;
send: 
recv: qfThreadInfo
query: fThreadInfo;
send: 
recv: qL1200000000000000000
send: 
recv: qSymbol::
query: Symbol;:
send: 
recv: g
libusb_handle_events() | has_error
[!] send_recv
send: 00000000000000000000000008100000305472b7987c0000230000000f270000404972b700000000010000001007dabf2f8c77b7d8ca78b720a057b701000000
recv: qL1200000000000000000
send: 
recv: m0,4
libusb_handle_events() | has_error
[!] send_recv
send: 8000ffff
recv: qL1200000000000000000
send: 
recv: qL1200000000000000000
send: 
recv: m0,2
libusb_submit_transfer(-1)
[!] send_recv
send: 8000
recv: m2,2

splinter ★★★★★
() автор топика
Ответ на: комментарий от UVV

splinter@bastile:~/workspace/proj1$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/home/splinter/sat/libexec/gcc/arm-none-eabi/4.6.2/lto-wrapper
Target: arm-none-eabi
Configured with: ../gcc-linaro-4.6-2011.10/configure --target=arm-none-eabi --prefix=/home/splinter/sat --enable-multilib --enable-languages=c,c++ --with-newlib --with-gnu-as --with-gnu-ld --disable-nls --disable-shared --disable-threads --with-headers=newlib/libc/include --disable-libssp --disable-libstdcxx-pch --disable-libmudflap --disable-libgomp --disable-werror --with-system-zlib --disable-newlib-supplied-syscalls
Thread model: single
gcc version 4.6.2 20111004 (prerelease) (Linaro GCC 4.6-2011.10)

splinter ★★★★★
() автор топика

У f0, вроде бы, были какие-то проблемы с встроенным в неё st-link'ом (версии 1), попробуй f3/f4 с версией 2 (знаю, что их ещё достать надо, но что поделать).

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

я две недели с ним еЖусь. Мне необходим именно stm32f0хх. Я точно помню что заводил блинк при помощи gdb, но не помню как.

splinter ★★★★★
() автор топика
Ответ на: комментарий от prischeyadro

мне кажется шайтан в компиляторе.

splinter ★★★★★
() автор топика

второй ключ в вызове openocd лишний, д.б. достаточно

./openocd -d2 -f ../share/openocd/scripts/board/stm32f0discovery.cfg

registrant ★★★★★
()
Ответ на: комментарий от registrant

по крайне мере, поднимается устройство stlink2_5.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

Да ē-моē! Я тоже не пользуюсь stdlib и printf (они слишком много сожрут ресурсов). Я ведь образно! У меня вот такой "printf":

#define P(arg) prnt((uint8_t*)arg)

void prnt(uint8_t *wrd){
	while(*wrd) USB_Send_Data(*wrd++);
}
а потом что-нибудь вроде
void findDev(){
	// find 1-wire devices
	dev_amount = OW_Scan(ID_buf, dev_amount);
	P("Found ");
	USB_Send_Data(dev_amount + '0');
	P(" devices");
	newline();
}

(это для F103)

Anon
()
Ответ на: комментарий от Anon

хм, спасибо за код, вечером попробую. Но я же говорю, что любой бинарник там крешится.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

вот рабочий Makefile для F103:

BIN=testproject

# Headers that don't have c-files with same name
#  but project depends on them
INDEPENDENT_HEADERS=usb_conf.h user_protocol.h includes.h

# Here are STDPeriphLib objects used in project
SPL=
SPL+=misc
SPL+=stm32f10x_adc
SPL+=stm32f10x_bkp
SPL+=stm32f10x_can
SPL+=stm32f10x_cec
SPL+=stm32f10x_crc
SPL+=stm32f10x_dac
SPL+=stm32f10x_dbgmcu
SPL+=stm32f10x_dma
SPL+=stm32f10x_exti
SPL+=stm32f10x_flash
SPL+=stm32f10x_fsmc
SPL+=stm32f10x_gpio
SPL+=stm32f10x_i2c
SPL+=stm32f10x_iwdg
SPL+=stm32f10x_pwr
SPL+=stm32f10x_rcc
SPL+=stm32f10x_rtc
SPL+=stm32f10x_sdio
SPL+=stm32f10x_spi
SPL+=stm32f10x_tim
SPL+=stm32f10x_usart
SPL+=stm32f10x_wwdg

STLIBDIR=stm32_lib
OBJDIR=mk
USB_LIBDIR=usb_lib

INDEPENDENT_HEADERS+=$(STLIBDIR)/stm32f10x_conf.h

TOOLS_PATH=/usr/arm-none-eabi
TOOLS_PREFIX=arm-none-eabi-

CPFLAGS=-Obinary
ODFLAGS=-S

CFLAGS=-c -mcpu=cortex-m3 -mthumb -Wall -Werror -mapcs-frame -D__thumb2__=1 -Os
CFLAGS+=-msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3
CFLAGS+=-march=armv7-m -mfix-cortex-m3-ldrd -ffunction-sections -fdata-sections
CFLAGS+=-I./cmsis -I./stm32_lib -I./usb_lib -I.
CFLAGS+=-DSTM32F10X_MD

LDFLAGS=-static -mcpu=cortex-m3 -mthumb -mthumb-interwork -Wl,--start-group
LDFLAGS+=-L$(TOOLS_PATH)/lib/thumb2 -lc -lg -lstdc++ -lsupc++ -lgcc -lm
LDFLAGS+=-Wl,--end-group -Xlinker -Map -Xlinker $(BIN).map -Xlinker
LDFLAGS+=-T ./cmsis/stm32f100rb_flash.ld -o $(BIN)
LDFLAGS+=-Wl,--gc-sections -Wl,-s

ASFLAGS=-mcpu=cortex-m3 -I./cmsis -I./stm32_lib -gdwarf-2 -gdwarf-2

CC=$(TOOLS_PREFIX)gcc
AS=$(TOOLS_PREFIX)as
SIZE=$(TOOLS_PREFIX)size
CP=$(TOOLS_PREFIX)objcopy
OD=$(TOOLS_PREFIX)objdump

# These are main project sources
SRC=$(wildcard *.c)
MAIN_OBJ=$(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))

STM32_LIBSRC=$(addprefix $(STLIBDIR)/, $(addsuffix .c, $(SPL)))
OBJ=$(addprefix $(OBJDIR)/, $(addsuffix .o, $(SPL)))

OBJ+=$(OBJDIR)/system_stm32f10x.o $(OBJDIR)/startup.o
STM32_LIBSRC+=cmsis/system_stm32f10x.c

# USB library sources
USB_SRC=$(wildcard $(USB_LIBDIR)/*.c)
USB_OBJ=$(addprefix $(OBJDIR)/, $(USB_SRC:$(USB_LIBDIR)/%.c=%.o))

ALL_OBJ=$(OBJ) $(MAIN_OBJ) $(USB_OBJ)
ALL_SRC=$(SRC) $(STM32_LIBSRC) $(USB_SRC)

all: $(BIN)

$(OBJDIR):
	mkdir $(OBJDIR)

$(OBJDIR)/%.o: $(STLIBDIR)/%.c
	$(CC) $(CFLAGS) $< -o $@

$(OBJDIR)/system_stm32f10x.o: ./cmsis/system_stm32f10x.c
	$(CC) $(CFLAGS) $< -o $@

$(OBJDIR)/startup.o: ./cmsis/startup_stm32f10x_md.s
	$(AS) $(ASFLAGS) ./cmsis/startup_stm32f10x_md.s -o $(OBJDIR)/startup.o

$(OBJDIR)/%.o: %.c
	$(CC) $(CFLAGS) $< -o $@

$(OBJDIR)/%.o: $(USB_LIBDIR)/%.c
	$(CC) $(CFLAGS) $< -o $@

$(SRC) : %.c : %.h $(INDEPENDENT_HEADERS)
	@touch $@

%.h: ;

$(BIN): $(OBJDIR) $(ALL_OBJ)
	$(CC) $(ALL_OBJ) $(LDFLAGS)
	$(CP) $(CPFLAGS) $(BIN) $(BIN).bin
	$(OD) $(ODFLAGS) $(BIN) > $(BIN).list
	$(SIZE) -B $(BIN)

clean:
	rm -f $(ALL_OBJ) $(BIN).map $(BIN) $(BIN).list
	rmdir $(OBJDIR)

load: $(BIN)
	st-flash write $(BIN).bin 0x08000000


.PHONY: clean load

Anon
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.