blob: 1b10ff0573b100bbe24402a5b7a5c3c6414c2188 [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 Zero &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 Arduino Primo" href="blinky_primo.html"/>
<link rel="prev" title="Project Blinky" href="blinky.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 Zero
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/blinky/arduino_zero.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" selected="selected" >
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" >
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 current"><a class="current reference internal" href="#">Blinky on Arduino Zero</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_primo.html">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.11.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-zero">
<h1>Blinky, your “Hello World!”, on Arduino Zero<a class="headerlink" href="#blinky-your-hello-world-on-arduino-zero" title="Permalink to this headline"></a></h1>
<p>This tutorial shows you how to create, build and run the Blinky
application on an Arduino Zero board.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#prerequisites" id="id1">Prerequisites</a></p></li>
<li><p><a class="reference internal" href="#create-a-project" id="id2">Create a Project</a></p></li>
<li><p><a class="reference internal" href="#fetch-external-packages" id="id3">Fetch External Packages</a></p></li>
<li><p><a class="reference internal" href="#create-a-target-for-the-blinky-application" id="id4">Create a Target for the Blinky Application</a></p></li>
<li><p><a class="reference internal" href="#build-the-bootloader" id="id5">Build the Bootloader</a></p></li>
<li><p><a class="reference internal" href="#build-the-blinky-application" id="id6">Build the Blinky Application</a></p></li>
<li><p><a class="reference internal" href="#connect-to-the-board" id="id7">Connect to the Board</a></p></li>
<li><p><a class="reference internal" href="#load-the-bootloader-onto-the-board" id="id8">Load the Bootloader onto the Board</a></p></li>
<li><p><a class="reference internal" href="#run-the-blinky-application" id="id9">Run the Blinky Application</a></p></li>
</ul>
</div>
<div class="section" id="prerequisites">
<h2><a class="toc-backref" href="#id1">Prerequisites</a><a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Meet 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 Zero board.
Note: There are many flavors of Arduino. Make sure you are using an
Arduino Zero. See below for the versions of Arduino Zero that are
compatible with this tutorial.</p></li>
<li><p>Install the <a class="reference internal" href="../../get_started/native_install/cross_tools.html"><span class="doc">OpenOCD debugger</span></a>.</p></li>
</ul>
<p>This tutorial uses the Arduino Zero Pro board. The tutorial has been
tested on the following three Arduino Zero boards - Zero, M0 Pro, and
Zero-Pro.</p>
<blockquote>
<div><div class="figure align-left">
<a class="reference internal image-reference" href="../../_images/Zero_Usb_Ports.jpg"><img alt="Arduino Zero" src="../../_images/Zero_Usb_Ports.jpg" style="width: 200px;" /></a>
</div>
<div class="figure align-left">
<a class="reference internal image-reference" href="../../_images/Arduino-M0Pro-flat.jpg"><img alt="Arduino M0 Pro" src="../../_images/Arduino-M0Pro-flat.jpg" style="width: 160px;" /></a>
</div>
<div class="figure align-default">
<a class="reference internal image-reference" href="../../_images/ArduinoZeroPro-flat-org.jpg"><img alt="Arduino Zero Pro" src="../../_images/ArduinoZeroPro-flat-org.jpg" style="width: 160px;" /></a>
</div>
</div></blockquote>
<p>Mynewt has not been tested on Arduino M0 which has no internal debugger
support.</p>
</div>
<div class="section" id="create-a-project">
<h2><a class="toc-backref" href="#id2">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="#fetch-external-packages">Fetch External Packages</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">apache-mynewt-core successfully upgraded to version 1.7.0</span>
<span class="gp">$</span>
</pre></div>
</div>
</div>
<div class="section" id="fetch-external-packages">
<h2><a class="toc-backref" href="#id3">Fetch External Packages</a><a class="headerlink" href="#fetch-external-packages" title="Permalink to this headline"></a></h2>
<p>Mynewt uses source code provided directly from the chip manufacturer for
low level operations. Sometimes this code is licensed only for the
specific manufacturer of the chipset and cannot live in the Apache
Mynewt repository. That happens to be the case for the Arduino Zero
board which uses Atmel SAMD21. Runtime’s github repository hosts such
external third-party packages and the newt tool can fetch them.</p>
<p>To fetch the package with MCU support for Atmel SAMD21 for Arduino Zero
from the Runtime git repository, you need to add the repository to the
<code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file in your base project directory.</p>
<p>Here is an example <code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file with the Arduino Zero repository
added. The sections with <code class="docutils literal notranslate"><span class="pre">mynewt_arduino_zero</span></code> that need to be added
to your project file are highlighted.</p>
<p><strong>Note:</strong> On Windows platforms: You need to set <code class="docutils literal notranslate"><span class="pre">vers</span></code> to <code class="docutils literal notranslate"><span class="pre">0-dev</span></code>
and use the latest master branch for both repositories.</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="c1"># project.yml</span>
<span class="nt">project.name</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;my_project&quot;</span>
<span class="nt">project.repositories</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apache-mynewt-core</span>
<span class="hll"><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mynewt_arduino_zero</span>
</span>
<span class="nt">repository.apache-mynewt-core</span><span class="p">:</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">github</span>
<span class="w"> </span><span class="nt">vers</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1-latest</span>
<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apache</span>
<span class="w"> </span><span class="nt">repo</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mynewt-core</span>
<span class="hll"><span class="nt">repository.mynewt_arduino_zero</span><span class="p">:</span>
</span><span class="hll"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">github</span>
</span><span class="hll"><span class="w"> </span><span class="nt">vers</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1-latest</span>
</span><span class="hll"><span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">runtimeco</span>
</span><span class="hll"><span class="w"> </span><span class="nt">repo</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mynewt_arduino_zero</span>
</span></pre></div>
</div>
<p>Install the project dependencies using the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">upgrade</span></code> command
(you can specify <code class="docutils literal notranslate"><span class="pre">-v</span></code> for verbose output):</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><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_arduino_zero (commit: master) ...</span>
<span class="go">apache-mynewt-core successfully upgraded to version 1.7.0</span>
<span class="go">mynewt_arduino_zero successfully upgraded to version 1.7.0</span>
<span class="gp">$</span>
</pre></div>
</div>
<p>You need to create two targets for the Arduino Zero Pro 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">arduino_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>arduino_boot
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_boot<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@mynewt_arduino_zero/hw/bsp/arduino_zero
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_boot<span class="w"> </span><span class="nv">app</span><span class="o">=</span>@mcuboot/boot/mynewt
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_boot<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>optimized
<span class="go">Target targets/arduino_boot successfully set target.build_profile to optimized</span>
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_boot<span class="w"> </span><span class="nv">syscfg</span><span class="o">=</span><span class="nv">BSP_ARDUINO_ZERO_PRO</span><span class="o">=</span><span class="m">1</span>
<span class="go">Target targets/arduino_boot successfully set target.syscfg to BSP_ARDUINO_ZERO_PRO=1</span>
<span class="gp">$</span>
</pre></div>
</div>
<p><strong>Note:</strong> If you have an Arduino Zero instead of an Arduino Zero Pro or
Arduino M0 Pro board, replace <code class="docutils literal notranslate"><span class="pre">BSP_ARDUINO_ZERO_PRO</span></code> with
<code class="docutils literal notranslate"><span class="pre">BSP_ARDUINO_ZERO</span></code> in the last <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span> <span class="pre">set</span></code> command.</p>
<p>These commands perform the following:</p>
<ul class="simple">
<li><p>Create a target named <code class="docutils literal notranslate"><span class="pre">arduino_boot</span></code> for the Arduino Zero
Bootloader.</p></li>
<li><p>Set the application for the <code class="docutils literal notranslate"><span class="pre">arduino_boot</span></code> target to the default
MCUBoot bootloader (<code class="docutils literal notranslate"><span class="pre">&#64;mcuboot/boot/mynewt</span></code>)</p></li>
<li><p>Set the board support package for the target to
<code class="docutils literal notranslate"><span class="pre">&#64;mynewt_arduino_zero/hw/bsp/arduino_zero</span></code>. This is a reference to
the downloaded Arduino Zero support from Github.</p></li>
<li><p>Use the “optimized” build profile for the <code class="docutils literal notranslate"><span class="pre">arduino_boot</span></code> target.
This instructs Newt to generate smaller and more efficient code for
this target. This setting is necessary due to the bootloader’s strict
size constraints.</p></li>
<li><p>Sets the system configuration setting for Board Support Package to
support the Arduino Zero Pro.</p></li>
</ul>
<p>See the <a class="reference internal" href="../../concepts.html#concepts"><span class="std std-ref">Concepts</span></a> for more information on setting options.</p>
</div>
<div class="section" id="create-a-target-for-the-blinky-application">
<h2><a class="toc-backref" href="#id4">Create a Target for the Blinky Application</a><a class="headerlink" href="#create-a-target-for-the-blinky-application" title="Permalink to this headline"></a></h2>
<p>Run the following <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span></code> commands to create the
Blinky application target. We name the application target
<code class="docutils literal notranslate"><span class="pre">arduino_blinky</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>arduino_blinky
<span class="go">Target targets/arduino_blinky successfully created</span>
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_blinky<span class="w"> </span><span class="nv">app</span><span class="o">=</span>apps/blinky
<span class="go">Target targets/arduino_blinky successfully set target.app to apps/blinky</span>
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_blinky<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@mynewt_arduino_zero/hw/bsp/arduino_zero
<span class="go">Target targets/arduino_blinky successfully set target.bsp to @mynewt_arduino_zero/hw/bsp/arduino_zero</span>
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_blinky<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>debug
<span class="go">Target targets/arduino_blinky successfully set target.build_profile to debug</span>
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>arduino_blinky<span class="w"> </span><span class="nv">syscfg</span><span class="o">=</span><span class="nv">BSP_ARDUINO_ZERO_PRO</span><span class="o">=</span><span class="m">1</span>
<span class="go">Target targets/arduino_boot successfully set target.syscfg to BSP_ARDUINO_ZERO_PRO=1</span>
<span class="gp">$</span>
</pre></div>
</div>
<p><strong>Note:</strong> If you have an Arduino Zero instead of a Arduino Zero Pro
board, replace <code class="docutils literal notranslate"><span class="pre">BSP_ARDUINO_ZERO_PRO</span></code> with <code class="docutils literal notranslate"><span class="pre">BSP_ARDUINO_ZERO</span></code> in the
last <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span> <span class="pre">set</span></code> command.</p>
</div>
<div class="section" id="build-the-bootloader">
<h2><a class="toc-backref" href="#id5">Build the Bootloader</a><a class="headerlink" href="#build-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">build</span> <span class="pre">arduino_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>arduino_boot
<span class="go">Building target targets/arduino_boot</span>
<span class="go">Compiling bin/targets/arduino_boot/generated/src/arduino_boot-sysinit-app.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c</span>
<span class="go">Compiling bin/targets/arduino_boot/generated/src/arduino_boot-sysflash.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_validate.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c</span>
<span class="go">Compiling repos/mcuboot/boot/mynewt/src/main.c</span>
<span class="go">Compiling repos/apache-mynewt-core/crypto/mbedtls/src/arc4.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/loader.c</span>
<span class="go">Compiling repos/apache-mynewt-core/crypto/mbedtls/src/aes.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/arduino_boot/app/boot/mynewt/mynewt.elf</span>
<span class="go">Target successfully built: targets/arduino_boot</span>
</pre></div>
</div>
</div>
<div class="section" id="build-the-blinky-application">
<h2><a class="toc-backref" href="#id6">Build the Blinky Application</a><a class="headerlink" href="#build-the-blinky-application" 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">arduino_blinky</span></code> command to build the Blinky
application image:</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>arduino_blinky
<span class="go">Building target targets/arduino_blinky</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/hal/src/hal_flash.c</span>
<span class="go">Compiling apps/blinky/src/main.c</span>
<span class="go">Compiling repos/mynewt_arduino_zero/hw/mcu/atmel/samd21xx/src/sam0/drivers/i2s/i2s.c</span>
<span class="go">Compiling repos/mynewt_arduino_zero/hw/bsp/arduino_zero/src/hal_bsp.c</span>
<span class="go">Compiling repos/mynewt_arduino_zero/hw/mcu/atmel/samd21xx/src/sam0/drivers/i2s/i2s_callback.c</span>
<span class="go">Compiling repos/mynewt_arduino_zero/hw/mcu/atmel/samd21xx/src/sam0/drivers/nvm/nvm.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/arduino_blinky/app/apps/blinky/blinky.elf</span>
<span class="go">Target successfully built: targets/arduino_blinky</span>
</pre></div>
</div>
</div>
<div class="section" id="connect-to-the-board">
<h2><a class="toc-backref" href="#id7">Connect to the Board</a><a class="headerlink" href="#connect-to-the-board" title="Permalink to this headline"></a></h2>
<p>Connect your computer to the Arduino Zero (from now on we’ll call this
the target) with a Micro-USB cable through the Programming Port as shown
below. Mynewt will load the image onto the board and debug the target
through this port. You should see a green LED come on that indicates the
board has power.</p>
<p>No external debugger is required. The Arduino Zero comes with an
internal debugger that can be accessed by Mynewt.</p>
<p>The images below show the Arduino Zero Programming Port.</p>
<blockquote>
<div><div class="figure align-left">
<a class="reference internal image-reference" href="../../_images/Zero_Usb_Ports.jpg"><img alt="Arduino Zero" src="../../_images/Zero_Usb_Ports.jpg" style="width: 280px;" /></a>
</div>
<div class="figure align-default">
<a class="reference internal image-reference" href="../../_images/ArduinoZeroPro-flat-org.jpg"><img alt="Arduino Zero Pro" src="../../_images/ArduinoZeroPro-flat-org.jpg" style="width: 240px;" /></a>
</div>
</div></blockquote>
</div>
<div class="section" id="load-the-bootloader-onto-the-board">
<h2><a class="toc-backref" href="#id8">Load the Bootloader onto the Board</a><a class="headerlink" href="#load-the-bootloader-onto-the-board" 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">arduino_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>arduino_boot
<span class="go">Loading bootloader</span>
<span class="gp">$</span>
</pre></div>
</div>
<p>The bootloader is loaded onto your board succesfully when the
<code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span></code> command returns to the command prompt after the
<code class="docutils literal notranslate"><span class="pre">Loading</span> <span class="pre">bootloader</span></code> status message. You can proceed to load and run
your Blinky application image (See <a class="reference internal" href="#run-the-blinky-application">Run the Blinky Application</a>).</p>
<p>If the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span></code> command outputs the following error messages, you
will need to erase 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>arduino_boot<span class="w"> </span>-v
<span class="go">Loading bootloader</span>
<span class="go">Error: Downloading ~/dev/myproj/bin/targets/arduino_boot/boot/mynewt/mynewt.elf.bin to 0x0</span>
<span class="go">Open On-Chip Debugger 0.9.0 (2015-11-15-05:39)</span>
<span class="go">Licensed under GNU GPL v2</span>
<span class="go">For bug reports, read</span>
<span class="go"> http://openocd.org/doc/doxygen/bugs.html</span>
<span class="go">Info : only one transport option; autoselect &#39;swd&#39;</span>
<span class="go">adapter speed: 500 kHz</span>
<span class="go">adapter_nsrst_delay: 100</span>
<span class="go">cortex_m reset_config sysresetreq</span>
<span class="go">Info : CMSIS-DAP: SWD Supported</span>
<span class="go">Info : CMSIS-DAP: JTAG Supported</span>
<span class="go">Info : CMSIS-DAP: Interface Initialised (SWD)</span>
<span class="go">Info : CMSIS-DAP: FW Version = 01.1F.0118</span>
<span class="go">Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1</span>
<span class="go">Info : CMSIS-DAP: Interface ready</span>
<span class="go">Info : clock speed 500 kHz</span>
<span class="go">Info : SWD IDCODE 0x0bc11477</span>
<span class="go">Info : at91samd21g18.cpu: hardware has 4 breakpoints, 2 watchpoints</span>
<span class="go">Error: Target not halted</span>
</pre></div>
</div>
<p>To erase your board, start a debug session and enter the highlighted
commands at the <code class="docutils literal notranslate"><span class="pre">(gdb)</span></code> prompts:</p>
<p><strong>Note:</strong> 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>arduino_blinky
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">mon at91samd chip-erase</span>
<span class="go">chip erased</span>
<span class="go">chip erased</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">x/32wx 0</span>
<span class="go">0x0: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x10: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x20: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x30: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x40: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x50: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x60: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="go">0x70: 0xffffffff 0xffffffff 0xffffffff 0xffffffff</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">q</span>
</pre></div>
</div>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">arduino_boot</span></code> command again after erasing the
board.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Reminder if you are using Docker: When working with actual hardware,
remember that each board has an ID. If you swap boards and do not
refresh the USB Device Filter on the VirtualBox UI, the ID might be
stale and the Docker instance may not be able to see the board
correctly. For example, you may see an error message like
<code class="docutils literal notranslate"><span class="pre">Error:</span> <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> when you try to load or run
an image on the board. In that case, you need to click on the USB link
in VirtualBox UI, remove the existing USB Device Filter (e.g. “Atmel
Corp. EDBG CMSIS-DAP[0101]”) by clicking on the “Removes selected USB
filter” button, and add a new filter by clicking on the “Adds new USB
filter” button.</p>
</div>
</div>
<div class="section" id="run-the-blinky-application">
<h2><a class="toc-backref" href="#id9">Run the Blinky Application</a><a class="headerlink" href="#run-the-blinky-application" title="Permalink to this headline"></a></h2>
<p>After you load the bootloader successfully onto your board, you can load
and run the Blinky application.</p>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">run</span> <span class="pre">arduino_blinky</span> <span class="pre">1.0.0</span></code> command to build the
arduino_blinky target (if necessary), create an image with version
1.0.0, load the image onto the board, and start a debugger session.</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. The output of openocd is logged to the
openocd.log file in your project’s base directory and not to the
terminal. The openocd and gdb terminals will close automatically when
you quit gdb.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>run<span class="w"> </span>arduino_blinky<span class="w"> </span><span class="m">1</span>.0.0
<span class="go">App image succesfully generated: ~/dev/myproj/bin/targets/arduino_blinky/app/apps/blinky/blinky.img</span>
<span class="go">Loading app image into slot 1</span>
<span class="go">[~/dev/myproj/repos/mynewt_arduino_zero/hw/bsp/arduino_zero/arduino_zero_debug.sh ~/dev/myproj/repos/mynewt_arduino_zero/hw/bsp/arduino_zero ~/dev/myproj/bin/targets/arduino_blinky/app/apps/blinky/blinky]</span>
<span class="go">Open On-Chip Debugger 0.9.0 (2015-11-15-13:10)</span>
<span class="go">Licensed under GNU GPL v2</span>
<span class="go">For bug reports, read</span>
<span class="go">http://openocd.org/doc/doxygen/bugs.html</span>
<span class="go">Info : only one transport option; autoselect &#39;swd&#39;</span>
<span class="go">adapter speed: 500 kHz</span>
<span class="go">adapter_nsrst_delay: 100</span>
<span class="go">cortex_m reset_config sysresetreq</span>
<span class="go">Info : CMSIS-DAP: SWD Supported</span>
<span class="go">Info : CMSIS-DAP: JTAG Supported</span>
<span class="go">Info : CMSIS-DAP: Interface Initialised (SWD)</span>
<span class="go">Info : CMSIS-DAP: FW Version = 01.1F.0118</span>
<span class="go">Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1</span>
<span class="go">Info : CMSIS-DAP: Interface ready</span>
<span class="go">Info : clock speed 500 kHz</span>
<span class="go">Info : SWD IDCODE 0x0bc11477</span>
<span class="go">Info : at91samd21g18.cpu: hardware has 4 breakpoints, 2 watchpoints</span>
<span class="go">target state: halted</span>
<span class="go">target halted due to debug-request, current mode: Thread</span>
<span class="go">xPSR: 0x21000000 pc: 0x0000fca6 psp: 0x20002408</span>
<span class="go">GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs</span>
<span class="go">Copyright (C) 2014 Free Software Foundation, Inc.</span>
<span class="go">License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;</span>
<span class="go">This is free software: you are free to change and redistribute it.</span>
<span class="go">There is NO WARRANTY, to the extent permitted by law. Type &quot;show copying&quot;</span>
<span class="go">and &quot;show warranty&quot; for details.</span>
<span class="go">This GDB was configured as &quot;--host=x86_64-apple-darwin10 --target=arm-none-eabi&quot;.</span>
<span class="go">Type &quot;show configuration&quot; for configuration details.</span>
<span class="go">For bug reporting instructions, please see:</span>
<span class="go">&lt;http://www.gnu.org/software/gdb/bugs/&gt;.</span>
<span class="go">Find the GDB manual and other documentation resources online at:</span>
<span class="go">&lt;http://www.gnu.org/software/gdb/documentation/&gt;.</span>
<span class="go">For help, type &quot;help&quot;.</span>
<span class="go">Type &quot;apropos word&quot; to search for commands related to &quot;word&quot;...</span>
<span class="go">Reading symbols from ~/dev/myproj/bin/targets/arduino_blinky/app/apps/blinky/blinky.elf...(no debugging symbols found)...done.</span>
<span class="go">Info : accepting &#39;gdb&#39; connection on tcp/3333</span>
<span class="go">Info : SAMD MCU: SAMD21G18A (256KB Flash, 32KB RAM)</span>
<span class="go">0x0000fca6 in os_tick_idle ()</span>
<span class="go">target state: halted</span>
<span class="go">target halted due to debug-request, current mode: Thread</span>
<span class="go">xPSR: 0x21000000 pc: 0x000000b8 msp: 0x20008000</span>
<span class="go">target state: halted</span>
<span class="go">target halted due to debug-request, current mode: Thread</span>
<span class="go">xPSR: 0x21000000 pc: 0x000000b8 msp: 0x20008000</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">r</span>
<span class="go">The &quot;remote&quot; target does not support &quot;run&quot;. Try &quot;help target&quot; or &quot;continue&quot;.</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">c</span>
<span class="go">Continuing.</span>
</pre></div>
</div>
<p><strong>NOTE:</strong> The 1.0.0 is the version number to assign to the image. You
may assign an arbitrary version number. If you are not providing remote
upgrade, and are just developing locally, you can provide 1.0.0 for
every image version.</p>
<p>If you want the image to run without the debugger connected, simply quit
the debugger and restart the board. The image you programmed will come
and run on the Arduino on next boot!</p>
<p>You should see the LED blink!</p>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="blinky_primo.html" class="btn btn-neutral float-right" title="Blinky, your “Hello World!”, on Arduino Primo" accesskey="n">Next: Blinky, your “Hello World!”, on Arduino Primo <span class="fa fa-arrow-circle-right"></span></a>
<a href="blinky.html" class="btn btn-neutral" title="Project Blinky" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Project Blinky</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>