blob: c1880aaa4b9728d59d90a69918ca099011a9a879 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Open Flash Loader &mdash; NuttX latest documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="../_static/tabs.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Testing TCP/IP Network Stacks" href="testingtcpip.html" />
<link rel="prev" title="GDB with Python" href="gdbwithpython.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../latest" selected="selected">latest</option>
<option value="../../10.0.0" >10.0.0</option>
<option value="../../10.0.1" >10.0.1</option>
<option value="../../10.1.0" >10.1.0</option>
<option value="../../10.2.0" >10.2.0</option>
<option value="../../10.3.0" >10.3.0</option>
<option value="../../11.0.0" >11.0.0</option>
<option value="../../12.0.0" >12.0.0</option>
<option value="../../12.1.0" >12.1.0</option>
<option value="../../12.2.0" >12.2.0</option>
<option value="../../12.2.1" >12.2.1</option>
<option value="../../12.3.0" >12.3.0</option>
<option value="../../12.4.0" >12.4.0</option>
<option value="../../12.5.0" >12.5.0</option>
<option value="../../12.5.1" >12.5.1</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Guides</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="nfs.html">NFS Client How-To</a></li>
<li class="toctree-l2"><a class="reference internal" href="usbtrace.html">USB Device Trace</a></li>
<li class="toctree-l2"><a class="reference internal" href="simulator.html">Simulator</a></li>
<li class="toctree-l2"><a class="reference internal" href="qemugdb.html">How to debug NuttX using QEMU and GDB</a></li>
<li class="toctree-l2"><a class="reference internal" href="rndis.html">How to use RNDIS</a></li>
<li class="toctree-l2"><a class="reference internal" href="drivers.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="tasktrace.html">Task Trace</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpp_cmake.html">C++ Example using CMake</a></li>
<li class="toctree-l2"><a class="reference internal" href="pysimcoder.html">pysimCoder integration with NuttX</a></li>
<li class="toctree-l2"><a class="reference internal" href="customboards.html">Custom Boards How-To</a></li>
<li class="toctree-l2"><a class="reference internal" href="customapps.html">Custom Apps How-to</a></li>
<li class="toctree-l2"><a class="reference internal" href="citests.html">Running CI Test Locally</a></li>
<li class="toctree-l2"><a class="reference internal" href="zerolatencyinterrupts.html">High Performance, Zero Latency Interrupts</a></li>
<li class="toctree-l2"><a class="reference internal" href="nestedinterrupts.html">Nested Interrupts</a></li>
<li class="toctree-l2"><a class="reference internal" href="cortexmhardfaults.html">Analyzing Cortex-M Hardfaults</a></li>
<li class="toctree-l2"><a class="reference internal" href="coredump.html">Core Dump</a></li>
<li class="toctree-l2"><a class="reference internal" href="minidumpserver.html">minidumpserver</a></li>
<li class="toctree-l2"><a class="reference internal" href="gdbwithpython.html">GDB with Python</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Open Flash Loader</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#introduce">Introduce</a></li>
<li class="toctree-l3"><a class="reference internal" href="#configuration">CONFIGURATION</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usage">Usage</a></li>
<li class="toctree-l3"><a class="reference internal" href="#precautions">Precautions</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="testingtcpip.html">Testing TCP/IP Network Stacks</a></li>
<li class="toctree-l2"><a class="reference internal" href="automounter.html">Auto-Mounter</a></li>
<li class="toctree-l2"><a class="reference internal" href="stm32nullpointer.html">STM32 Null Pointer Detection</a></li>
<li class="toctree-l2"><a class="reference internal" href="stm32ccm.html">STM32 CCM Allocator</a></li>
<li class="toctree-l2"><a class="reference internal" href="stackrecord.html">Run time stack statistics</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Guides</a></li>
<li class="breadcrumb-item active">Open Flash Loader</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/guides/ofloader.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="open-flash-loader">
<h1>Open Flash Loader<a class="headerlink" href="#open-flash-loader" title="Permalink to this heading"></a></h1>
<section id="introduce">
<h2>Introduce<a class="headerlink" href="#introduce" title="Permalink to this heading"></a></h2>
<p>Open Flash loader is an implementation in NuttX that bridges the device
drivers in NuttX with the programming methods of a flash loader in J-Link.
It allows J-Link to program any supported NuttX device driver.</p>
</section>
<section id="configuration">
<h2>CONFIGURATION<a class="headerlink" href="#configuration" title="Permalink to this heading"></a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">CONFIG_DISABLE_IDLE_LOOP</span><span class="o">=</span><span class="n">y</span>
<span class="n">CONFIG_SYSTEM_OFLOADER</span><span class="o">=</span><span class="n">y</span>
<span class="n">CONFIG_SYSTEM_OFLOADER_TABLE</span><span class="o">=</span><span class="s">&quot;/dev/flash,0x08000000,0x20000&quot;</span><span class="p">,</span><span class="mi">0</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">`CONFIG_DISABLE_IDLE_LOOP</span></code> is used to disable the idle loop in NuttX.
<code class="docutils literal notranslate"><span class="pre">`CONFIG_SYSTEM_OFLOADER`</span></code> is used to enable the Open Flash Loader.
<code class="docutils literal notranslate"><span class="pre">`CONFIG_SYSTEM_OFLOADER_TABLE`</span></code> is used to configure the flash device
first parameter is the device name, second parameter is the start address.</p>
<p>The reference configuration “stm32f429i-disco:ofloader” is designed
to be used with the STM32F429I-DISCO board in NuttX,
enabling the Open Flash loader functionality. This configuration allows
the J-Link flash loader to program the NuttX image onto the STM32F429I-DISCO board.</p>
</section>
<section id="usage">
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Build NuttX with Open Flash Loader.</p></li>
<li><p>Configure the Jlink xml file. like</p></li>
</ol>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Database&gt;</span>
<span class="w"> </span><span class="nt">&lt;Device&gt;</span>
<span class="w"> </span><span class="nt">&lt;ChipInfo</span><span class="w"> </span><span class="na">Vendor=</span><span class="s">&quot;STM32NUTTX&quot;</span><span class="w"> </span><span class="na">Name=</span><span class="s">&quot;NuttX&quot;</span><span class="w"> </span><span class="na">Core=</span><span class="s">&quot;JLINK_CORE_CORTEX_M4&quot;</span><span class="w"> </span><span class="na">WorkRAMAddr=</span><span class="s">&quot;0x20000000&quot;</span><span class="w"> </span><span class="na">WorkRAMSize=</span><span class="s">&quot;0x10000000&quot;</span><span class="w"> </span><span class="nt">/&gt;</span>
<span class="w"> </span><span class="nt">&lt;FlashBankInfo</span><span class="w"> </span><span class="na">Name=</span><span class="s">&quot;Storage&quot;</span><span class="w"> </span><span class="na">BaseAddr=</span><span class="s">&quot;0x00000000&quot;</span><span class="w"> </span><span class="na">MaxSize=</span><span class="s">&quot;0xffffffff&quot;</span><span class="w"> </span><span class="na">Loader=</span><span class="s">&quot;/home/ajh/work/vela_all/nuttx/nuttx&quot;</span><span class="w"> </span><span class="na">LoaderType=</span><span class="s">&quot;FLASH_ALGO_TYPE_OPEN&quot;</span><span class="w"> </span><span class="na">AlwaysPresent=</span><span class="s">&quot;1&quot;</span><span class="nt">/&gt;</span>
<span class="w"> </span><span class="nt">&lt;/Device&gt;</span>
<span class="nt">&lt;/Database&gt;</span>
</pre></div>
</div>
<ol class="arabic simple" start="3">
<li><p>Use <code class="docutils literal notranslate"><span class="pre">JLinkExe</span> <span class="pre">-if</span> <span class="pre">SWD</span> <span class="pre">-speed</span> <span class="pre">4000</span> <span class="pre">-device</span> <span class="pre">STM32NUTTX</span></code>,
then <code class="docutils literal notranslate"><span class="pre">loadbin</span> <span class="pre">/home/ajh/work/nuttx.bin</span> <span class="pre">0x08000000</span></code>,
we can flash nuttx.bin to /dev/flash</p></li>
</ol>
</section>
<section id="precautions">
<h2>Precautions<a class="headerlink" href="#precautions" title="Permalink to this heading"></a></h2>
<p>1.If you need to implement the ofloader on a different board,
you will need to read the <cite>wiki &lt;https://wiki.segger.com/SEGGER_Flash_Loader&gt;</cite>
and refer to the implementation of “ofloader.ld” linker script located
in the “boards/arm/stm32/stm32f429i-disco/scripts” directory.
This linker script defines how the different sections of the NuttX image are placed in memory.
You should configure the corresponding sections to be located in RAM,
where the J-Link can write the image correctly.</p>
<p>2.When running the ofloader, J-Link disables any interrupts by default.
Therefore, currently, it does not support programming devices with interrupt-driven drivers.</p>
<p>3.Due to limitations of J-Link, the ofloader image file cannot exceed 64KB.
It is essential to be mindful of this constraint during programming.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="gdbwithpython.html" class="btn btn-neutral float-left" title="GDB with Python" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="testingtcpip.html" class="btn btn-neutral float-right" title="Testing TCP/IP Network Stacks" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>