| <!-- |
| 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 — 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 > 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>© Copyright 2023, The Apache Software Foundation.</p> |
| </div> |
| |
| |
| |
| </footer> |
| </div> |
| </div> |
| </section> |
| </div> |
| <script> |
| jQuery(function () { |
| SphinxRtdTheme.Navigation.enable(true); |
| }); |
| </script> |
| |
| </body> |
| </html> |