Project Slinky using the Nordic nRF52 Board

This tutorial shows you how to create, build and run the Slinky application and communicate with newtmgr for a Nordic nRF52 board.

Prerequisites

Create a New Project

Create a new project if you do not have an existing one. You can skip this step and proceed to create the targets if you already have a project created or completed the Sim Slinky tutorial.

Run the following commands to create a new project. We name the project slinky.

$ newt new slinky
Downloading project skeleton from apache/mynewt-blinky...
...
Installing skeleton in slinky...
Project slinky successfully created
$ cd slinky
$ newt upgrade
Downloading repository mynewt-core (commit: master) ...
...
mcuboot successfully upgraded to version 1.3.1

Create the Targets

Create two targets for the nRF52-DK board - one for the bootloader and one for the Slinky application.

Run the following newt target commands, from your project directory, to create a bootloader target. We name the target nrf52_boot.

$ newt target create nrf52_boot
$ newt target set nrf52_boot bsp=@apache-mynewt-core/hw/bsp/nrf52dk
$ newt target set nrf52_boot build_profile=optimized
$ newt target set nrf52_boot app=@mcuboot/boot/mynewt

Run the following newt target commands to create a target for the Slinky application. We name the target nrf52_slinky.

$ newt target create nrf52_slinky
$ newt target set nrf52_slinky bsp=@apache-mynewt-core/hw/bsp/nrf52dk
$ newt target set nrf52_slinky build_profile=debug
$ newt target set nrf52_slinky app=@apache-mynewt-core/apps/slinky

Build the Targets

Run the newt build nrf52_boot command to build the bootloader:

$ newt build nrf52_boot
Building target targets/nrf52_boot
Compiling repos/mcuboot/boot/bootutil/src/caps.c
Compiling repos/mcuboot/boot/bootutil/src/encrypted.c
Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c
Compiling repos/apache-mynewt-core/apps/slinky/src/main.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c
Compiling repos/mcuboot/boot/bootutil/src/image_ed25519.c
Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c
Compiling repos/apache-mynewt-core/boot/split/src/split_config.c
    ...
Archiving @apache-mynewt-core_util_rwlock.a
Archiving @apache-mynewt-core_util_streamer.a
Linking ~/dev/slinky/bin/targets/nrf52_boot/app/@mcuboot/boot/mynewt/mynewt.elf
Target successfully built: targets/nrf52_boot

Run the newt build nrf52_slinky command to build the Slinky application:

$newt build nrf52_slinky
Building target targets/nrf52_slinky
Compiling repos/mcuboot/boot/bootutil/src/caps.c
Compiling repos/mcuboot/boot/bootutil/src/encrypted.c
Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c
Compiling repos/apache-mynewt-core/apps/slinky/src/main.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c
Compiling repos/mcuboot/boot/bootutil/src/image_ed25519.c
Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c
Compiling repos/apache-mynewt-core/boot/split/src/split_config.c
       ...
Archiving @apache-mynewt-core_util_rwlock.a
Archiving @apache-mynewt-core_util_streamer.a
Linking ~/dev/slinky/bin/targets/nrf52_slinky/app/@apache-mynewt-core/apps/slinky/slinky.elf
Target successfully built: targets/nrf52_slinky

Sign and Create the Slinky Application Image

Run the newt create-image nrf52_slinky 1.0.0 command to create and sign the application image. You may assign an arbitrary version (e.g. 1.0.0) to the image.

$ newt create-image nrf52_slinky 1.0.0
App image succesfully generated: ~/dev/slinky/bin/targets/nrf52_slinky/app/@apache-mynewt-core/apps/slinky/slinky.img
$

Connect to the Board

  • Connect a micro-USB cable from your computer to the micro-USB port on the nRF52-DK board.

  • Turn the power on the board to ON. You should see the green LED light up on the board.

Load the Bootloader and the Slinky Application Image

Run the newt load nrf52_boot command to load the bootloader onto the board:

$ newt load nrf52_boot
Loading bootloader
$

Run the newt load nrf52_slinky command to load the Slinky application image onto the board:

$ newt load nrf52_slinky
Loading app image into slot 1
$

Connect Newtmgr with the Board using a Serial Connection

Set up a serial connection from your computer to the nRF52-DK board (See Serial Port Setup).

Locate the port, in the /dev directory on your computer, that the serial connection uses. The format of the port name is platform dependent:

  • Mac OS uses the format tty.usbserial-<some identifier>.

  • Linux uses the format TTYUSB<N>, where N is a number. For example, TTYUSB2.

  • MinGW on Windows uses the format ttyS<N>, where N is a number. You must map the port name to a Windows COM port: /dev/ttyS<N> maps to COM<N+1>. For example, /dev/ttyS2 maps to COM3.

    You can also use the Windows Device Manager to find the COM port number.

$ ls /dev/tty*usbserial*
/dev/tty.usbserial-1d11
$

Setup a newtmgr connection profile for the serial port. For our example, the port is /dev/tty.usbserial-1d11.

Run the newtmgr conn add command to define a newtmgr connection profile for the serial port. We name the connection profile nrf52serial.

Note:

  • You will need to replace the connstring with the specific port for your serial connection.

  • On Windows, you must specify COM<N+1> for the connstring if /dev/ttyS<N> is the serial port.

$ newtmgr conn add nrf52serial type=serial connstring=/dev/tty.usbserial-1d11
Connection profile nrf52serial successfully added
$

You can run the newt conn show command to see all the newtmgr connection profiles:

$ newtmgr conn show
Connection profiles:
  nrf52serial: type=serial, connstring='/dev/tty.usbserial-1d11'
  sim1: type=serial, connstring='/dev/ttys012'
$

Use Newtmgr to Query the Board

Run some newtmgr commands to query and receive responses back from the board (See the Newt Manager Guide for more information on the newtmgr commands)

Run the newtmgr echo hello -c nrf52serial command. This is the simplest command that requests the board to echo back the text.

$ newtmgr echo hello -c nrf52serial
hello
$

Run the newtmgr image list -c nrf52serial command to list the images on the board:

$ newtmgr image list -c nrf52serial
Images:
 slot=0
    version: 1.0.0
    bootable: true
    flags: active confirmed
    hash: f411a55d7a5f54eb8880d380bf47521d8c41ed77fd0a7bd5373b0ae87ddabd42
Split status: N/A
$

Run the newtmgr taskstat -c nrf52serial command to display the task statistics on the board:

$ newtmgr taskstat -c nrf52serial
      task pri tid  runtime      csw    stksz   stkuse last_checkin next_checkin
      idle 255   0    43484      539       64       32        0        0
      main 127   1        1       90     1024      353        0        0
     task1   8   2        0      340      192      114        0        0
     task2   9   3        0      340       64       31        0        0
$