| |
| |
| <!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 — 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" > |
| 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 & 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=""> |
| <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">"my_project"</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">@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">@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 'swd'</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 'swd'</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 <http://gnu.org/licenses/gpl.html></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 "show copying"</span> |
| <span class="go">and "show warranty" for details.</span> |
| <span class="go">This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-eabi".</span> |
| <span class="go">Type "show configuration" for configuration details.</span> |
| <span class="go">For bug reporting instructions, please see:</span> |
| <span class="go"><http://www.gnu.org/software/gdb/bugs/>.</span> |
| <span class="go">Find the GDB manual and other documentation resources online at:</span> |
| <span class="go"><http://www.gnu.org/software/gdb/documentation/>.</span> |
| <span class="go">For help, type "help".</span> |
| <span class="go">Type "apropos word" to search for commands related to "word"...</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 'gdb' 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 "remote" target does not support "run". Try "help target" or "continue".</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> |