nRF5 SDK for Thread
Border Router Quick Start Guide

This Quick Start Guide provides information on how to set up Nordic's Border Router solution.

The Border Router is intended for development purposes, to make it easy for developers to connect their Thread network to the Internet in the development phase. It also supports the Thread native commissioning procedure utilizing NFC to initiate the process.

The Border Router consists of Raspberry Pi 3 B, NXP Semiconductors' NFC reader shield, and Nordic’s nRF52840 Development Kit. NXP Semiconductors' NFC reader shield is an optional element required for Thread native commissioning. However, the shield is not necessary to connect a Thread network to the Internet.

nRF52840 Development Kit acts as a connectivity chip running the Network Co-Processor (NCP) application. It communicates with Raspberry Pi using the Spinel protocol. Raspberry Pi firmware is based on OpenWRT (distribution #cb9d252) and contains several deamons for controlling the NCP and the NFC reader shield, such as wpantund and NFC commissioning deamon.

For your convenience, this SDK provides pre-built, ready-to-use binary images for both nRF52840 and Raspberry Pi. The binary image intended for Border Router is distributed under license inherited from OpenWRT project (OpenWRT_LICENSE.txt), with limitations imposed by license inherited from NXP’s EXPLORE_NFC_WW (NXP_EXPLORE-NFC-WW_LICENSE.pdf). EXPLORE_NFC_WW license applies if a user uses a Border Router feature to natively commission nodes using NFC. Licenses can be found in the package containing the Border Router binary image. For corresponding source code and build system, refer to README.md.

Required hardware

Required software

Setup procedure

Complete the following steps to set up the Border Router solution:

Flashing the Raspberry Pi image to the microSD card

  1. Install microSD card in your computer and start the Win32 Disk Imager.
    br_disk_imager.png
    Win32 Disk Imager
  2. In the Image File field, point to RaspPi_Thread_Border_Router_Demo_v0.8.0-1.alpha.img.
  3. In the Device field, select a device that corresponds to the microSD memory card that you connected to the computer.
    Warning
    If you choose an incorrect device, you may overwrite a partition on your computer or another device. Verify your choice by checking the letter mapped to the microSD card in My Computer.
  4. Click Write.
  5. After the image has been flashed, safely remove the microSD card from your computer. To do this, right-click the USB symbol in the taskbar and click Eject on the volume that represents the SD card.
    br_safely_remove.png
    Safely remove the microSD card
  6. Insert the microSD card into your Raspberry Pi.

Flashing the Network Co-Processor to the nRF52480 Development Kit

  1. Connect the nRF52840 Development Kit to the computer and power it on.
  2. Open the terminal (e.g. by pressing Windows Key + R and running cmd).
  3. Run the following command:
    nrfjprog --chiperase --family NRF52 --program <path_to_sdk>/examples/thread/experimental/ncp/hex/nrf52840_xxaa.hex

Starting the Border Router

  1. Connect the nRF52840 Development Kit to the Raspberry Pi using the microUSB – USB cable.
  2. Connect the Raspberry Pi through an Ethernet cable to your switch/router that provides IPv4 connectivity with the DHCP server enabled.
  3. Power on the nRF52840.
  4. Connect the microUSB power supply to the Raspberry Pi. The Border Router will start booting.
    br_start.png
    Starting the Border Router
    Depending on your microSD card speed, the Border Router should be fully operational within two minutes.

Thread Settings:

The following are the default settings of the Border Router:

Radio Channel: 11
PAN ID: 0xABCD
Network Master Key: 0x00112233445566778899AABBCCDDEEFF
Mesh-Local Prefix: FDDE:AD00:BEEF::/64
NAT64 Prefix: FD00:64:123:4567::/96

To customize the Thread settings, you must connect to the Border Router using SSH. This requires setting a password, which can be done in the LuCI configuration panel.

Because the Border Router received its IPv4 address dynamically using DHCPv4, you must log in to the router and check its address. Alternatively, you can use scanning software like Advanced IP Scanner. When the IPv4 address is known to you, open an Internet browser and go to this address. The LuCI configuration panel opens. The default logging credentials are: id: "root" and empty password. Change the password to a non-empty value.

Log in to the router using SSH. Vim and nano text editors are available on the Border Router. To change the settings, edit the /etc/config/thread_border_router file. The following lines can be found at the top of the file:

# NCP Configuration
ncp_interface="wpan0"
ncp_baudrate="115200"
# Thread Network Configuration
thread_network_key="00112233445566778899AABBCCDDEEFF"
thread_channel="11"
thread_panid="0xABCD"
# IPv6 Addresses Configuration for NAT64
prefix_nat48="fd00:0064:0123::"
prefix_nat64="fd00:0064:0123:4567::"
prefix_ula="fdff:cafe:cafe:cafe::"
# Commissioner Configuration
nfc_commissioner_enable=true

Edit these variables to customize the Thread configuration.

Connectivity:

NAT64 technology is enabled by default. It is used to enable communication between the IPv6-only Thread network with pure IPv4 LAN network that the Border Router connects to, as is the case in most applications. In that way, Thread nodes are able to connect to IPv4 cloud services. Thread devices will receive a NAT64-prefix and use it to create their own Unique Local Address.

The other connectivity option, which is also enabled by default, is support for the native IPv6 connection. It uses built-in DHCPv6 client on the Border Router which is able to receive prefixes from the Ethernet interface. If the received prefix is shorter than 63 bits, the 64-bit long subnet prefix is created and forwarded to the Thread network. In such situation, devices create one more address based on the forwarded prefix, which, unlike in a pure NAT64 solution, allows them to be reached from the Internet.

Testing

To test the Border Router, you can use another node with command line interface (CLI) and ping the Google DNS 8.8.8.8.

  1. Flash another nRF52840 Development Kit with nrfjprog, as described in Thread CLI Example. This time, use the following command:
    nrfjprog --chiperase --family NRF52 --program <path_to_sdk>/examples/thread/experimental/cli/hex/nrf52840_xxaa.hex --reset
  2. Start a terminal emulator like PuTTY and connect to the used COM port with the following UART settings:
    • Baud rate: 115.200
    • 8 data bits
    • 1 stop bit
    • No parity
    • HW flow control: None
    To find the particular COM port to connect to, open the Device Manager. The COM port number is displayed in the Ports (COM & LPT) tab next to the J-Link CDC UART Port.
    1. PuTTy must be configured in two steps. First, in the Session tab, set the the Serial line, Speed, and Connection Type values.
      br_putty_settings_1.png
      First step of PuTTY configuration
    2. Then, in the Connection -> Serial tab, set the remaining parameters, i.e. Data bits, Stop Bits, and Flow control.
      br_putty_settings_2.png
      Second step of PuTTy configuration
  3. After the console window appears, press Enter. If the prompt mark ">" appears, the serial connection has been established. When a command is executed successfully, ">Done" is reported.
  4. Run the following commands:
    panid 0xabcd
    ifconfig up
    thread start
    state
    ping fd00:0064:0123:4567::0808:0808
    Note
    0808:0808 is in fact the Google DNS server address "8.8.8.8" coded in an appropriate way.
  5. After running the command, you should receive the following result:
    16 bytes from fd00:64:123:4567:0:0:808:808: icmp_seq=5 hlim=39 time=111ms

Documentation feedback | Developer Zone | Subscribe | Updated