blob: dd8d0421737fdfeef3cb5683b28aa200911f81fb [file] [log] [blame]
Blinky, your "Hello World!", on a PineTime smartwatch
-------------------------------------------------------
This tutorial shows you how to create, build, and run the Blinky
application on a PineTime smartwatch.
.. contents::
:local:
:depth: 2
Prerequisites
~~~~~~~~~~~~~
- Meet the prerequisites listed in :doc:`Project Blinky <blinky>`.
- Have a `PineTime Dev Kit <https://store.pine64.org/?product=pinetime-dev-kit>`__
- Have a `ST-LINK programmer <https://www.st.com/en/development-tools/st-link-v2.html>`__ or a cheap clone
- Install a patched version of OpenOCD 0.10.0 described in :doc:`Install OpenOCD <../../get_started/native_install/cross_tools>`.
If you have not removed the flash protection yet, you should to that first.
See `the PineTime wiki <https://wiki.pine64.org/index.php/Reprogramming_the_PineTime>`__
for instructions.
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 blinky-pinetime
Downloading project skeleton from apache/mynewt-blinky...
Downloading repository mynewt-blinky
Installing skeleton in blinky-pinetime...
Project blinky-pinetime successfully created.
$ cd blinky-pinetime
$ newt upgrade
newt upgrade
Downloading repository mynewt-core (commit: master)
Downloading repository mynewt-nimble (commit: master)
Downloading repository mcuboot (commit: master)
Making the following changes to the project:
install apache-mynewt-core (1.7.0)
install apache-mynewt-nimble (1.2.0)
install mcuboot (1.3.1)
$
Create the Targets
~~~~~~~~~~~~~~~~~~
Create two targets for the PineTime - 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 ``boot-pinetime``:
.. code-block:: console
:emphasize-lines: 3
$ newt target create boot-pinetime
$ newt target set boot-pinetime app=@mcuboot/boot/mynewt
$ newt target set boot-pinetime bsp=@apache-mynewt-core/hw/bsp/pinetime
$ newt target set boot-pinetime build_profile=optimized
Run the following ``newt target`` commands to create a target for the
Blinky application. We name the target ``blinky-pinetime``.
.. code-block:: console
:emphasize-lines: 3
$ newt target create blinky-pinetime
$ newt target set blinky-pinetime app=apps/blinky
$ newt target set blinky-pinetime bsp=@apache-mynewt-core/hw/bsp/pinetime
$ newt target set blinky-pinetime build_profile=debug
You can run the ``newt target show`` command to verify the target
settings:
.. code-block:: console
$ newt target show
targets/blinky-pinetime
app=apps/blinky
bsp=@apache-mynewt-core/hw/bsp/pinetime
build_profile=debug
targets/boot-pinetime
app=@mcuboot/boot/mynewt
bsp=@apache-mynewt-core/hw/bsp/pinetime
build_profile=optimized
Build the Target Executables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run the ``newt build boot-pinetime`` command to build the bootloader:
.. code-block:: console
$ newt build boot-pinetime
Building target targets/boot-pinetime
Compiling bin/targets/boot-pinetime/generated/src/boot-pinetime-sysflash.c
Compiling bin/targets/boot-pinetime/generated/src/boot-pinetime-sysinit-app.c
Compiling bin/targets/boot-pinetime/generated/src/boot-pinetime-sysdown-app.c
Compiling repos/mcuboot/boot/bootutil/src/boot_record.c
Compiling repos/mcuboot/boot/bootutil/src/caps.c
...
Archiving sys_sysinit.a
Archiving util_mem.a
Archiving util_rwlock.a
Linking /tmp/blinky-pinetime/bin/targets/boot-pinetime/app/boot/mynewt/mynewt.elf
Target successfully built: targets/boot-pinetime
Run the ``newt build blinky-pinetime`` command to build the Blinky
application:
.. code-block:: console
$ newt build blinky-pinetime
Building target targets/blinky-pinetime
Compiling bin/targets/blinky-pinetime/generated/src/blinky-pinetime-sysinit-app.c
Compiling bin/targets/blinky-pinetime/generated/src/blinky-pinetime-sysdown-app.c
Compiling bin/targets/blinky-pinetime/generated/src/blinky-pinetime-sysflash.c
Compiling repos/apache-mynewt-core/hw/bsp/pinetime/src/sbrk.c
Compiling apps/blinky/src/main.c
Assembling repos/apache-mynewt-core/hw/bsp/pinetime/src/arch/cortex_m4/gcc_startup_nrf52.s
Compiling repos/apache-mynewt-core/hw/bsp/pinetime/src/hal_bsp.c
...
Archiving sys_sysinit.a
Archiving util_mem.a
Archiving util_rwlock.a
Linking /tmp/blinky-pinetime/bin/targets/blinky-pinetime/app/apps/blinky/blinky.elf
Target successfully built: targets/blinky-pinetime
Sign and Create the Blinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run the ``newt create-image blinky-pinetime 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 blinky-pinetime 1.0.0
App image succesfully generated: ~/dev/blinky-pinetime/bin/targets/blinky-pinetime/app/apps/blinky/blinky.img
Connect to the Board
~~~~~~~~~~~~~~~~~~~~
- Connect a ST-LINK programmer via USB to your computer.
- Connect the ST-LINK programmer to the SWD connectors of the PineTime. The
easiest way it to mount the PineTime on a cradle and let the programmer cable
rest on the contact pads. See `PineTime wiki <https://wiki.pine64.org/index.php/PineTime#SWD_Pinout>`__
for the pinout.
Load the Bootloader and the Blinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run the ``newt load boot-pinetime`` command to load the bootloader onto the
board:
.. code-block:: console
$ newt load boot-pinetime
Loading bootloader
$
Run the ``newt load blinky-pinetime`` command to load the Blinky
application image onto the board.
.. code-block:: console
$ newt load blinky-pinetime
Loading app image into slot 1
You should see the backlight of the screen board blink!
Note: The screen itself will stay black, this could make the blinking difficult to see.