Blinky, your "Hello World!", on RedBear Nano 2
----------------------------------------------

This tutorial shows you how to create, build and run the Blinky
application on a RedBear Nano 2 board.

.. contents::
  :local:
  :depth: 2

Prerequisites
~~~~~~~~~~~~~

-  Meet the prerequisites listed in :doc:`Project Blinky <blinky>`.
-  Have a RedBear Nano 2 board.
-  Install a patched version of OpenOCD 0.10.0 described in :doc:`Install OpenOCD <../../get_started/native_install/cross_tools>`.

Create a 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.

Run the following commands to create a new project:

.. code-block:: console

        $ mkdir ~/dev
        $ cd ~/dev
        $ newt new myproj
        Downloading project skeleton from apache/mynewt-blinky...
        Installing skeleton in myproj...
        Project myproj successfully created.
        $ cd myproj
        $ newt install
        apache-mynewt-core
        $

Create the Targets
~~~~~~~~~~~~~~~~~~

Create two targets for the RedBear Nano 2 board - one for the bootloader
and one for the Blinky application.

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

.. code-block:: console

    $ newt target create rbnano2_boot
    $ newt target set rbnano2_boot app=@apache-mynewt-core/apps/boot
    $ newt target set rbnano2_boot bsp=@apache-mynewt-core/hw/bsp/rb-nano2
    $ newt target set rbnano2_boot build_profile=optimized

Run the following ``newt target`` commands to create a target for the
Blinky application. We name the target ``nrf52_blinky``.

.. code-block:: console

    $ newt target create rbnano2_blinky
    $ newt target set rbnano2_blinky app=apps/blinky
    $ newt target set rbnano2_blinky bsp=@apache-mynewt-core/hw/bsp/rb-nano2
    $ newt target set rbnano2_blinky build_profile=debug

You can run the ``newt target show`` command to verify the target
settings:

.. code-block:: console

    $ newt target show
    targets/rbnano2_blinky
        app=apps/blinky
        bsp=@apache-mynewt-core/hw/bsp/rb-nano2
        build_profile=debug
    targets/rbnano2_boot
        app=@apache-mynewt-core/apps/boot
        bsp=@apache-mynewt-core/hw/bsp/rb-nano2
        build_profile=optimized

Build the Target Executables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Run the ``newt build rbnano2_boot`` command to build the bootloader:

.. code-block:: console

    $ newt build rbnano2_boot
    Building target targets/rbnano2_boot
    Compiling repos/apache-mynewt-core/boot/bootutil/src/image_rsa.c
    Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec256.c
    Compiling repos/apache-mynewt-core/boot/bootutil/src/loader.c
    Compiling repos/apache-mynewt-core/crypto/mbedtls/src/aes.c
    Compiling repos/apache-mynewt-core/boot/bootutil/src/image_validate.c
    Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec.c
    Compiling repos/apache-mynewt-core/boot/bootutil/src/bootutil_misc.c
    Compiling repos/apache-mynewt-core/apps/boot/src/boot.c

          ...

    Archiving sys_sysinit.a
    Archiving util_mem.a
    Linking ~/dev/myproj/bin/targets/rbnano2_boot/app/apps/boot/boot.elf
    Target successfully built: targets/rbnano2_boot

Run the ``newt build rbnano2_blinky`` command to build the Blinky
application:

.. code-block:: console

    $ newt build rbnano2_blinky
    Building target targets/rbnano2_blinky
    Assembling repos/apache-mynewt-core/hw/bsp/rb-nano2/src/arch/cortex_m4/gcc_startup_nrf52_split.s
    Compiling repos/apache-mynewt-core/hw/drivers/uart/src/uart.c
    Compiling repos/apache-mynewt-core/hw/cmsis-core/src/cmsis_nvic.c
    Compiling repos/apache-mynewt-core/hw/bsp/rb-nano2/src/sbrk.c
    Compiling apps/blinky/src/main.c

         ...

    Archiving sys_sysinit.a
    Archiving util_mem.a
    Linking ~/dev/myproj/bin/targets/rbnano2_blinky/app/apps/blinky/blinky.elf
    Target successfully built: targets/rbnano2_blinky

Sign and Create the Blinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Run the ``newt create-image rbnano2_blinky 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.

.. code-block:: console

    $ newt create-image rbnano2_blinky 1.0.0
    App image succesfully generated: ~/dev/myproj/bin/targets/rbnano2_blinky/app/apps/blinky/blinky.img

Connect to the Board
~~~~~~~~~~~~~~~~~~~~

Connect the RedBear Nano 2 USB to a USB port on your computer. You
should see an orange LED light up on the board.

Load the Bootloader
~~~~~~~~~~~~~~~~~~~

Run the ``newt load rbnano2_boot`` command to load the bootloader onto
the board:

.. code-block:: console

    $ newt load rbnano2_boot
    Loading bootloader
    $

**Note:** On Windows platforms, if you get an
``unable to find CMSIS-DAP device`` error, you will need to download and
install the mbed Windows serial port driver from
https://developer.mbed.org/handbook/Windows-serial-configuration. Follow
the instructions from the site to install the driver. Here are some
additional notes about the installation:

1. The instructions indicate that the mbed Windows serial port driver is
   not required for Windows 10. If you are using Windows 10 and get the
   ``unable to find CMSIS-DAP device`` error, we recommend that you
   install the driver.
2. If the driver installation fails, we recommend that you unplug the
   board, plug it back in, and retry the installation.

Run the ``newt load rbnano2_boot`` command again.

Clear the Write Protection on the Flash Memory
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The flash memory on the RedBear Nano 2 comes write protected from the factory. If you get an
error loading the bootloader and you are using a brand new chip, you
need to clear the write protection from the debugger and then load the
bootloader again. Run the ``newt debug rbnano2_blinky`` command and
issue the following commands at the highlighted (gdb) prompts.

**Note:** The output of the debug session below is for Mac OS and Linux
platforms. On Windows, openocd and gdb are started in separate Windows
Command Prompt terminals, and the terminals are automatically closed
when you quit gdb. In addition, the output of openocd is logged to the
openocd.log file in your project's base directory instead of the
terminal.

.. code-block:: console
    :emphasize-lines: 8,9,11,14

    $ newt debug rbnano2_blinky
    [~/dev/myproj/repos/apache-mynewt-core/hw/bsp/rb-nano2/rb-nano2_debug.sh  ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/rb-nano2 ~/dev/myproj/bin/targets/rbnano2_blinky/app/apps/blinky/blinky]
    Open On-Chip Debugger 0.10.0-dev-snapshot (2017-03-28-11:24)
    Licensed under GNU GPL v2

        ...

    (gdb) set {unsigned long}0x4001e504=2
    (gdb) x/1wx 0x4001e504
    0x4001e504:0x00000002
    (gdb) set {unsigned long}0x4001e50c=1
    Info : SWD DPIDR 0x2ba01477
    Error: Failed to read memory at 0x00009ef4
    (gdb) x/32wx 0x00
    0x0:0xffffffff0xffffffff0xffffffff0xffffffff
    0x10:0xffffffff0xffffffff0xffffffff0xffffffff
    0x20:0xffffffff0xffffffff0xffffffff0xffffffff
    0x30:0xffffffff0xffffffff0xffffffff0xffffffff
    0x40:0xffffffff0xffffffff0xffffffff0xffffffff
    0x50:0xffffffff0xffffffff0xffffffff0xffffffff
    0x60:0xffffffff0xffffffff0xffffffff0xffffffff
    0x70:0xffffffff0xffffffff0xffffffff0xffffffff
    (gdb)

Load the Blinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Run the ``newt load rbnano2_blinky`` command to load the Blinky application image onto the board:

.. code-block:: console

    $ newt load rbnano2_blinky
    Loading app image into slot 1

You should see a blue LED on the board blink!

Note: If the LED does not blink, try resetting your board.
