blob: 506a79790a1b72865c6cef40f91e411cfc5bbc08 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../../img/favicon.ico">
<title>Slinky on Olimex - Apache Mynewt</title>
<link href="../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../../css/highlight.css">
<link href="../../../css/base.css" rel="stylesheet">
<link href="../../../css/custom.css" rel="stylesheet">
<link href="../../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="Slinky on Olimex">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
</div>
</div>
</div>
</div>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li
class=""
>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li
class="important"
>
<a href="/quick-start/">Quick Start</a>
</li>
<li
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_12_0/" >
Version: 1.12.0
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
Version: 1.10.0
</option>
<option value="/v1_9_0/" >
Version: 1.9.0
</option>
<option value="/v1_8_0/" >
Version: 1.8.0
</option>
<option value="/v1_7_0/" >
Version: 1.7.0
</option>
<option value="/v1_6_0/" >
Version: 1.6.0
</option>
<option value="/v1_5_0/" >
Version: 1.5.0
</option>
<option value="/v1_4_0/" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" selected="selected" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../introduction/">Mynewt Documentation</a>
<ul>
<li ><a href="../../get_started/get_started/">Basic Setup</a>
</li>
<li >
<a href="../../get_started/vocabulary/">Concepts</a>
</li>
<li ><a href="../tutorials/">Tutorials</a>
<ul>
<li ><a href="../blinky/">Project Blinky</a>
</li>
<li ><a href="../repo/add_repos/">Work with repositories</a>
</li>
<li ><a href="../project-slinky/">Project Slinky for Remote Comms</a>
<ul>
<li >
<a href="../project-sim-slinky/">Slinky on sim device</a>
</li>
<li >
<a href="../project-nrf52-slinky/">Slinky on Nordic nRF52</a>
</li>
<li class="active">
<a href="./">Slinky on Olimex</a>
</li>
</ul>
</li>
<li><a href="
../ble_bare_bones/
">Bluetooth Low Energy</a>
</li>
<li><a href="
../event_queue/
">OS Fundamentals</a>
</li>
<li><a href="
../add_newtmgr/
">Remote Device Management</a>
</li>
<li><a href="
../sensors/sensors/
">Sensors</a>
</li>
<li><a href="
../segger_rtt/
">Tooling</a>
</li>
<li><a href="
../codesize/
">Other</a>
</li>
</ul>
</li>
<li ><a href="../../os_user_guide/">OS User Guide</a>
</li>
<li><a href="
../../../network/ble/ble_intro/
">BLE User Guide</a>
</li>
<li ><a href="../../../newt/newt_intro/">Newt Tool Guide</a>
</li>
<li ><a href="../../../newtmgr/overview/">Newt Manager Guide</a>
</li>
<li >
<a href="../../../known_issues/">Known Issues</a>
</li>
</ul>
</li>
<li><a href="
../../../faq/go_env/
">Appendix</a>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; <a href="os/tutorials/project-slinky/">Project Slinky for Remote Comms</a></li>
<li>&raquo; <a href="os/tutorials/tutorials/">Tutorials</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li>&raquo; Slinky on Olimex</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/os/tutorials/project-stm32-slinky.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.1.0 is not the most recent version of the Apache Mynewt
documentation. Click <a href="/latest">here</a> to read the latest
version.
</p>
</div>
<h2 id="project-slinky-using-olimex-board">Project Slinky Using Olimex Board</h2>
<p>This tutorial shows you how to create, build and run the Slinky application and communicate with newtmgr for an Olimex STM-E407 board.
<br></p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>Meet the prerequisites listed in <a href="/os/tutorials/project-slinky.md">Project Slinky</a>.</li>
<li>Have a STM32-E407 development board from Olimex. </li>
<li>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)</li>
<li>Have a USB A-B type cable to connect the debugger to your computer. </li>
<li>Have a USB to TTL Serial Cable with female wiring harness.</li>
<li>Install the <a href="/os/get_started/cross_tools/">OpenOCD debugger</a>.</li>
</ul>
<h3 id="create-a-new-project">Create a New Project</h3>
<p>Create a new project if you do not have an existing one. You can skip this step and proceed to <a href="#create_targets">create the targets</a> if you already have a project created or completed the <a href="../project-slinky/">Sim Slinky</a> tutorial.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ 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
</code></pre></div>
<p><br></p>
<h3 id="create-the-targets"><a name="create_targets"></a> Create the Targets</h3>
<p>Create two targets for the STM32-E407 board - one for the bootloader and one for the Slinky application.</p>
<p>Run the following <code>newt target</code> commands, from your project directory, to create a bootloader target. We name the target <code>stm32_boot</code>.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ 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=@apache-mynewt-core/apps/boot
</code></pre></div>
<p><br>
Run the following <code>newt target</code> commands to create a target for the Slinky application. We name the target <code>stm32_slinky</code>.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ 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
</code></pre></div>
<p><br></p>
<h3 id="build-the-targets">Build the Targets</h3>
<p>Run the <code>newt build stm32_boot</code> command to build the bootloader:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt build stm32_boot
Building target targets/stm32_boot
Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec256.c
Compiling repos/apache-mynewt-core/boot/bootutil/src/image_rsa.c
Compiling repos/apache-mynewt-core/boot/bootutil/src/loader.c
Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec.c
Compiling repos/apache-mynewt-core/boot/bootutil/src/image_validate.c
Compiling repos/apache-mynewt-core/crypto/mbedtls/src/aes.c
Compiling repos/apache-mynewt-core/boot/bootutil/src/bootutil_misc.c
Compiling repos/apache-mynewt-core/apps/boot/src/boot.c
...
Archiving sys_mfg.a
Archiving sys_sysinit.a
Archiving util_mem.a
Linking ~/dev/slinky/bin/targets/stm32_boot/app/apps/boot/boot.elf
Target successfully built: targets/stm32_boot
$
</code></pre></div>
<p><br>
Run the <code>newt build stm32_slinky</code> command to build the Slinky application:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$newt build stm32_slinky
Building target targets/stm32_slinky
Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec.c
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/boot/bootutil/src/image_validate.c
Compiling repos/apache-mynewt-core/boot/split/src/split.c
Compiling repos/apache-mynewt-core/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
$
</code></pre></div>
<p><br></p>
<h3 id="sign-and-create-the-slinky-application-image">Sign and Create the Slinky Application Image</h3>
<p>Run the <code>newt create-image stm32_slinky 1.0.0</code> command to create and sign the application image. You may assign an arbitrary version (e.g. 1.0.0) to the image.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>newt create-image stm32_slinky 1.0.0
App image succesfully generated: ~/dev/slinky/bin/targets/stm32_slinky/app/apps/slinky/slinky.img
$
</code></pre></div>
<p><br></p>
<h3 id="connect-to-the-board">Connect to the Board</h3>
<ul>
<li>Connect the USB A-B type cable to the ARM-USB-TINY-H debugger connector. </li>
<li>Connect the ARM-USB-Tiny-H debugger connector to your computer and the board.</li>
<li>Connect the USB Micro-A cable to the USB-OTG2 port on the board.</li>
<li>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 <a href="https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf">OLIMEX STM32-E407 user manual</a> for pin specifications.</li>
</ul>
<p>You should see a red LED light up on the board. </p>
<p><br></p>
<h3 id="load-the-bootloader-and-the-slinky-application-image">Load the Bootloader and the Slinky Application Image</h3>
<p>Run the <code>newt load stm32_boot</code> command to load the bootloader onto the board:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt load stm32_boot
Loading bootloader
$
</code></pre></div>
<p><br>
Note: If you are using Windows and get a <code>no device found</code> error, you will need to install the usb driver. Download <a href="http://zadig.akeo.ie">Zadig</a> and run it:</p>
<ul>
<li>Select Options &gt; List All Devices.</li>
<li>Select <code>Olimex OpenOCD JTAG ARM-USB-TINY-H</code> from the drop down menu.</li>
<li>Select the <code>WinUSB</code> driver.</li>
<li>Click Install Driver.</li>
<li>Run the <code>newt load stm32_boot</code> command again.</li>
</ul>
<p><br>
Run the <code>newt load stm32_slinky</code> command to load the Slinky application image onto the board:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt load stm32_slinky
Loading app image into slot 1
$
</code></pre></div>
<p><br></p>
<h3 id="connect-newtmgr-with-the-board-using-a-serial-connection">Connect Newtmgr with the Board using a Serial Connection</h3>
<p>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 <a href="https://www.olimex.com/Products/Modules/UEXT/">https://www.olimex.com/Products/Modules/UEXT/</a>. The schematic of the board can be found at <a href="https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407_sch.pdf">https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407_sch.pdf</a> for reference.</p>
<p><img alt="Alt Layout - Serial Connection" src="../pics/serial_conn.png" /></p>
<ul>
<li>Connect the female RX pin of the USB-TTL serial cable to the TX (Pin 3) of the UEXT connector on the board.</li>
<li>Connect the female TX pin of the USB-TTL serial cable to the RX (Pin 4) of the UEXT connector on the board.</li>
<li>Connect the GND pin of the USB-TTL serial cable to the GND (Pin 2) of the UEXT connector on the board.</li>
</ul>
<p><br>
Locate the port, in the /dev directory on your computer, that the serial connection uses. The format of the port name is platform dependent:</p>
<ul>
<li>Mac OS uses the format <code>tty.usbserial-&lt;some identifier&gt;</code>.</li>
<li>Linux uses the format <code>TTYUSB&lt;N&gt;</code>, where <code>N</code> is a number. For example, TTYUSB2.</li>
<li>
<p>MinGW on Windows uses the format <code>ttyS&lt;N&gt;</code>, where <code>N</code> is a number. You must map the port name to a Windows COM port: <code>/dev/ttyS&lt;N&gt;</code> maps to <code>COM&lt;N+1&gt;</code>. For example, <code>/dev/ttyS2</code> maps to <code>COM3</code>.</p>
<p>You can also use the Windows Device Manager to find the COM port number.</p>
</li>
</ul>
<p><br></p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ ls /dev/tty*usbserial*
/dev/tty.usbserial-1d13
$
</code></pre></div>
<p><br>
Setup a newtmgr connection profile for the serial port. For our example, the port is <code>/dev/tty.usbserial-1d13</code>.</p>
<p>Run the <code>newtmgr conn add</code> command to define a newtmgr connection profile for the serial port. We name the connection profile <code>stm32serial</code>. </p>
<p><strong>Note</strong>:</p>
<ul>
<li>You will need to replace the <code>connstring</code> with the specific port for your serial connection.</li>
<li>On Windows, you must specify <code>COM&lt;N+1&gt;</code> for the connstring if <code>/dev/ttyS&lt;N&gt;</code> is the serial port.</li>
</ul>
<p><br></p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newtmgr conn add stm32serial type=serial connstring=/dev/tty.usbserial-1d13
Connection profile stm32serial successfully added
$
</code></pre></div>
<p><br>
You can run the <code>newt conn show</code> command to see all the newtmgr connection profiles:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newtmgr conn show
Connection profiles:
stm32serial: type=serial, connstring=&#39;/dev/tty.usbserial-1d13&#39;
sim1: type=serial, connstring=&#39;/dev/ttys012&#39;
$
</code></pre></div>
<p><br></p>
<h3 id="use-newtmgr-to-query-the-board">Use Newtmgr to Query the Board</h3>
<p>Run some newtmgr commands to query and receive responses back from the board (See the <a href="newtmgr/overview">Newt Manager Guide</a> for more information on the newtmgr commands).</p>
<p>Run the <code>newtmgr echo hello -c stm32serial</code> command. This is the simplest command that requests the board to echo back the
text.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newtmgr echo hello -c stm32serial
hello
$
</code></pre></div>
<p><br>
Run the <code>newtmgr image list -c stm32serial</code> command to list the images on the board:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newtmgr image list -c stm32serial
Images:
slot=0
version: 1.0.0
bootable: true
flags: active confirmed
hash: 9cf8af22b1b573909a8290a90c066d4e190407e97680b7a32243960ec2bf3a7f
Split status: N/A
$
</code></pre></div>
<p><br>
Run the <code>newtmgr taskstat -c stm32serial</code> command to display the task statistics on the board:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ 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
$
</code></pre></div>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
project logo are either registered trademarks or trademarks of the Apache
Software Foundation in the United States and other countries.
</small>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../../js/jquery-1.10.2.min.js"></script>
<script src="../../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../../js/highlight.pack.js"></script>
<script src="../../../js/base.js"></script>
<script src="../../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>