blob: 3cbbb05b4c2912d42c8b789d25ffa1b624abf719 [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.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Raspberry Pi rp2350 &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/sphinx_collapse.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css" />
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
<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/design-tabs.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="Raspberry Pi Pico 2" href="boards/raspberrypi-pico-2/index.html" />
<link rel="prev" title="Waveshare RP2040 Zero" href="../rp2040/boards/waveshare-rp2040-zero/index.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>
<option value="../../../../12.6.0" >12.6.0</option>
<option value="../../../../12.7.0" >12.7.0</option>
<option value="../../../../12.8.0" >12.8.0</option>
<option value="../../../../12.9.0" >12.9.0</option>
<option value="../../../../12.10.0" >12.10.0</option>
<option value="../../../../12.11.0" >12.11.0</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 current"><a class="reference internal" href="../../index.html">Supported Platforms</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="../index.html">ARM</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../a1x/index.html">Allwinner A10</a></li>
<li class="toctree-l3"><a class="reference internal" href="../am335x/index.html">TI/Sitara AM335x</a></li>
<li class="toctree-l3"><a class="reference internal" href="../at32/index.html">Artery AT32</a></li>
<li class="toctree-l3"><a class="reference internal" href="../bcm2708/index.html">Broadcom BCM2708 (removed)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../c5471/index.html">TI TMS320-C5471</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cxd56xx/index.html">Sony CXD56xx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../dm320/index.html">TI TMS320-DM320</a></li>
<li class="toctree-l3"><a class="reference internal" href="../efm32/index.html">SiLabs EFM32</a></li>
<li class="toctree-l3"><a class="reference internal" href="../eoss3/index.html">EOSS3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../fvp-v8r-aarch32/index.html">FVP ARMv8-R Virt Chip</a></li>
<li class="toctree-l3"><a class="reference internal" href="../gd32f4/index.html">GD32F4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../goldfish/goldfish_timer.html">GOLDFISH TIMER</a></li>
<li class="toctree-l3"><a class="reference internal" href="../goldfish/index.html">GOLDFISH</a></li>
<li class="toctree-l3"><a class="reference internal" href="../imx1/index.html">NXP/Freescale i.MX1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../imx6/index.html">NXP/Freescale i.MX6</a></li>
<li class="toctree-l3"><a class="reference internal" href="../imx9/index.html">NXP i.MX9</a></li>
<li class="toctree-l3"><a class="reference internal" href="../imxrt/index.html">NXP i.MX RT</a></li>
<li class="toctree-l3"><a class="reference internal" href="../kinetis/index.html">NXP/FreeScale Kinetis</a></li>
<li class="toctree-l3"><a class="reference internal" href="../kl/index.html">NXP/FreeScale KLxx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lc823450/index.html">ON Semiconductor LC823450</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc17xx/index.html">NXP LPC17xx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc214x/index.html">NXP LPC214x</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc2378/index.html">NXP LPC2378</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc31xx/index.html">NXP LPC31xx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc40xx/index.html">NXP LPC40xx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc43xx/index.html">NXP LPC43xx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lpc54xx/index.html">NXP LPC54xx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../max326xx/index.html">Maxim Integrated MAX32660</a></li>
<li class="toctree-l3"><a class="reference internal" href="../moxart/index.html">Moxa NP51x0</a></li>
<li class="toctree-l3"><a class="reference internal" href="../mps/index.html">MPS</a></li>
<li class="toctree-l3"><a class="reference internal" href="../nrf52/ieee802154.html">Nordic nRF52 IEEE 802.15.4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../nrf52/index.html">Nordic nRF52</a></li>
<li class="toctree-l3"><a class="reference internal" href="../nrf53/index.html">Nordic nRF53</a></li>
<li class="toctree-l3"><a class="reference internal" href="../nrf91/index.html">Nordic nRF91</a></li>
<li class="toctree-l3"><a class="reference internal" href="../nuc1xx/index.html">nuvoTon NUC120</a></li>
<li class="toctree-l3"><a class="reference internal" href="../phy62xx/index.html">PHY+ PHY62</a></li>
<li class="toctree-l3"><a class="reference internal" href="../qemu/index.html">QEMU</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ra4m1/index.html">Renesas RA4M1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../rp2040/index.html">Raspberry Pi rp2040</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Raspberry Pi rp2350</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#peripheral-support">Peripheral Support</a></li>
<li class="toctree-l4"><a class="reference internal" href="#installation">Installation</a></li>
<li class="toctree-l4"><a class="reference internal" href="#building-nuttx">Building NuttX</a></li>
<li class="toctree-l4"><a class="reference internal" href="#flash-boot">Flash boot</a></li>
<li class="toctree-l4"><a class="reference internal" href="#psram">PSRAM</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#use-psram-and-sram-as-a-single-main-heap">Use PSRAM and SRAM as a single main heap</a></li>
<li class="toctree-l5"><a class="reference internal" href="#use-psram-as-user-heap-sram-as-kernel-heap">Use PSRAM as user heap, SRAM as kernel heap</a></li>
<li class="toctree-l5"><a class="reference internal" href="#use-psram-as-a-separate-heap">Use PSRAM as a separate heap</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#programming">Programming</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#programming-using-bootsel">Programming using BOOTSEL</a></li>
<li class="toctree-l5"><a class="reference internal" href="#programming-with-picotool">Programming with picotool</a></li>
<li class="toctree-l5"><a class="reference internal" href="#programming-using-swd-debugger">Programming using SWD debugger</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#running-nuttx">Running NuttX</a></li>
<li class="toctree-l4"><a class="reference internal" href="#supported-boards">Supported Boards</a><ul>
<li class="toctree-l5"><a class="reference internal" href="boards/raspberrypi-pico-2/index.html">Raspberry Pi Pico 2</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/xiao-rp2350/index.html">Seeed Studio XIAO RP2350</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../s32k1xx/index.html">NXP S32K1XX</a></li>
<li class="toctree-l3"><a class="reference internal" href="../s32k3xx/index.html">NXP S32K3XX</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sam34/index.html">Microchip SAM34</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sama5/index.html">Microchip SAMA5</a></li>
<li class="toctree-l3"><a class="reference internal" href="../samd2l2/index.html">Microchip SAMD2x</a></li>
<li class="toctree-l3"><a class="reference internal" href="../samd5e5/index.html">Microchip samd5e5</a></li>
<li class="toctree-l3"><a class="reference internal" href="../samv7/index.html">Microchip SAM V7</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32c0/index.html">ST STM32C0</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32f0/index.html">ST STM32F0</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32f1/index.html">ST STM32F1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32f2/index.html">ST STM32F2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32f3/index.html">ST STM32F3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32f4/index.html">ST STM32F4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32f7/index.html">ST STM32F7</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32g0/index.html">ST STM32G0</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32g4/index.html">ST STM32G4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32h5/index.html">ST STM32H5</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32h7/index.html">ST STM32H7</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32l0/index.html">ST STM32L0</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32l1/index.html">ST STM32L1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32l4/index.html">ST STM32L4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32l5/index.html">ST STM32L5</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32u5/index.html">ST STM32U5</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32wb/index.html">ST STM32WB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../stm32wl5/index.html">ST STM32WL5</a></li>
<li class="toctree-l3"><a class="reference internal" href="../str71x/index.html">ST STR71</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tiva/index.html">TI/Stellaris Tiva</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tms570/index.html">TI/Hercules TMS570xxx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../xmc4/index.html">Infineon XMC4000</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../arm64/index.html">ARM64</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../avr/index.html">Microchip AVR</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../ceva/index.html">CEVA</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../hc/index.html">HC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mips/index.html">MIPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../misco/index.html">Misoc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../or1k/index.html">OpenRISC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../renesas/index.html">Renesas</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../risc-v/index.html">RISC-V</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sim/index.html">Simulators</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sim/network_linux.html">Network Support on Linux</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sim/network_vpnkit.html">Network support with VPNKit</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sparc/index.html">SPARC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../tricore/index.html">TriCore</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../x86/index.html">Intel 80x86</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../x86_64/index.html">Intel 80x86_64</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../xtensa/index.html">Xtensa</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../z16/index.html">Z16</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../z80/index.html">Z80</a></li>
</ul>
</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"><a class="reference internal" href="../../../debugging/index.html">Debugging</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../standards/index.html">Standards</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../logos/index.html">NuttX Logos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../_tags/tagsindex.html">Tags</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">Supported Platforms</a></li>
<li class="breadcrumb-item"><a href="../index.html">ARM</a></li>
<li class="breadcrumb-item active">Raspberry Pi rp2350</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/platforms/arm/rp23xx/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="raspberry-pi-rp2350">
<h1>Raspberry Pi rp2350<a class="headerlink" href="#raspberry-pi-rp2350" title="Permalink to this heading"></a></h1>
<p class="tags"><span>Tags: </span><a class="sd-sphinx-override sd-badge sd-bg-secondary sd-bg-text-secondary reference internal" href="../../../_tags/chip-rp2350.html"><span class="doc">chip:rp2350</span></a></p>
<p>The rp2350 is a dual core chip produced by Raspberry Pi that
is based on ARM Cortex-M33 or the Hazard3 RISC-V.</p>
<p>ARM Cortex-M33 and Hazard3 RISC-V cores are supported.</p>
<p>This is ARM Cortex-M33 version of the chip configuration.</p>
<p>This port is experimental and still a work in progress. Use with caution.</p>
<section id="peripheral-support">
<h2>Peripheral Support<a class="headerlink" href="#peripheral-support" title="Permalink to this heading"></a></h2>
<p>Most drivers were copied from the rp2040 port with some modifications.</p>
<p>The following list indicates peripherals currently supported in NuttX:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Peripheral</p></th>
<th class="head"><p>Status</p></th>
<th class="head"><p>Notes</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>GPIO</p></td>
<td><p>Working</p></td>
<td><p>See Supported Boards documentation for available pins.</p></td>
</tr>
<tr class="row-odd"><td><p>UART</p></td>
<td><p>Working</p></td>
<td><p>GPIO 0 (UART0 TX) and GPIO 1 (UART0 RX) are used for the console.</p></td>
</tr>
<tr class="row-even"><td><p>I2C</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>SPI Master</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>SPI Slave</p></td>
<td><p>Untested</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>DMAC</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>PWM</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>USB</p></td>
<td><p>Experimental</p></td>
<td><p>usbnsh configuration is somewhat working with some data corruption</p></td>
</tr>
<tr class="row-even"><td><p>PIO</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>IRQs</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>WDOG</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>DMA</p></td>
<td><p>Working</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>FPU/DSP</p></td>
<td><p>Experimental</p></td>
<td><p>The ostest passing the fpu test, dsp needs some real world testing</p></td>
</tr>
<tr class="row-odd"><td><p>Clock Output</p></td>
<td><p>Untested</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>Flash ROM Boot</p></td>
<td><p>Working</p></td>
<td><p>Does not require boot2 from pico-sdk
If picotool is available a nuttx.uf2 file will be created</p></td>
</tr>
<tr class="row-odd"><td><p>SRAM Boot</p></td>
<td><p>Working</p></td>
<td><p>Requires external SWD debugger</p></td>
</tr>
<tr class="row-even"><td><p>PSRAM</p></td>
<td><p>Working</p></td>
<td><p>Three modes of heap allocation described below</p></td>
</tr>
</tbody>
</table>
</section>
<section id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>Download and build picotool, make it available in the PATH:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/raspberrypi/picotool.git picotool
cd picotool
mkdir build
cd build
cmake ..
make
cp picotool ~/local/bin # somewhere in your PATH
</pre></div>
</div>
</li>
<li><p>Download NuttX and the companion applications. These must both be
contained in the same directory:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps.git apps
</pre></div>
</div>
</li>
</ol>
</section>
<section id="building-nuttx">
<h2>Building NuttX<a class="headerlink" href="#building-nuttx" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>Change to NuttX directory:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd nuttx
</pre></div>
</div>
</li>
<li><p>Select a configuration. The available configurations
can be listed with the command:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>./tools/configure.sh -L
</pre></div>
</div>
</li>
<li><p>Load the selected configuration.:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>make distclean
./tools/configure.sh raspberrypi-pico-2:usbnsh
</pre></div>
</div>
</li>
<li><p>Modify the configuration as needed (optional):</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>make menuconfig
</pre></div>
</div>
</li>
<li><p>Build NuttX:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>make
</pre></div>
</div>
</li>
</ol>
</section>
<section id="flash-boot">
<h2>Flash boot<a class="headerlink" href="#flash-boot" title="Permalink to this heading"></a></h2>
<p>By default, the system is built to build and run from the flash
using XIP. By using the default <cite>BOOT_RUNFROMFLASH</cite> configuration,
the full image is run from the flash making most of the internal
SRAM available for the OS and applications, however the execution
is slower. The cache can speed up, but you might want set your
time critical functions to be placed in the SRAM (copied from
the flash on startup).</p>
<p>It is also possible to execute from SRAM, which reduces the
available SRAM to the OS and applications, however it is very
useful when debugging as erasing and rewriting the flash on
every build is tedious and slow. This option is enabled with
<cite>BOOT_RUNFROMISRAM</cite> and requires <cite>openocd`</cite> and/or <cite>gdb</cite>.</p>
<p>There is a third option which is to write the firmware on the
flash and it gets copied to the SRAM. This is enabled with
<cite>CONFIG_BOOT_COPYTORAM</cite> and might be useful for time critical
applications, on the expense of reduced usable internal SRAM
memory.</p>
</section>
<section id="psram">
<h2>PSRAM<a class="headerlink" href="#psram" title="Permalink to this heading"></a></h2>
<p>Some boards like the <cite>pimoroni-pico-2-plus</cite> have a PSRAM
which greatly increases the available memory for applications.
The PSRAM is very slow compared to the internal SRAM,
so depending on the application, different configuration might
be necessary.</p>
<p>To use the PSRAM, enable the <cite>RP23XX_PSRAM</cite> and select the GPIO
pin used as CS1n with <cite>RP23XX_PSRAM_CS1_GPIO</cite>. See the RP2350
datasheet for more information.</p>
<p>The port offers three options for configuring the heaps to use
the external PSRAM, described below. More custom configurations
can be used with custom board initialization functions.</p>
<section id="use-psram-and-sram-as-a-single-main-heap">
<h3>Use PSRAM and SRAM as a single main heap<a class="headerlink" href="#use-psram-and-sram-as-a-single-main-heap" title="Permalink to this heading"></a></h3>
<p>This option is selected with <cite>RP23XX_PSRAM_HEAP_SINGLE</cite> and
requires <cite>MM_REGIONS &gt; 1</cite>, as the PSRAM memory region will
be added to the heap. It is also necessary to disable
<cite>MM_KERNEL_HEAP</cite>, as there will only be a single heap.</p>
<p>This is the simplest configuration because it will unify the
memories into a single main heap. This way you can see the <cite>free</cite>
command output the total amount of usable RAM in the heap.</p>
<p>However, there are some unpredictable performance issues because
there is no control of where the memory is allocated when issuing
<cite>malloc(3)</cite> and <cite>free(3)</cite>. For this reason, you might want to
consider the other options.</p>
</section>
<section id="use-psram-as-user-heap-sram-as-kernel-heap">
<h3>Use PSRAM as user heap, SRAM as kernel heap<a class="headerlink" href="#use-psram-as-user-heap-sram-as-kernel-heap" title="Permalink to this heading"></a></h3>
<p>This option is selected with <cite>RP23XX_PSRAM_HEAP_USER</cite> and
requires <cite>MM_KERNEL_HEAP</cite> to be set.</p>
<p>The external PSRAM is allocated to the default heap, while
the internal SRAM will be used for the kernel heap. This
configuration is useful because it allows drivers to
use the SRAM and behave much faster than if they used
memory on the PSRAM. While user applications can take
the bull benefit of the larger slower heap on the PSRAM.</p>
</section>
<section id="use-psram-as-a-separate-heap">
<h3>Use PSRAM as a separate heap<a class="headerlink" href="#use-psram-as-a-separate-heap" title="Permalink to this heading"></a></h3>
<p>This option is selected with <cite>RP23XX_PSRAM_HEAP_SEPARATE</cite> and
requires <cite>ARCH_HAVE_EXTRA_HEAPS</cite> to be set.</p>
<p>The internal SRAM is used as the main heap for kernel and
applications, as if there was no PSRAM configured. The
external PSRAM is configured as a separate user heap called
<cite>psram</cite> and can be used through the global variable
<cite>g_psramheap</cite> after including <cite>rp23xx_heaps.h</cite></p>
</section>
</section>
<section id="programming">
<h2>Programming<a class="headerlink" href="#programming" title="Permalink to this heading"></a></h2>
<section id="programming-using-bootsel">
<h3>Programming using BOOTSEL<a class="headerlink" href="#programming-using-bootsel" title="Permalink to this heading"></a></h3>
<p>Connect board to USB port while holding BOOTSEL.
The board will be detected as USB Mass Storage Device.
Then copy “nuttx.uf2” into the device.
(Same manner as the standard Pico SDK applications installation.)</p>
</section>
<section id="programming-with-picotool">
<h3>Programming with picotool<a class="headerlink" href="#programming-with-picotool" title="Permalink to this heading"></a></h3>
<p>You can use picotool to load the elf (or the uf2):</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>picotool load nuttx -t elf
</pre></div>
</div>
</section>
<section id="programming-using-swd-debugger">
<h3>Programming using SWD debugger<a class="headerlink" href="#programming-using-swd-debugger" title="Permalink to this heading"></a></h3>
<p>Most boards provide a serial (SWD) debug port.
The “nuttx” ELF file can be uploaded with an appropriate SDB programmer
module and companion software (openocd and gdb)</p>
</section>
</section>
<section id="running-nuttx">
<h2>Running NuttX<a class="headerlink" href="#running-nuttx" title="Permalink to this heading"></a></h2>
<p>Most builds provide access to the console via UART0. To access this
GPIO 0 and 1 pins must be connected to the device such as USB-serial converter.</p>
<p>The <cite>usbnsh</cite> configuration provides the console access by USB CDC/ACM serial
device. The console is available by using a terminal software on the USB host.</p>
</section>
<section id="supported-boards">
<h2>Supported Boards<a class="headerlink" href="#supported-boards" title="Permalink to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="boards/raspberrypi-pico-2/index.html">Raspberry Pi Pico 2</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/xiao-rp2350/index.html">Seeed Studio XIAO RP2350</a></li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../rp2040/boards/waveshare-rp2040-zero/index.html" class="btn btn-neutral float-left" title="Waveshare RP2040 Zero" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="boards/raspberrypi-pico-2/index.html" class="btn btn-neutral float-right" title="Raspberry Pi Pico 2" 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>