blob: 2dadb783f5f96108e28c0edd9496fbfae6f8859c [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">
<title>Blinky, your “Hello World!”, on Arduino Primo &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../genindex.html"/>
<link rel="search" title="Search" href="../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../index.html"/>
<link rel="up" title="Project Blinky" href="blinky.html"/>
<link rel="next" title="Blinky, your “Hello World!”, on Olimex" href="olimex.html"/>
<link rel="prev" title="Blinky, your “Hello World!”, on Arduino Zero" href="arduino_zero.html"/>
<script src="../../_static/js/modernizr.min.js"></script>
<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="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../_static/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.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" 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>
<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>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../tutorials.html">Tutorials</a> /
<a href="blinky.html">Project Blinky</a> /
Blinky, your “Hello World!”, on Arduino Primo
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/blinky/blinky_primo.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</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" selected="selected" >
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" >
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>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../concepts.html">Concepts</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="blinky.html">Project Blinky</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="arduino_zero.html">Blinky on Arduino Zero</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Blinky on Arduino Primo</a></li>
<li class="toctree-l3"><a class="reference internal" href="olimex.html">Blinky on Olimex</a></li>
<li class="toctree-l3"><a class="reference internal" href="nRF52.html">Blinky on nRF52 DK</a></li>
<li class="toctree-l3"><a class="reference internal" href="pinetime.html">Blinky on PineTime</a></li>
<li class="toctree-l3"><a class="reference internal" href="rbnano2.html">Blinky on RedBear Nano 2</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_stm32f4disc.html">Blinky on STM32F4-Discovery</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_console.html">Add Console and Shell to Blinky</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../repo/add_repos.html">Working with repositories</a></li>
<li class="toctree-l2"><a class="reference internal" href="../slinky/project-slinky.html">Project Slinky for Remote Comms</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ble/ble.html">Bluetooth Low Energy</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lora/lorawanapp.html">LoRa</a></li>
<li class="toctree-l2"><a class="reference internal" href="../os_fundamentals/os_fundamentals.html">OS Fundamentals</a></li>
<li class="toctree-l2"><a class="reference internal" href="../devmgmt/devmgmt.html">Remote Device Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sensors/sensors.html">Sensors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tooling/tooling.html">Tooling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../other/other.html">Other</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.6.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>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="blinky-your-hello-world-on-arduino-primo">
<h1>Blinky, your “Hello World!”, on Arduino Primo<a class="headerlink" href="#blinky-your-hello-world-on-arduino-primo" title="Permalink to this headline"></a></h1>
<p>This tutorial shows you how to create, build, and run the Blinky
application on an Arduino Primo board.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#prerequisites" id="id2">Prerequisites</a></p>
<ul>
<li><p><a class="reference internal" href="#option-1" id="id3">Option 1</a></p></li>
<li><p><a class="reference internal" href="#option-2" id="id4">Option 2</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#create-a-project" id="id5">Create a Project</a></p></li>
<li><p><a class="reference internal" href="#create-the-targets" id="id6">Create the Targets</a></p></li>
<li><p><a class="reference internal" href="#build-the-target-executables" id="id7">Build the Target Executables</a></p></li>
<li><p><a class="reference internal" href="#sign-and-create-the-blinky-application-image" id="id8">Sign and Create the Blinky Application Image</a></p></li>
<li><p><a class="reference internal" href="#connect-to-the-board" id="id9">Connect to the Board</a></p></li>
<li><p><a class="reference internal" href="#load-the-bootloader" id="id10">Load the Bootloader</a></p></li>
<li><p><a class="reference internal" href="#load-the-blinky-application-image" id="id11">Load the Blinky Application Image</a></p></li>
<li><p><a class="reference internal" href="#erase-flash" id="id12">Erase Flash</a></p></li>
</ul>
</div>
<p>Note that the Mynewt OS will run on the nRF52 chip in the Arduino Primo
board. However, the board support package for the Arduino Primo is
different from the nRF52 dev kit board support package.</p>
<div class="section" id="prerequisites">
<h2><a class="toc-backref" href="#id2">Prerequisites</a><a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Meet the the prerequisites listed in <a class="reference internal" href="blinky.html"><span class="doc">Project Blinky</span></a>.</p></li>
<li><p>Have an Arduino Primo board.</p></li>
<li><p>Install a debugger. Choose one of the two options below: Option 1
requires additional hardware but very easy to set up.</p></li>
</ul>
<div class="section" id="option-1">
<h3><a class="toc-backref" href="#id3">Option 1</a><a class="headerlink" href="#option-1" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p><a class="reference external" href="https://www.segger.com/jlink-debug-probes.html">Segger J-Link Debug Probe</a> - any model
(this tutorial has been tested with J-Link EDU and J-Link Pro)</p></li>
<li><p><a class="reference external" href="https://www.segger.com/jlink-adapters.html#CM_9pin">J-Link 9 pin Cortex-M
Adapter</a> that
allows JTAG, SWD and SWO connections between J-Link and Cortex M based
target hardware systems</p></li>
<li><p>Install the <a class="reference external" href="https://www.segger.com/jlink-software.html">Segger JLINK Software and
documentation pack</a>.</p></li>
</ul>
</div>
<div class="section" id="option-2">
<h3><a class="toc-backref" href="#id4">Option 2</a><a class="headerlink" href="#option-2" title="Permalink to this headline"></a></h3>
<p>This board requires a patch version of OpenOCD 0.10.0 that is in
development. See <a class="reference internal" href="../../get_started/native_install/cross_tools.html"><span class="doc">Install OpenOCD</span></a>
instructions to install it if you do not have this version installed.</p>
<p>You can now use openocd to upload to Arduino Primo board via the USB
port itself.</p>
</div>
</div>
<div class="section" id="create-a-project">
<h2><a class="toc-backref" href="#id5">Create a Project</a><a class="headerlink" href="#create-a-project" title="Permalink to this headline"></a></h2>
<p>Create a new project if you do not have an existing one. You can skip
this step and proceed to <a class="reference internal" href="#create-the-targets">Create the Targets</a> if you
already created a project.</p>
<p>Run the following commands to create a new project:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>mkdir<span class="w"> </span>~/dev
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>~/dev
<span class="gp">$ </span>newt<span class="w"> </span>new<span class="w"> </span>myproj
<span class="go">Downloading project skeleton from apache/mynewt-blinky...</span>
<span class="go">Installing skeleton in myproj...</span>
<span class="go">Project myproj successfully created.</span>
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>myproj
<span class="gp">$ </span>newt<span class="w"> </span>upgrade
<span class="go">Downloading repository mynewt-core (commit: master) ...</span>
<span class="go">Downloading repository mynewt-nimble (commit: master) ...</span>
<span class="go">Downloading repository mcuboot (commit: master) ...</span>
<span class="go">Downloading repository mynewt-mcumgr (commit: master) ...</span>
<span class="go">Making the following changes to the project:</span>
<span class="go">apache-mynewt-core successfully upgraded to version 1.7.0</span>
<span class="go">apache-mynewt-nimble successfully upgraded to version 1.2.0</span>
<span class="go">mcuboot successfully upgraded to version 1.3.1</span>
<span class="gp">$</span>
</pre></div>
</div>
</div>
<div class="section" id="create-the-targets">
<h2><a class="toc-backref" href="#id6">Create the Targets</a><a class="headerlink" href="#create-the-targets" title="Permalink to this headline"></a></h2>
<p>Create two targets for the Arduino Primo board - one for the bootloader
and one for the Blinky application.</p>
<p>Run the following <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span></code> commands, from your project directory,
to create a bootloader target. We name the target <code class="docutils literal notranslate"><span class="pre">primo_boot</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>create<span class="w"> </span>primo_boot
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>primo_boot<span class="w"> </span><span class="nv">app</span><span class="o">=</span>@mcuboot/boot/mynewt<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@apache-mynewt-core/hw/bsp/arduino_primo_nrf52<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>optimized
</pre></div>
</div>
<p>Run the following <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span></code> commands to create a target for the
Blinky application. We name the target <code class="docutils literal notranslate"><span class="pre">primoblinky</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>create<span class="w"> </span>primoblinky
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>primoblinky<span class="w"> </span><span class="nv">app</span><span class="o">=</span>apps/blinky<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@apache-mynewt-core/hw/bsp/arduino_primo_nrf52<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>debug
</pre></div>
</div>
<p>If you are using openocd, run the following <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span> <span class="pre">set</span></code>
commands:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>primoblinky<span class="w"> </span><span class="nv">syscfg</span><span class="o">=</span><span class="nv">OPENOCD_DEBUG</span><span class="o">=</span><span class="m">1</span>
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>primo_boot<span class="w"> </span><span class="nv">syscfg</span><span class="o">=</span><span class="nv">OPENOCD_DEBUG</span><span class="o">=</span><span class="m">1</span>
</pre></div>
</div>
<p>You can run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span> <span class="pre">show</span></code> command to verify the target
settings:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>show
<span class="go">targets/my_blinky_sim</span>
<span class="go"> app=apps/blinky</span>
<span class="go"> bsp=@apache-mynewt-core/hw/bsp/native</span>
<span class="go"> build_profile=debug</span>
<span class="go">targets/primo_boot</span>
<span class="go"> app=@mcuboot/boot/mynewt</span>
<span class="go"> bsp=@apache-mynewt-core/hw/bsp/arduino_primo_nrf52</span>
<span class="go"> build_profile=optimized</span>
<span class="go">targets/primoblinky</span>
<span class="go"> app=@apache-mynewt-core/apps/blinky</span>
<span class="go"> bsp=@apache-mynewt-core/hw/bsp/arduino_primo_nrf52</span>
<span class="go"> build_profile=optimized</span>
</pre></div>
</div>
</div>
<div class="section" id="build-the-target-executables">
<h2><a class="toc-backref" href="#id7">Build the Target Executables</a><a class="headerlink" href="#build-the-target-executables" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">build</span> <span class="pre">primo_boot</span></code> command to build the bootloader:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>build<span class="w"> </span>primo_boot
<span class="go">Building target targets/primo_boot</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c</span>
<span class="go">Compiling repos/apache-mynewt-core/crypto/mbedtls/src/aes.c</span>
<span class="go">Compiling repos/mcuboot/boot/mynewt/src/main.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/loader.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c</span>
<span class="go"> ...</span>
<span class="go">Archiving sys_mfg.a</span>
<span class="go">Archiving sys_sysinit.a</span>
<span class="go">Archiving util_mem.a</span>
<span class="go">Linking ~/dev/myproj/bin/targets/primo_boot/app/boot/mynewt/mynewt.elf</span>
<span class="go">Target successfully built: targets/primo_boot</span>
</pre></div>
</div>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">build</span> <span class="pre">primoblinky</span></code> command to build the Blinky
application:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>build<span class="w"> </span>primoblinky
<span class="go">Building target targets/primoblinky</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/drivers/uart/src/uart.c</span>
<span class="go">Assembling repos/apache-mynewt-core/hw/bsp/arduino_primo_nrf52/src/arch/cortex_m4/gcc_startup_nrf52.s</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/bsp/arduino_primo_nrf52/src/sbrk.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/cmsis-core/src/cmsis_nvic.c</span>
<span class="go">Assembling repos/apache-mynewt-core/hw/bsp/arduino_primo_nrf52/src/arch/cortex_m4/gcc_startup_nrf52_split.s</span>
<span class="go">Compiling apps/blinky/src/main.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/drivers/uart/uart_bitbang/src/uart_bitbang.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/bsp/arduino_primo_nrf52/src/hal_bsp.c</span>
<span class="go"> ...</span>
<span class="go">Archiving sys_mfg.a</span>
<span class="go">Archiving sys_sysinit.a</span>
<span class="go">Archiving util_mem.a</span>
<span class="go">Linking ~/dev/myproj/bin/targets/primoblinky/app/apps/blinky/blinky.elf</span>
<span class="go">Target successfully built: targets/primoblinky</span>
</pre></div>
</div>
</div>
<div class="section" id="sign-and-create-the-blinky-application-image">
<h2><a class="toc-backref" href="#id8">Sign and Create the Blinky Application Image</a><a class="headerlink" href="#sign-and-create-the-blinky-application-image" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">create-image</span> <span class="pre">primoblinky</span> <span class="pre">1.0.0</span></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="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>create-image<span class="w"> </span>primoblinky<span class="w"> </span><span class="m">1</span>.0.0
<span class="go">App image succesfully generated: ~/dev/myproj/bin/targets/primoblinky/app/apps/blinky/blinky.img</span>
</pre></div>
</div>
</div>
<div class="section" id="connect-to-the-board">
<h2><a class="toc-backref" href="#id9">Connect to the Board</a><a class="headerlink" href="#connect-to-the-board" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Connect a micro USB cable to the Arduino Primo board and to your
computer’s USB port.</p></li>
<li><p>If you are using the Segger J-Link debug probe, connect the debug
probe to the JTAG port on the Primo board using the Jlink 9-pin
adapter and cable. Note that there are two JTAG ports on the board.
Use the one nearest to the reset button as shown in the picture.</p></li>
</ul>
<div class="figure align-default" id="id1">
<img alt="Connecting J-Link debug probe to Arduino Primo" src="../../_images/primo-jlink.jpg" />
<p class="caption"><span class="caption-text">J-Link debug probe to Arduino</span><a class="headerlink" href="#id1" title="Permalink to this image"></a></p>
</div>
<p><strong>Note:</strong> If you are using the OpenOCD debugger, you do not need to
attach this connector.</p>
</div>
<div class="section" id="load-the-bootloader">
<h2><a class="toc-backref" href="#id10">Load the Bootloader</a><a class="headerlink" href="#load-the-bootloader" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">primo_boot</span></code> command to load the bootloader onto the
board:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>load<span class="w"> </span>primo_boot
<span class="go">Loading bootloader</span>
<span class="gp">$</span>
</pre></div>
</div>
<p><strong>Note:</strong> If you are using OpenOCD on a Windows platform and you get an
<code class="docutils literal notranslate"><span class="pre">unable</span> <span class="pre">to</span> <span class="pre">find</span> <span class="pre">CMSIS-DAP</span> <span class="pre">device</span></code> error, you will need to download and
install the mbed Windows serial port driver from
<a class="reference external" href="https://developer.mbed.org/handbook/Windows-serial-configuration">https://developer.mbed.org/handbook/Windows-serial-configuration</a>. Follow
the instructions from the site to install the driver. Here are some
additional notes about the installation:</p>
<ol class="arabic simple">
<li><p>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
<code class="docutils literal notranslate"><span class="pre">unable</span> <span class="pre">to</span> <span class="pre">find</span> <span class="pre">CMSIS-DAP</span> <span class="pre">device</span></code> error, we recommend that you
install the driver.</p></li>
<li><p>If the driver installation fails, we recommend that you download and
install the Arduino Primo CMSIS-DAP driver. Perform the following
steps:</p>
<ul class="simple">
<li><p>Download the <a class="reference external" href="https://github.com/runtimeco/openocd-binaries/raw/master/arduino_primo_drivers.zip">Arduino Primo CMSIS-DAP
driver</a>
and extract the zip file.</p></li>
<li><p>Start Device Manager.</p></li>
<li><p>Select <strong>Other Devices</strong> &gt; <strong>CMSIS-DAP CDC</strong> &gt; <strong>Properties</strong> &gt;
<strong>Drivers</strong> &gt; <strong>Update Driver…</strong>.</p></li>
<li><p>Select <strong>Browse my computer for driver software</strong>.</p></li>
<li><p>Select the Arduino Driver folder where extracted the drivers to
(check the include subfolders). Click <strong>Next</strong> to install the
driver.</p></li>
</ul>
</li>
</ol>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">primo_boot</span></code> command again.</p>
</div>
<div class="section" id="load-the-blinky-application-image">
<h2><a class="toc-backref" href="#id11">Load the Blinky Application Image</a><a class="headerlink" href="#load-the-blinky-application-image" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">primoblinky</span></code> command to load the Blinky application image onto the board.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>load<span class="w"> </span>primoblinky
<span class="go">Loading app image into slot 1</span>
<span class="gp">$</span>
</pre></div>
</div>
<p>You should see the orange LED (L13), below the ON LED, on the board
blink!</p>
<p><strong>Note</strong>: If the LED does not blink, try resetting the board. If that doesn’t work, you may have an older version of the Arduino Primo, and will need to change the defined LED blink pin. To change the LED blink pin, go to the Arduino Primo BSP header file in the repos directory (<code class="docutils literal notranslate"><span class="pre">~/dev/myproj/repos/apache-mynewt-core/hw/bsp/arduino_primoo_nrf52/include/bsp/bsp.h</span></code>) and change the <code class="docutils literal notranslate"><span class="pre">LED_BLINK_PIN</span></code> from 20 to 25.</p>
</div>
<div class="section" id="erase-flash">
<h2><a class="toc-backref" href="#id12">Erase Flash</a><a class="headerlink" href="#erase-flash" title="Permalink to this headline"></a></h2>
<p>If you want to erase the flash and load the image again, use JLinkExe and issue the <code class="docutils literal notranslate"><span class="pre">erase</span></code> command when you are using the
Jlink debug probe:</p>
<p><strong>Note:</strong> On Windows: Run the <code class="docutils literal notranslate"><span class="pre">jlink</span></code> command with the same arguments
from a Windows Command Prompt terminal.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>JLinkExe<span class="w"> </span>-device<span class="w"> </span>nRF52<span class="w"> </span>-speed<span class="w"> </span><span class="m">4000</span><span class="w"> </span>-if<span class="w"> </span>SWD
<span class="go">SEGGER J-Link Commander V5.12c (Compiled Apr 21 2016 16:05:51)</span>
<span class="go">DLL version V5.12c, compiled Apr 21 2016 16:05:45</span>
<span class="go">Connecting to J-Link via USB...O.K.</span>
<span class="go">Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Mar 15 2016 18:03:17</span>
<span class="go">Hardware version: V1.00</span>
<span class="go">S/N: 682863966</span>
<span class="go">VTref = 3.300V</span>
<span class="go">Type &quot;connect&quot; to establish a target connection, &#39;?&#39; for help</span>
<span class="go">J-Link&gt;erase</span>
<span class="go">Cortex-M4 identified.</span>
<span class="go">Erasing device (0;?i?)...</span>
<span class="go">Comparing flash [100%] Done.</span>
<span class="go">Erasing flash [100%] Done.</span>
<span class="go">Verifying flash [100%] Done.</span>
<span class="go">J-Link: Flash download: Total time needed: 0.363s (Prepare: 0.093s, Compare: 0.000s, Erase: 0.262s, Program: 0.000s, Verify: 0.000s, Restore: 0.008s)</span>
<span class="go">Erasing done.</span>
<span class="go">J-Link&gt;exit</span>
<span class="gp">$</span>
</pre></div>
</div>
<p>If you are using the OpenOCD debugger, run the
<code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">debug</span> <span class="pre">primoblinky</span></code> command and issue the highlighted command at
the (gdb) prompt:</p>
<p><strong>Note:</strong> 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.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>debug<span class="w"> </span>primoblinky
<span class="go">[~/dev/myproj/repos/apache-mynewt-core/hw/bsp/arduino_primo_nrf52/primo_debug.sh ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/arduino_primo_nrf52 ~/dev/myproj/bin/targets/primoblinky/app/apps/blinky/blinky]</span>
<span class="go">Open On-Chip Debugger 0.10.0-dev-snapshot (2017-03-28-11:24)</span>
<span class="go"> ...</span>
<span class="go">os_tick_idle (ticks=128)</span>
<span class="go"> at repos/apache-mynewt-core/hw/mcu/nordic/nrf52xxx/src/hal_os_tick.c:200</span>
<span class="hll"><span class="go">warning: Source file is more recent than executable.</span>
</span><span class="go">200 if (ticks &gt; 0) {</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">mon nrf52 mass_erase</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="olimex.html" class="btn btn-neutral float-right" title="Blinky, your “Hello World!”, on Olimex" accesskey="n">Next: Blinky, your “Hello World!”, on Olimex <span class="fa fa-arrow-circle-right"></span></a>
<a href="arduino_zero.html" class="btn btn-neutral" title="Blinky, your “Hello World!”, on Arduino Zero" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Blinky, your “Hello World!”, on Arduino Zero</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div 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">
<img src="../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<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>
<a href="">
<img src="../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../_static/js/main.js"></script>
</body>
</html>