xubuntu openocd nRF51822 download

原创 2015年07月09日 23:32:53

最近发愁怎么在xubuntu系统里下载nRF51822和STM32F405RGT6的事情,今天终于下载成功,记录下解决的过程。

进入到bitcraze共享的Virtual Box虚拟机之后,进入到如下目录:

cd /home/bitcraze/projects/crazyflie2-nrf-firmware/

我们会发现Makefile文件,

#Put your personal build config in config.mk and DO NOT COMMIT IT!
-include config.mk

CLOAD_SCRIPT ?= ../crazyflie-clients-python/bin/cfloader

S110 ?= 1     # SoftDevice flashed or not
BLE  ?= 1     # BLE mode activated or not. If disabled, CRTP mode is active

CROSS_COMPILE?=arm-none-eabi-

CC=$(CROSS_COMPILE)gcc
AS=$(CROSS_COMPILE)as
LD=$(CROSS_COMPILE)gcc
OBJCOPY = $(CROSS_COMPILE)objcopy
SIZE = $(CROSS_COMPILE)size
GDB=$(CROSS_COMPILE)gdb

OPENOCD           ?= openocd
OPENOCD_DIR       ?= 
OPENOCD_INTERFACE ?= $(OPENOCD_DIR)interface/stlink-v2.cfg
OPENOCD_TARGET    ?= target/nrf51_stlink.tcl

NRF51_SDK ?= nrf51_sdk/nrf51822
NRF_S110 ?= s110

INCLUDES= -I Include -I Include/gcc -Iinterface

PERSONAL_DEFINES ?= 

PROCESSOR = -mcpu=cortex-m0 -mthumb
NRF= -DNRF51
PROGRAM=cf2_nrf

CFLAGS=$(PROCESSOR) $(NRF) $(PERSONAL_DEFINES) $(INCLUDES) -g3 -O0 -Wall# -fdata-sections
CFLAGS+= -fsingle-precision-constant -ffast-math
# --specs=nano.specs -flto
ASFLAGS=$(PROCESSOR)
LDFLAGS=$(PROCESSOR) -O0 --specs=nano.specs -Wl,-Map=$(PROGRAM).map# -Wl,--gc-sections
ifdef SEMIHOSTING
LDFLAGS+= --specs=rdimon.specs -lc -lrdimon
CFLAGS+= -DSEMIHOSTING
endif

ifeq ($(strip $(S110)), 1)
LDFLAGS += -T gcc_nrf51_s110_xxaa.ld
CFLAGS += -DS110=1
else
LDFLAGS += -T gcc_nrf51_blank_xxaa.ld
endif

ifeq ($(strip $(BLE)), 1)
CFLAGS += -DBLE=1

OBJS += src/ble/ble.o
OBJS += src/ble/ble_crazyflies.o
OBJS += src/ble/timeslot.o

OBJS += $(NRF51_SDK)/Source/ble/ble_advdata.o
OBJS += $(NRF51_SDK)/Source/ble/ble_conn_params.o
OBJS += $(NRF51_SDK)/Source/ble/ble_services/ble_srv_common.o
OBJS += $(NRF51_SDK)/Source/ble/ble_services/ble_dis.o
OBJS += $(NRF51_SDK)/Source/sd_common/softdevice_handler.o
OBJS += $(NRF51_SDK)/Source/app_common/app_timer.o


CFLAGS += -DBLE_STACK_SUPPORT_REQD -DNRF51 
CFLAGS += -I$(NRF51_SDK)/Include/gcc 
CFLAGS += -I$(NRF51_SDK)/Include/ 
CFLAGS += -I$(NRF51_SDK)/Include/ble/ 
CFLAGS += -I$(NRF51_SDK)/Include/ble/ble_services/ 
CFLAGS += -I$(NRF_S110)/s110_nrf51822_7.0.0_API/include
CFLAGS += -I$(NRF51_SDK)/Include/app_common/ 
CFLAGS += -I$(NRF51_SDK)/Include/sd_common/ 
endif


OBJS += src/main.o gcc_startup_nrf51.o system_nrf51.o src/uart.o \
        src/syslink.o src/pm.o src/systick.o src/button.o src/swd.o src/ow.o \
        src/ow/owlnk.o src/ow/ownet.o src/ow/owtran.o \
        src/ow/crcutil.o src/ds2431.o src/ds28e05.o src/esb.o src/memory.o


all: $(PROGRAM).elf $(PROGRAM).bin $(PROGRAM).hex
	$(SIZE) $(PROGRAM).elf
ifeq ($(strip $(S110)),1)
	@echo "S110 Activated"
else
	@echo "S110 Disabled"
endif
ifeq ($(strip $(BLE)),1)
	@echo "BLE  Activated"
else
	@echo "BLE  Disabled"
endif


$(PROGRAM).hex: $(PROGRAM).elf
	$(OBJCOPY) $^ -O ihex $@


$(PROGRAM).bin: $(PROGRAM).elf
	$(OBJCOPY) $^ -O binary $@


$(PROGRAM).elf: $(OBJS)
	$(LD) $(LDFLAGS) -o $@ $^


clean:
	rm -f $(PROGRAM).bin $(PROGRAM).elf $(OBJS)


## Flash and debug targets

flash: $(PROGRAM).hex
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets -c "reset halt" \
                 -c "flash write_image erase $(PROGRAM).hex" -c "verify_image $(PROGRAM).hex" \
                 -c "reset run" -c shutdown


flash_s110: $(NRF_S110)/s110_nrf51822_7.0.0_softdevice.hex
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets -c "reset halt" \
                 -c "nrf51 mass_erase" \
                 -c "flash write_image erase s110/s110_nrf51822_7.0.0_softdevice.hex" \
                 -c "reset run" -c shutdown


flash_mbs: bootloaders/nrf_mbs_v1.0.hex
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets -c "reset halt" \
                 -c "flash write_image erase $^" -c "verify_image $^" -c "reset halt" \
	               -c "mww 0x4001e504 0x01" -c "mww 0x10001014 0x3F000" \
	               -c "reset run" -c shutdown


flash_cload: bootloaders/cload_nrf_v1.0.hex
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets -c "reset halt" \
                 -c "flash write_image erase $^" -c "verify_image $^" -c "reset halt" \
	               -c "mww 0x4001e504 0x01" -c "mww 0x10001014 0x3F000" \
	               -c "mww 0x4001e504 0x01" -c "mww 0x10001080 0x3A000" -c "reset run" -c shutdown

mass_erase:
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets -c "reset halt" \
                 -c "nrf51 mass_erase" -c shutdown


reset:
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets \
	               -c reset -c shutdown


openocd: $(PROGRAM).elf
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets




semihosting: $(PROGRAM).elf
	$(OPENOCD) -d2 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets -c reset -c "arm semihosting enable" -c reset


gdb: $(PROGRAM).elf
	$(GDB) -ex "target remote localhost:3333" -ex "monitor reset halt" $^


flash_jlink:
	JLinkExe -if swd -device NRF51822 flash.jlink


cload: $(PROGRAM).bin
ifeq ($(strip $(S110)), 1)
	$(CLOAD_SCRIPT) flash $(PROGRAM).bin nrf51-fw
else
	@echo "Only S110 build can be bootloaded. Launch build and cload with S110=1"
endif


factory_reset:
	make mass_erase
ifeq ($(strip $(S110)),1)
	make flash_s110
	make flash_mbs
	make flash_cload
endif
	make flash

从上面的文件中,我们可以看到字样## Flash and debug targets下面基本上是跟下载有关系的命令行,正常情况下,只要在终端

make flash
make flash_s110
make flash_mbs
make flash_cload

就可以把对应的程序下载到nRF51822中,但是make flash之后会有如下提示错误:

bitcraze@bitcraze-vm:~/projects/crazyflie2-nrf-firmware$ make mass_erase
openocd -d2 -f interface/stlink-v2.cfg -f target/nrf51_stlink.tcl -c init -c targets -c "reset halt" \
                 -c "nrf51 mass_erase" -c shutdown
Open On-Chip Debugger 0.8.0 (2014-05-10-23:21)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
debug_level: 2
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v16 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.559498
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
    TargetName         Type       Endian TapName            State       
--  ------------------ ---------- ------ ------------------ ------------
 0* nrf51.cpu          hla_target little nrf51.cpu          running
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
Warn : Unknown device (HWID 0x00000058)

最后总是提示Warn : Unknown device (HWID 0x00000058),很奇怪,网上各种搜,最后还是觉得肯定不是硬件连接没有问题,还是openocd没有吃透导致识别错误。使用Makefile无法走通,我们知道openocd本身是一个命令一个命令的尝试去做debug的工具,所以我们可以把Makefile中的命令行拆开,看看是哪里出了问题。首先打开一个终端,键入openocd -d2 -f interface/stlink-v2.cfg -f target/nrf51_stlink.tcl

bitcraze@bitcraze-vm:~/projects/crazyflie2-nrf-firmware$ openocd -d2 -f interface/stlink-v2.cfg -f target/nrf51_stlink.tcl
Open On-Chip Debugger 0.8.0 (2014-05-10-23:21)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
debug_level: 2
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v16 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.556986
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints

然后再打开另外一个终端,键入telnet localhost 4444:

bitcraze@bitcraze-vm:~$ telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> 

然后继续输入reset和halt

> reset
> halt
target state: halted
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0xc1000003 pc: 0xfffffffe msp: 0xffffffd8

下面我们该擦除nRF51822里面的程序,下载新的程序:

> nrf51 mass_erase

有的时候这里依然会提示Unknown device (HWID 0x00000058),但是再尝试输入一次nrf51 mass_erase可能就没有这个问题了,之后可以开始下载mbs,cload,s110和firmwire的程序了,这里我们进行了分别下载,ST-LINK速度超慢。

> flash write_image erase bootloaders/nrf_mbs_v1.0.hex
auto erase enabled
wrote 3072 bytes from file bootloaders/nrf_mbs_v1.0.hex in 19.444714s (0.154 KiB/s)
> flash write_image erase bootloaders/cload_nrf_v1.0.hex         
auto erase enabled
wrote 13312 bytes from file bootloaders/cload_nrf_v1.0.hex in 87.047249s (0.149 KiB/s)
> flash write_image erase s110/s110_nrf51822_7.0.0_softdevice.hex
auto erase enabled
Padding image section 0 with 2112 bytes
> flash write_image erase cf2_nrf.hex
auto erase enabled
wrote 45056 bytes from file cf2_nrf.hex in 286.025299s (0.154 KiB/s)
> 


从上面来看,所有的程序都已经下载OK。另外从Makefile最后的部分可以看到是支持jlink下载的,这部分之后会尝试下

flash_jlink:
	JLinkExe -if swd -device NRF51822 flash.jlink

使用 OpenOCD 进行单步调试

虽然不喜欢进行单步调试,但是不可否认它的重要性,所以也尝试了一下,以帮助后来有需要的小伙伴。关于 ESP32 的更多博客,请查看 【ESP32 系列博客 - 目录】【安装 OpenOCD】 本人使...
  • tidyjiang
  • tidyjiang
  • 2017年05月22日 15:25
  • 1580

OpenOCD介绍以及上手

Versaloon支持AVR和AVR32的方式是模仿JTAGICE mkII,所以使用上相对简单很多,只是使用官方的开发环境即可。但Versaloon对ARM的支持是通过OpenOCD来实现,Open...
  • bytxl
  • bytxl
  • 2015年12月03日 15:06
  • 1807

【教程】在Ubuntu下搭建ARM处理器 arm-linux-gcc 交叉编译环境以及OpenJTAG + openocd 烧写环境

在Ubuntu下搭建ARM处理器 arm-linux-gcc 交叉编译环境以及OpenJTAG + openocd 烧写环境前言本教程所用操作系统为Ubuntu 16.04,所用ARM处理器为Sams...
  • techping
  • techping
  • 2016年11月14日 15:57
  • 738

Ubuntu环境下使用OpenOCD调试目标平台

硬件环境:HP CQ45 308 操作系统:KUbuntu12.04 LTS 32bit 目标平台:LM3S811最小系统         OpenOCD最早接触应该是在半年前了,当时买了OpenJ...
  • tugouxp
  • tugouxp
  • 2017年01月31日 19:19
  • 3526

第七期 OpenOCD配置分析 《路由器就是开发板》

这一节我们来说说OpenOCD。刚开始接触嵌入式硬件时只知道写程序,觉得调试根本不需要,随着时间的积累和问题复杂度的提升,才发现调试对于一个系统的重要性。生活中很多这样的例子,调试,永远都是事物良性发...
  • aggresss
  • aggresss
  • 2016年08月28日 18:58
  • 3298

Ubuntu,kubuntu与xubuntu的差别 Ubuntu各版本主要差异

Ubuntu各版本主要差异Ubuntu官方考虑到使用者的不同需求,提供各种不同的发行版。虽然发布了几种版本的Ubuntu系统,但是它们的核心系统是一模一样的。可以这么说不同发行版的Ubuntu的区别在...
  • github_35160620
  • github_35160620
  • 2016年08月30日 23:59
  • 23638

5 gdb server建立 利用openocd配合jlink仿真器。 下载openocd-0.3.1.tar.bz2文件,解压。 下载libusb,用来支持jlink。 运行以下命令编译op

主要是在Ubuntu下进行的工作。在Windwos下基本相同。前一阵实验了Eclipse 开发ARM Linux的程序。现在有项目需要用STM32,建立一个STM32的开发环境。 插件:org.ec...
  • lsy5631932
  • lsy5631932
  • 2013年07月05日 16:22
  • 2399

openOCD的使用1: 应用openOCD和Jlink仿真器连接Freescale K60系列 MCU

openOCD的使用1: 应用openOCD和Jlink仿真器连接Freescale K60系列 MCU       OpenOCD是一款功能强大的开源调试软件,支持多种调试器,例如Jlink、...
  • qingwufeiyang12346
  • qingwufeiyang12346
  • 2015年05月24日 19:55
  • 1576

在Ubutu14.04下,如何用OpenJTAG+OPENOCD烧写程序

OPENOCD INSTALL 一:安装openocd: cd /path/you/install/openocd (1) 通过 git 获取openocd git clone gi...
  • Oimchuan
  • Oimchuan
  • 2015年02月02日 16:38
  • 3356

BLE-NRF51822教程3-sdk程序框架剖析

本讲为框架介绍,不会牵涉到太多代码细节。   51822的官方SDK其实是没有框架依耐性的。什么叫框架,比如TI的BLE SDK中就有一个操作系统抽象层(OSAL)他是一个轮训的调度。你需要按照他的方...
  • changyourmind
  • changyourmind
  • 2017年01月04日 12:36
  • 3265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xubuntu openocd nRF51822 download
举报原因:
原因补充:

(最多只允许输入30个字)