nrf52dk: platform support
This commit is contained in:
parent
20f9515ed1
commit
d39ad95db5
22 changed files with 4173 additions and 0 deletions
254
platform/nrf52dk/README.md
Normal file
254
platform/nrf52dk/README.md
Normal file
|
@ -0,0 +1,254 @@
|
|||
Contiki for nRF52 Development Kit
|
||||
=================================
|
||||
This guide's aim is to help you with using Contiki for
|
||||
Nordic Semiconductor's nRF52 DK.
|
||||
|
||||
The port depends on Nordic Semiconductor IoT SDK for nRF52.
|
||||
The IoT SDK contains source code and libraries which are
|
||||
required for successfull port compilation. It also contains
|
||||
SoftDevice binary driver which is required for BLE operation.
|
||||
See prerequisites section for details on how to set up the SDK.
|
||||
|
||||
For more information about SoftDevice please refer to the SDK
|
||||
docummentation [nRF52 Datasheet and SDK documentation].
|
||||
|
||||
This port supports DK versions PCA10040 and PCA10036.
|
||||
|
||||
Port Features
|
||||
=============
|
||||
The following features have been implemented:
|
||||
* Support for IPv6 over BLE using Contiki 6LoWPAN implementation
|
||||
* Contiki system clock and rtimers (using 32kHz and 1MHz timers)
|
||||
* UART driver
|
||||
* Watchdog driver
|
||||
* Hardware RNG
|
||||
* Temperature sensor driver
|
||||
* DK LED driver
|
||||
* DK Buttons driver
|
||||
* Real Time Transfer (RTT) I/O support
|
||||
|
||||
Note that this port supports only IPv6 network stack.
|
||||
|
||||
The port is organized as follows:
|
||||
* nRF52832 CPU and BLE drivers are located in `cpu/nrf52832` folder
|
||||
* nRF52 Development Kit drivers are located in `platform/nrf52dk` folder
|
||||
* Platform examples are located in `examples/nrf52dk` folder
|
||||
|
||||
Prerequisites and Setup
|
||||
=======================
|
||||
In order to compile for the nRF52 DK platform you'll need:
|
||||
|
||||
* nRF5 IOT SDK
|
||||
https://developer.nordicsemi.com
|
||||
|
||||
Download nRF5 IOT SDK, extract it to a folder of your choice,
|
||||
and point `NRF52_SDK_ROOT` environmental variable to it, e.g.,:
|
||||
|
||||
```
|
||||
wget https://developer.nordicsemi.com/nRF5_IoT_SDK/nRF5_IoT_SDK_v0.9.x/nrf5_iot_sdk_3288530.zip
|
||||
unzip nrf5_iot_sdk_3288530.zip -d /path/to/sdk
|
||||
export NRF52_SDK_ROOT=/path/to/sdk
|
||||
```
|
||||
|
||||
* An ARM compatible toolchain
|
||||
The port has been tested with GNU Tools for ARM Embedded Processors
|
||||
version 5.2.1.
|
||||
|
||||
For Ubuntu you can use package version provided by your distribution:
|
||||
```
|
||||
sudo apt-get install gcc-arm-none-eabi
|
||||
```
|
||||
|
||||
Alternatively, install the toolchain from PPA to get the latest version
|
||||
of the compiler: https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa
|
||||
|
||||
For other systems please download and install toolchain available at
|
||||
https://launchpad.net/gcc-arm-embedded
|
||||
|
||||
* GNU make
|
||||
|
||||
* Segger JLink Software for Linux
|
||||
https://www.segger.com/jlink-software.html
|
||||
|
||||
This package contains tools necessary for programming and debugging nRF52 DK.
|
||||
|
||||
For Ubuntu you can download and install a .deb package. Alternatively download
|
||||
tar.gz archive and extract it to a folder of your choice. In this case you
|
||||
need to set `NRF52_JLINK_PATH` environmental variable to point to the
|
||||
JLink tools location:
|
||||
|
||||
```
|
||||
export NRF52_JLINK_PATH=/path/to/jlink/tools
|
||||
```
|
||||
|
||||
To keep this variable set between sessions please add the above line to your
|
||||
`rc.local` file.
|
||||
|
||||
In order to access the DK as a regular Linux user create a `99-jlink.rules`
|
||||
file in your udev rules folder (e.g., `/etc/udev/rules.d/`) and add the
|
||||
following line to it:
|
||||
|
||||
```
|
||||
ATTRS{idProduct}=="1015", ATTRS{idVendor}=="1366", MODE="0666"
|
||||
```
|
||||
When installing from a deb package, the `99-jlink.rules` file is added
|
||||
automatically to /etc/udev/rules.d folder. However, the syntax of the file
|
||||
doesn't work on newer udev versions. To fix this problem edit this file and
|
||||
replace ATTR keyword with ATTRS.
|
||||
|
||||
To fully use the platform a BLE enabled router device is needed. Please refer
|
||||
to `Preqrequisites` section in `README-BLE-6LoWPAN.md` for details.
|
||||
|
||||
Getting Started
|
||||
===============
|
||||
Once all tools are installed it is recommended to start by compiling
|
||||
and flashing `examples/hello-word` application. This allows to verify
|
||||
that toolchain setup is correct.
|
||||
|
||||
To compile the example, go to `examples/hello-world` and execute:
|
||||
|
||||
make TARGET=nrf52dk
|
||||
|
||||
If you haven't used the device with Contiki before we advise to
|
||||
erase the device and flash new SoftDevice:
|
||||
|
||||
make TARGET=nrf52dk erase
|
||||
make TARGET=nrf52dk softdevice.flash
|
||||
|
||||
If the compilation is completed without errors flash the board:
|
||||
|
||||
make TARGET=nrf52dk hello-world.flash
|
||||
|
||||
The device will start BLE advertising as soon as initialized. By
|
||||
default the device name is set to 'Contiki nRF52 DK'. To verify
|
||||
that the device is advertising properly run:
|
||||
|
||||
sudo hcitool lescan
|
||||
|
||||
And observe if the device name appears in the output. Also, observe
|
||||
if LED1 is blinking what indicates that device is waiting for a connection
|
||||
from BLE master.
|
||||
|
||||
If device is functioning as expected you can test IPv6 connection
|
||||
to the device. Please refer to `README-BLE-6LoWPAN.md` on details how to do
|
||||
this.
|
||||
|
||||
Examples
|
||||
========
|
||||
Examples specific for nRF52 DK can be found in `examples/nrf52dk` folder. Please
|
||||
refer to README.md in respective examples for detailed description.
|
||||
|
||||
The DK has also been tested with the `examples/hello-world` and `examples/webserver-ipv6`
|
||||
generic examples.
|
||||
|
||||
Compilation Options
|
||||
===================
|
||||
The Contiki TARGET name for this port is `nrf52dk`, so in order to compile
|
||||
an application you need to invoke GNU make as follows:
|
||||
|
||||
make TARGET=nrf52dk
|
||||
|
||||
In addition to this port supports the following variables which can be
|
||||
set on the compilation command line:
|
||||
|
||||
* `NRF52_SDK_ROOT=<SDK PATH>`
|
||||
This variable allows to specify a path to the nRF52 SDK which should
|
||||
be used for the build.
|
||||
|
||||
* `NRF52_WITHOUT_SOFTDEVICE={0|1}`
|
||||
Disables SoftDevice support if set to 1. By default, SoftDevice support
|
||||
is used. Note that SoftDevice must be present (flashed) in the device
|
||||
before you run an application that requires it's presence.
|
||||
|
||||
* `NRF52_USE_RTT={0|1}`
|
||||
Enables RealTime Terminal I/O. See VCOM and RTT for details. By default,
|
||||
RTT is disabled and IO is done using Virtual COM port.
|
||||
|
||||
* `NRF52_JLINK_SN=<serial number>`
|
||||
Allows to choose a particular DK by its serial number (printed on the
|
||||
label). This is useful if you have more than one DK connected to your
|
||||
PC and whish to flash a particular device.
|
||||
|
||||
* `NRF52_DK_REVISION={pca10040|pca10036}`
|
||||
Allows to specify DK revision. By default, pca10040 is used.
|
||||
|
||||
Compilation Targets
|
||||
===================
|
||||
Invoking make solely with the `TARGET` variable set will build all
|
||||
applications in a given folder. A particular application can be built
|
||||
by invoking make with its name as a compilation target:
|
||||
|
||||
make TARGET=nrf52dk hello-world
|
||||
|
||||
In order to flash the application binary to the device use `<application>.flash`
|
||||
as make target, e.g.:
|
||||
|
||||
make TARGET=nrf52dk hello-world.flash
|
||||
|
||||
In addition, the SoftDevice binary can be flashed to the DK by invoking:
|
||||
|
||||
make TARGET=nrf52dk softdevice.flash
|
||||
|
||||
To remove all build results invoke:
|
||||
|
||||
make TARGET=nrf52dk clean
|
||||
|
||||
The device memory can be erased using:
|
||||
|
||||
make TARGET=nrf52dk erase
|
||||
|
||||
Note, that once the device is erased, the SoftDevice must be programmed again.
|
||||
|
||||
Virtual COM and Real Time Transfer
|
||||
==================================
|
||||
By default, the nRF52 DK uses a Virtual COM port to output logs. Once
|
||||
the DK is plugged in a `/tty/ACM<n>` or `/ttyUSB<n>` device should appear in
|
||||
your filesystem. A terminal emulator, such as picocom or minicom, can be
|
||||
used to connect to the device. Default serial port speed is 38400 bps.
|
||||
|
||||
To connect to serial port using picocom invoke:
|
||||
|
||||
picocom -fh -b 38400 --imap lfcrlf /dev/ttyACM0
|
||||
|
||||
Note, that if you have not fixed file permissions for `/dev/ttyACM0`
|
||||
according to section `Segger JLink Software for Linux` you'll need to use
|
||||
root or sudo to open the port with `picocom`.
|
||||
|
||||
In addition to Virtual COM the port supports SEGGER's Real Time Transfer
|
||||
for low overhead I/O support. This allows for outputting debugging information
|
||||
at much higher rate with significantly lower overhead than regular I/O.
|
||||
|
||||
To compile an application with RTT rather that VCOM set `NRF52_USE_RTT` to 1 on
|
||||
the compilation command line:
|
||||
|
||||
make TARGET=nrf52dk NRF52_USE_RTT=1 hello-world
|
||||
|
||||
You can then connect to the device terminal using `JLinkRTTClient`. Note that
|
||||
a JLlink gdb or commander must be connected to the target for the RTT to work.
|
||||
|
||||
More details regarding RTT can be found at https://www.segger.com/jlink-rtt.html
|
||||
|
||||
Docummentation
|
||||
==============
|
||||
This port provides doxygen source code docummentation. To build the
|
||||
docummentation please run:
|
||||
|
||||
sudo apt-get install doxygen
|
||||
cd <CONTIKI_ROOT>\doc
|
||||
make
|
||||
|
||||
Support
|
||||
=======
|
||||
This port is officially supported by Nordic Semiconductor. Please send bug
|
||||
reports or/and suggestions to <wojciech.bober@nordicsemi.no>.
|
||||
|
||||
License
|
||||
=======
|
||||
All files in the port are under BSD license. nRF52 SDK and SoftDevice are
|
||||
licensed on a separate terms.
|
||||
|
||||
Resources
|
||||
=========
|
||||
* nRF52 Datasheet and SDK documentation (http://infocenter.nordicsemi.com)
|
||||
* nRF52 SDK Downloads (https://developer.nordicsemi.com/)
|
||||
* JLink Tools (https://www.segger.com/)
|
Loading…
Add table
Add a link
Reference in a new issue