星期日, 09. 九月 2018 07:51下午 - beautifulzzzz

1、安装步骤

    1. GNU Arm Embedded Toolchain官网下载最新的gcc-arm工具链,写文章时下载的是:

      gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2


    1. 从NORDIC官网下载相应版本的SDK,我这里选择的是12.3.0版本:
    ode Name Version
    RF5-SDK-v12-zip nRF5 SDK Zip File - works with S132 v3 and S130 v2 12.3.0
    RF5-SDK-zip nRF5 SDK Zip File - works with S112 v6.1.0, S132 v6.1.0, S140 v6.1.0, and S212 v5.0.0 --- Note that support for the nRF51 Series was included up until v12.3 of the nRF5 SDK 15.1.0

    1. 解压工具链和nRF5-SDK到AAAA目录下,并编辑sdk_root/components/toolchain/gcc/Makefile.posix :

      GNU_INSTALL_ROOT := /home/btfz/Downloads/AAAA/gcc-arm-none-eabi-5_4-2016q3

      GNU_VERSION := 5.4.1

      GNU_PREFIX := arm-none-eabi


    1. 从NORDIC官网下在nRF5x-Tools-Linux,我下载的版本是(解压后也放在AAAA目录下):

      nRF5x-Command-Line-Tools_9_7_3_Linux-x86_64.tar


    1. 从SEGGER官网下载最新的J-Link工具包 J-Link Software and Documentation Pack,我下载的是最新的linux-64位-deb安装版:

2、编译与烧写BLINK工程

    1. 检查开发板所用的芯片为nRF51822-QFAA,参考nRF51822 Product Anomaly Notification v3.3,得知QFAA是256 kB Flash, 16 kB RAM:

    1. 参考developer(#5)>Software Development Kit > nRF5 SDK > nRF5 SDK v12.3.0 > Getting Started > Using the SDK with other boards中的介绍:

    Depending on the device on the legacy board, you might need to change the memory layout. For example, all nRF51 examples assume that you are using the 32 kB variant of nRF51, so if you are using a variant with 16 kB RAM, you must decrease the size of IRAM1 by 16 kB (0x4000 in hex). In Keil, click Project > Options for Target '...' and modify the values for "Read/Write Memory Area". For GCC, change the linked *.ld file in the Makefile.

    因此需要修改nRF5_SDK_12.3.0_d7731ad/examples/peripheral/blinky/pca10028/blank/armgcc/blinky_gcc_nrf51.ld中的RAM配置为0x4000:

      MEMORY
    {
    FLASH (rx) : ORIGIN = 0x0, LENGTH = 0x40000
    RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x4000
    }

    注: 如果RAM大小不符合条件,会导致程序烧写成功,但是没有任何效果!!!

    1. 编译运行(以blinky - blank为例):

      ➜ cd /examples/peripheral/blinky/pca10028/blank/armgcc

      ➜ armgcc make clean

      rm -rf _build

      ➜ armgcc make all

      mkdir _build

      Compiling file: nrf_log_backend_serial.c

      ...

      Compiling file: system_nrf51.c

      Linking target: _build/nrf51422_xxac.out

        text	   data	    bss	    dec	    hex	filename
      3160 112 112 3384 d38 _build/nrf51422_xxac.out

      Preparing: _build/nrf51422_xxac.hex

      Preparing: _build/nrf51422_xxac.bin

    1. 烧写运行:

    运行烧写的脚本在makefile中都有,但是在此之前要做两件事:

    • 将nrfjprog加入全局变量
    • 修改makefile中的erase芯片类型为nrf51

    注: 在当前terminal中运行一次export PATH=$PATH:/home/btfz/Downloads/AAAA/nRF5x-Command-Line-Tools_9_7_3/nrfjprog/,则对当前窗口有效,直至串口关闭。

      ➜  armgcc  export PATH=$PATH:/home/btfz/Downloads/AAAA/nRF5x-Command-Line-Tools_9_7_3/nrfjprog/
    ➜ armgcc make erase
    nrfjprog --eraseall -f nrf51
    Erasing user available code and UICR flash areas.
    Applying system reset.
    ➜ armgcc make flash
    Flashing: _build/nrf51422_xxac.hex
    nrfjprog --program _build/nrf51422_xxac.hex -f nrf51 --sectorerase
    Parsing hex file.
    Erasing page at address 0x0.
    Erasing page at address 0x400.
    Erasing page at address 0x800.
    Erasing page at address 0xC00.
    Applying system reset.
    Checking that the area to write is not protected.
    Programming device.
    nrfjprog --reset -f nrf51
    Applying system reset.
    Run.

3、编译烧写BLE-HRS工程

    1. 类似2中的需要调整RAM,这里也要将flash和ram配置做修改。参考S130_SDS_v2.0.pdf15.1 Memory resource map and usage

    其中flash的占用情况为:

    其中ram的占用情况为:

    因此修改ble_app_hrs_gcc_nrf51.ld中的flash和ram的配置为:

      MEMORY
    {
    FLASH (rx) : ORIGIN = 0x1b000, LENGTH = 0x23000
    RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0x2000
    }
    1. 修改makefile中的erase的芯片系列为nrf51
    1. 烧写:

      make erase

      make flash_softdevice

      make flash

4、玩转nRF51822必备知识

  • 1)板子和芯片对应关系

    由于nRf51822和nRF51422差别不大,因此我们之前一直用pca10028工程来做实验。此外我看了下最新的SDK中的DEMO,发现没有pca10028了,我猜测应该是nRF51822在新版本SDK中不继续支持了。

  • 2)协议栈和芯片对应关系

    可见我们上面用的S130支持众多芯片且具备BLE的Central and Peripheral功能。

  • 3)NORDIC提供的一些协议栈

LINKS

[1].GNU Arm Embedded Toolchain

[2].nRF5-SDK Download Page

[3].nRF5x-Tools-Linux Download Page

[4].nRF51 Development Kit complete setup for Linux

[5].NORDIC 开发者社区 -- 资料最全的地方

[6].nRF51822_pan_v3.3.pdf

[7].S130_SDS_v2.0.pdf

nRF51822系列文章

[nRF51822] 1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO

[nRF51822] 2、D-BUG之诗

[nRF51822] 3、 新年也来个总结——图解nRF51 SDK中的Button handling library和FIFO library

[nRF51822] 4、 图解nRF51 SDK中的Schedule handling library 和Timer library

[nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

[nRF51822] 6、基于nRF51822平台的flash读写研究

[nRF51822] 7、基础实验代码解析大全(前十)

[nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI

[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC

[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC

[nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写

[nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM

[nRF51822] 13、浅谈nRF51822和NRF24LE1/NRF24LU1/NRF24L01经典2.4G模块无线通信配置与流程

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

[nRF51822] 15、穿戴式设备上电量检测装置的设计及细节技术点(偏专业硬件文章)

[nRF51822] 16、nRF51822的随机数生成器,及随机数生成器的一些知识(可以帮您补补随机数发生器的知识)

[异常解决] Keil安装好nRF51822开发环境,运行DEMO报错:Error:“GPIOTE_CONFIG_NUM_OF_LOW_POWER_ENVENTS” is undefined

[异常解决] How to build a gcc toolchain for nRF51 on linux (very detailed!!!)

[蓝牙] 1、蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)

[蓝牙] 2、蓝牙BLE协议及架构浅析&&基于广播超时待机说广播事件

[蓝牙] 3、 剖析BLE心率检测工程

[蓝牙] 4、Heart Rate Service module

[蓝牙] 5、Battery Service module

[蓝牙] 6、基于nRF51822的蓝牙心率计工程消息流Log分析(详细)

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975

[编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)的更多相关文章

  1. 在Linux下搭建nRF51822的开发烧写环境(makefile版)

    http://www.qingpingshan.com/m/view.php?aid=394836

  2. [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

    目录 一.SDCC(Small Device C Compiler)编译环境搭建 1.1.下载 1.2.编译 1.3.测试 二.Hex2Bin+命令行烧写工具配置使用 2.1.下载工具安装配置 2.2 ...

  3. [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)

    星期二, 10. 七月 2018 01:01上午 - beautifulzzzz 一.SDCC(Small Device C Compiler)编译环境搭建 SDCC是一个小型设备的C语言编译器,该编 ...

  4. [编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP

    April 18, 2020 6:54 AM - BEAUTIFULZZZZ 目录 0 前言 1 gradle 安装配置 1.1 卸载系统默认装的gradle 1.2 下载对应版本的二进制文件 1.3 ...

  5. [编译] 9、在Linux下搭建 nordic 最新基于 zephyr 的开发烧写环境

    目录 前言 1.概述 2.安装工具 3.获取 nRF Connect SDK 源码 4.安装 Python modules 5.安装 toolchain 6.下载 nRF Command Line T ...

  6. 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境

    在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...

  7. Linux下搭建一个nginx+2tomcat负载均衡环境(转)

    一.安装tomcat 1.将tomcat安装包上传到Linux下: 2.解压2个tomcat,并分别修改名称: 1).解压命令:unzip 2).修改用户名:mv 3.分别修改两个tomcat的端口号 ...

  8. [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP

    星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不讨论用IDE和文本编辑器开发的优劣,是基于以下两点考虑去尝试用命令行编译安卓APP的: 了解安卓APP ...

  9. linux下搭建nginx+php(FastCGI)+mysql运行环境

    一.安装环境 1.CentOS5.5 2.php5.4 3.MySQL5.5.19 二.安装程序依赖库和开发环境 为了省事把所需要的库文件全都安装上,可以使用rpm包安装,也可以用yum命令安装, 1 ...

随机推荐

  1. docker简单介绍----docker仓库的应用

    docker hub:主要用来存储docker镜像的仓库 docker默认提供了一个docker仓库,我们也可以自建私有仓库或者使用第三方的docker仓库来pull或者push镜像 这里我们以阿里云 ...

  2. 跨域资源共享(CORS)

    同源策略 同源策略是浏览器的一个安全策略,只允许当前页面或当前域下发送请求,如果向其他域发送请求,会被浏览器拦截 同源的意思:协议.IP地址.端口三者一致,浏览器才会认为是同一个域,三者中有一个不一致 ...

  3. EndNote中文文献导入出错和数量限制解决

    发现之前记录的存在忽略,把存在的一个重要问题遗漏了,Endnote中文文献导入无法导入,软件奔溃问题,现在在原先基础上补上(补到最后): ..一路绿色φ(>ω<*) φ(>ω< ...

  4. Nginx 中利用 Lua 脚本做访问控制

    使用场景 需要在后端服务之前做访问控制,或没有后端服务的场景,如静态文件. 实验环境 Ubuntu 14.04 Nginx 1.4.6 安装 Lua 运行环境 sudo apt-get install ...

  5. 强连通分量Kosaraju

    #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #i ...

  6. buaaoo_first_improvement

    优化,还是不优化,这是个问题 本讨论仅基于程序基本上正确的情况下. (一)第一次作业 众所周知,本次作业没有优化到100分的都进入了B组或者C组,所以事实上本次作业的优化是十分简单的,在这里提几句. ...

  7. PHP如何处理emoji表情存入utf8的数据库

    一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.这是怎么回事呢? 原来是因为Mysql的utf8字符集是3字节的,而em ...

  8. RabbitMQ通过Exchange.headers属性代替routekey,x-match实现队列精准匹配

    消费者: static void Main(string[] args) { ConnectionFactory factory = new ConnectionFactory() { HostNam ...

  9. python 对任意文件(jpg,png,mp3,mp4)base64的编码解码

    程序是事件驱动的,写博客是什么驱动的?事件? 时间?no,我承认我很懒,甚至不愿意记录总结.哪是什么驱动的? 对! 问题驱动的.遇到了问题解决了问题突然想起来搬到blog上,让遇到相同问题的可以参考下 ...

  10. 二.Nginx反向代理和静态资源服务配置

    2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...