blob: 8a2965ad8702c73c088642c390f5a4222a1a3b21 [file] [log] [blame]
Project Slinky Using Olimex Board
=================================
This tutorial shows you how to create, build and run the Slinky
application and communicate with newtmgr for an Olimex STM-E407 board.
.. contents::
:local:
:depth: 2
Prerequisites
~~~~~~~~~~~~~
- Meet the prerequisites listed in :doc:`Project Slinky <project-slinky>`
- Have a STM32-E407 development board from Olimex.
- Have a ARM-USB-TINY-H connector with JTAG interface for debugging ARM
microcontrollers (comes with the ribbon cable to hook up to the board)
- Have a USB A-B type cable to connect the debugger to your computer.
- Have a USB to TTL Serial Cable with female wiring harness.
- Install the :doc:`OpenOCD debugger
<../../get_started/native_install/cross_tools>`.
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
:doc:`Sim Slinky <project-slinky>` tutorial.
.. code-block:: console
$ newt new slinky
Downloading project skeleton from apache/mynewt-blinky...
...
Installing skeleton in slink...
Project slink successfully created
$ cd slinky
$newt install
apache-mynewt-core
Create the Targets
~~~~~~~~~~~~~~~~~~~
Create two targets for the STM32-E407 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 ``stm32_boot``.
.. code-block:: console
$ newt target create stm32_boot
$ newt target set stm32_boot bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard
$ newt target set stm32_boot build_profile=optimized
$ newt target set stm32_boot target.app=@mcuboot/boot/mynewt
Run the following ``newt target`` commands to create a target for the
Slinky application. We name the target ``stm32_slinky``.
.. code-block:: console
$ newt target create stm32_slinky
$ newt target set stm32_slinky bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard
$ newt target set stm32_slinky build_profile=debug
$ newt target set stm32_slinky app=@apache-mynewt-core/apps/slinky
Build the Targets
~~~~~~~~~~~~~~~~~
Run the ``newt build stm32_boot`` command to build the bootloader:
.. code-block:: console
$ newt build stm32_boot
Building target targets/stm32_boot
Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c
Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c
Compiling repos/mcuboot/boot/bootutil/src/loader.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec.c
Compiling repos/mcuboot/boot/bootutil/src/image_validate.c
Compiling repos/apache-mynewt-core/crypto/mbedtls/src/aes.c
Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c
Compiling repos/mcuboot/boot/mynewt/src/main.c
...
Archiving sys_mfg.a
Archiving sys_sysinit.a
Archiving util_mem.a
Linking ~/dev/slinky/bin/targets/stm32_boot/app/boot/mynewt/mynewt.elf
Target successfully built: targets/stm32_boot
$
Run the ``newt build stm32_slinky`` command to build the Slinky
application:
.. code-block:: console
$newt build stm32_slinky
Building target targets/stm32_slinky
Compiling repos/mcuboot/boot/bootutil/src/image_ec.c
Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c
Compiling repos/mcuboot/boot/bootutil/src/loader.c
Compiling repos/mcuboot/boot/bootutil/src/image_validate.c
Compiling repos/apache-mynewt-core/boot/split/src/split.c
Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c
Compiling repos/apache-mynewt-core/apps/slinky/src/main.c
...
Archiving util_crc.a
Archiving util_mem.a
Linking ~/dev/slinky/bin/targets/stm32_slinky/app/apps/slinky/slinky.elf
Target successfully built: targets/stm32_slinky
$
Sign and Create the Slinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run the ``newt create-image stm32_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.
.. code-block:: console
newt create-image stm32_slinky 1.0.0
App image succesfully generated: ~/dev/slinky/bin/targets/stm32_slinky/app/apps/slinky/slinky.img
$
Connect to the Board
~~~~~~~~~~~~~~~~~~~~
- Connect the USB A-B type cable to the ARM-USB-TINY-H debugger
connector.
- Connect the ARM-USB-Tiny-H debugger connector to your computer and
the board.
- Connect the USB Micro-A cable to the USB-OTG2 port on the board.
- Set the Power Sel jumper on the board to pins 5 and 6 to select USB-OTG2 as
the power source. If you would like to use a different power source, refer
to the `OLIMEX STM32-E407 user manual
<https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf>`__
for pin specifications.
You should see a red LED light up on the board.
Load the Bootloader and the Slinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run the ``newt load stm32_boot`` command to load the bootloader onto the
board:
.. code-block:: console
$ newt load stm32_boot
Loading bootloader
$
Note: If you are using Windows and get a ``no device found`` error, you
will need to install the usb driver. Download `Zadig <http://zadig.akeo.ie>`__
and run it:
- Select Options > List All Devices.
- Select ``Olimex OpenOCD JTAG ARM-USB-TINY-H`` from the drop down
menu.
- Select the ``WinUSB`` driver.
- Click Install Driver.
- Run the ``newt load stm32_boot`` command again.
Run the ``newt load stm32_slinky`` command to load the Slinky
application image onto the board:
.. code-block:: console
$ newt load stm32_slinky
Loading app image into slot 1
$
Connect Newtmgr with the Board using a Serial Connection
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Locate the PC6/USART6\_TX (pin 3), PC7/USART6\_RX (pin 4), and GND (pin
2) of the UEXT connector on the Olimex board. More information on the
UEXT connector can be found at
https://www.olimex.com/Products/Modules/UEXT/. The schematic of the
board can be found at
https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407_sch.pdf
for reference.
.. figure:: ../pics/serial_conn.png
:alt: Alt Layout - Serial Connection
Alt Layout - Serial Connection
- Connect the female RX pin of the USB-TTL serial cable to the TX (Pin
3) of the UEXT connector on the board.
- Connect the female TX pin of the USB-TTL serial cable to the RX (Pin
4) of the UEXT connector on the board.
- Connect the GND pin of the USB-TTL serial cable to the GND (Pin 2) of
the UEXT connector on the board.
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.
.. code-block:: console
$ ls /dev/tty*usbserial*
/dev/tty.usbserial-1d13
$
Setup a newtmgr connection profile for the serial port. For our
example, the port is ``/dev/tty.usbserial-1d13``.
Run the ``newtmgr conn add`` command to define a newtmgr connection
profile for the serial port. We name the connection profile
``stm32serial``.
**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.
.. code-block:: console
$ newtmgr conn add stm32serial type=serial connstring=/dev/tty.usbserial-1d13
Connection profile stm32serial successfully added
$
You can run the ``newt conn show`` command to see all the newtmgr
connection profiles:
.. code-block:: console
$ newtmgr conn show
Connection profiles:
stm32serial: type=serial, connstring='/dev/tty.usbserial-1d13'
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 :doc:`Newt Manager Guide <../../newtmgr/index>` for more information on the
newtmgr commands).
Run the ``newtmgr echo hello -c stm32serial`` command. This is the
simplest command that requests the board to echo back the text.
.. code-block:: console
$ newtmgr echo hello -c stm32serial
hello
$
Run the ``newtmgr image list -c stm32serial`` command to list the
images on the board:
.. code-block:: console
$ newtmgr image list -c stm32serial
Images:
slot=0
version: 1.0.0
bootable: true
flags: active confirmed
hash: 9cf8af22b1b573909a8290a90c066d4e190407e97680b7a32243960ec2bf3a7f
Split status: N/A
$
Run the ``newtmgr taskstat -c stm32serial`` command to display the task
statistics on the board:
.. code-block:: console
$ newtmgr taskstat -c stm32serial
task pri tid runtime csw stksz stkuse last_checkin next_checkin
idle 255 0 157179 157183 64 25 0 0
main 127 1 4 72 1024 356 0 0
task1 8 2 0 158 192 114 0 0
task2 9 3 0 158 64 30 0 0
$