blob: 3570b379d5eebdaf7119bde4dbd239bc99118318 [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>Nordic nRF52 &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="Arduino Nano 33 BLE Sense Rev2" href="boards/arduino-nano-33ble-rev2/index.html" />
<link rel="prev" title="Nordic nRF52 IEEE 802.15.4" href="ieee802154.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="ieee802154.html">Nordic nRF52 IEEE 802.15.4</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Nordic nRF52</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#memory-map">Memory Map</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#nrf52832">nRF52832</a></li>
<li class="toctree-l5"><a class="reference internal" href="#nrf52840">nRF52840</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#clock-configuration">Clock Configuration</a></li>
<li class="toctree-l4"><a class="reference internal" href="#system-timer">System Timer</a></li>
<li class="toctree-l4"><a class="reference internal" href="#regulator-control">Regulator Control</a></li>
<li class="toctree-l4"><a class="reference internal" href="#peripheral-support">Peripheral Support</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#gpio-gpiote">GPIO/GPIOTE</a></li>
<li class="toctree-l5"><a class="reference internal" href="#adc">ADC</a></li>
<li class="toctree-l5"><a class="reference internal" href="#i2c">I2C</a></li>
<li class="toctree-l5"><a class="reference internal" href="#spi">SPI</a></li>
<li class="toctree-l5"><a class="reference internal" href="#uart">UART</a></li>
<li class="toctree-l5"><a class="reference internal" href="#ppi">PPI</a></li>
<li class="toctree-l5"><a class="reference internal" href="#pwm">PWM</a></li>
<li class="toctree-l5"><a class="reference internal" href="#qspi">QSPI</a></li>
<li class="toctree-l5"><a class="reference internal" href="#rng">RNG</a></li>
<li class="toctree-l5"><a class="reference internal" href="#timer">TIMER</a></li>
<li class="toctree-l5"><a class="reference internal" href="#rtc">RTC</a></li>
<li class="toctree-l5"><a class="reference internal" href="#usbd">USBD</a></li>
<li class="toctree-l5"><a class="reference internal" href="#wdt">WDT</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#ble-support">BLE Support</a></li>
<li class="toctree-l4"><a class="reference internal" href="#ieee-802-15-4-support">IEEE 802.15.4 Support</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/arduino-nano-33ble-rev2/index.html">Arduino Nano 33 BLE Sense Rev2</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/arduino-nano-33ble/index.html">Arduino Nano 33 BLE Sense</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf52-feather/intex.html">Adafruit NRF52 Feather</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf52832-dk/index.html">nRF52832-DK</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf52832-mdk/index.html">MakerDiary nRF52832-MDK</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf52832-sparkfun/index.html">Sparkfun nRF52832 Breakout</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf52840-dk/index.html">nRF52840-DK</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf52840-dongle/index.html">nRF52840-dongle</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/nrf9160-dk-nrf52/index.html">Nordic nRF9160 DK (nRF52840)</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/thingy52/index.html">Nordic Thingy:52</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/thingy91-nrf52/index.html">Nordic Thingy:91 (nRF52840)</a></li>
<li class="toctree-l5"><a class="reference internal" href="boards/xiao-nrf52840/index.html">Seeed Studio XIAO nRF52840</a></li>
<li class="toctree-l5"><a class="reference internal" href="ieee802154.html">Nordic nRF52 IEEE 802.15.4</a></li>
</ul>
</li>
</ul>
</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"><a class="reference internal" href="../rp23xx/index.html">Raspberry Pi rp2350</a></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">Nordic nRF52</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/platforms/arm/nrf52/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="nordic-nrf52">
<h1>Nordic nRF52<a class="headerlink" href="#nordic-nrf52" title="Permalink to this heading"></a></h1>
<p>The nRF52 series of chips from Nordic Semiconductor are based around an ARM Cortex-M4 core running
at 64 MHz and feature Bluetooth Low Energy (BLE) support.</p>
<section id="memory-map">
<h2>Memory Map<a class="headerlink" href="#memory-map" title="Permalink to this heading"></a></h2>
<section id="nrf52832">
<h3>nRF52832<a class="headerlink" href="#nrf52832" title="Permalink to this heading"></a></h3>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Block Name</p></th>
<th class="head"><p>Start Address</p></th>
<th class="head"><p>Length</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>FLASH</p></td>
<td><p>0x00000000</p></td>
<td><p>512K</p></td>
</tr>
<tr class="row-odd"><td><p>RAM</p></td>
<td><p>0x20000000</p></td>
<td><p>64K</p></td>
</tr>
</tbody>
</table>
</section>
<section id="nrf52840">
<h3>nRF52840<a class="headerlink" href="#nrf52840" title="Permalink to this heading"></a></h3>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Block Name</p></th>
<th class="head"><p>Start Address</p></th>
<th class="head"><p>Length</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>FLASH</p></td>
<td><p>0x00000000</p></td>
<td><p>1024K</p></td>
</tr>
<tr class="row-odd"><td><p>RAM</p></td>
<td><p>0x20000000</p></td>
<td><p>256K</p></td>
</tr>
</tbody>
</table>
</section>
</section>
<section id="clock-configuration">
<h2>Clock Configuration<a class="headerlink" href="#clock-configuration" title="Permalink to this heading"></a></h2>
<p>Clock settings are handled via Kconfig options, which determines whether to start external crystal
for the HFCLK, whether to start the LFCLK and which oscillator to use.</p>
</section>
<section id="system-timer">
<h2>System Timer<a class="headerlink" href="#system-timer" title="Permalink to this heading"></a></h2>
<p>The clock used for providing system time can be chosen via Kconfig. You can choose to use ARM SysTick
or use RTC in tickless mode.</p>
</section>
<section id="regulator-control">
<h2>Regulator Control<a class="headerlink" href="#regulator-control" title="Permalink to this heading"></a></h2>
<p>DC/DC regulator can be made to be enabled at boot via Kconfig.</p>
</section>
<section id="peripheral-support">
<h2>Peripheral Support<a class="headerlink" href="#peripheral-support" title="Permalink to this heading"></a></h2>
<p>The following list indicates peripherals 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>Support</p></th>
<th class="head"><p>Notes</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>GPIO</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>GPIOTE</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>I2S</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>MWU</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>NFCT</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>PDM</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>PPI</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>PWM</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>QDEC</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>QSPI</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>RADIO</p></td>
<td><p>Yes</p></td>
<td><p>BLE, IEEE 802.15.4</p></td>
</tr>
<tr class="row-odd"><td><p>RNG</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>RTC</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>SAADC</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>SPIM</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>SPIS</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>TEMP</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>TIMER</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>TWIM</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>TWIS</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>UART</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>UARTE</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>USBD</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>WDT</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
</tbody>
</table>
<p>Peripherals such as AAR, ACL, CCM, ECB are not directly used by NuttX since they
are part of BLE controller implementation (link).</p>
<section id="gpio-gpiote">
<h3>GPIO/GPIOTE<a class="headerlink" href="#gpio-gpiote" title="Permalink to this heading"></a></h3>
<p>Pins can be configured/operated using <code class="docutils literal notranslate"><span class="pre">nrf52_gpio_*</span></code> functions. Interrupts are
handled via the GPIOTE peripheral in one of two ways: via a GPIOTE channel or via
PORT events. The former allows for simultaneous rising/falling edge-sensitive interrupts
per-pin. However, as there are a limited number of channels (and sometimes these
are used by some drivers for specific tasks), it may not always be possible to use
this mechanism. The latter approach for pin interrupts is via the PORT event, determined
by pin state on a their corresponding GPIO port. This is related to the SENSE capability
of pins, which can only be set to either rising or falling edge sensing.</p>
<p>Depending on <code class="docutils literal notranslate"><span class="pre">CONFIG_NRF52_PER_PIN_INTERRUPTS</span></code> option, you can set a callback for
the PORT event itself or you can set a callback for a given pin. In the latter case
the driver scans for pins with DETECT bit high and calls the configured callback
automatically.</p>
<p>Finally, GPIOTE can also be used to configure a channel in <em>task mode</em>, which allows to
control pin state via tasks/events.</p>
</section>
<section id="adc">
<h3>ADC<a class="headerlink" href="#adc" title="Permalink to this heading"></a></h3>
<p>The SAADC peripheral is exposed via standard ADC driver. The lower-half of this driver
is initialized by calling <code class="xref c c-func docutils literal notranslate"><span class="pre">nrf52_adcinitialize()</span></code>.</p>
</section>
<section id="i2c">
<h3>I2C<a class="headerlink" href="#i2c" title="Permalink to this heading"></a></h3>
<p>I2C is supported both in polling and interrupt mode (via EasyDMA).</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The I2C peripheral does not support sending two transfers without sending
a START nor RSTART. For this reason, this is supported via an internal buffer where
messages will be first copied to and sent together.</p>
</div>
<p>The lower-half of I2C bus is initialized by <code class="xref c c-func docutils literal notranslate"><span class="pre">nrf52_i2cbus_initialize()</span></code>.
There’s also a software (bitbang) I2C implementation for nRF52. The lower-half is
initialized via <code class="xref c c-func docutils literal notranslate"><span class="pre">nrf52_i2c_bitbang_initialize()</span></code>.</p>
</section>
<section id="spi">
<h3>SPI<a class="headerlink" href="#spi" title="Permalink to this heading"></a></h3>
<p>SPI is supported both in polling and interrupt-based (via EasyDMA) mode. The latter
supports arbitrarily long transfers using Nordic’s list-mode EasyDMA (intermediate
transfers are currently still manually started).</p>
<p>It is possible to use SPI without either MOSI/MISO pin defined by simply not providing
the relevant <code class="docutils literal notranslate"><span class="pre">BOARD_SPI*_MISO/MOSI_PIN</span></code> definition.</p>
<p>This implementation support power management hooks, which will disable SPI peripheral when
entering either SLEEP or STANDBY modes and reconfigure it when going back to NORMAL mode.</p>
</section>
<section id="uart">
<h3>UART<a class="headerlink" href="#uart" title="Permalink to this heading"></a></h3>
<p>UART is implemented using polling. UARTE EasyDMA feature is not yet supported.
This may introduce a large number of interrupts which may be undesirable.</p>
</section>
<section id="ppi">
<h3>PPI<a class="headerlink" href="#ppi" title="Permalink to this heading"></a></h3>
<p>The PPI peripheral is supported via a specific API which lets you control the EVENT
and TASKs to trigger, both for individual and grouped channels.</p>
<p>When using channels, you should consider that some peripherals may use PPI internally
and some may be unavailable for further use. As a helper, if debug assertions are
enabled, calls to PPI API will check for a channel to actually be disabled when being
enabled and vice-versa. This may help catch collisions in PPI use.</p>
</section>
<section id="pwm">
<h3>PWM<a class="headerlink" href="#pwm" title="Permalink to this heading"></a></h3>
<p>PWM is supported via standard driver. This means that more advanced features such as
complex sequences or waveform modes are not yet supported.</p>
</section>
<section id="qspi">
<h3>QSPI<a class="headerlink" href="#qspi" title="Permalink to this heading"></a></h3>
<p>QSPI is supported both in interrupt-based (via EasyDMA) mode and is exposed
via standard QSPI interface.</p>
</section>
<section id="rng">
<h3>RNG<a class="headerlink" href="#rng" title="Permalink to this heading"></a></h3>
<p>The RNG peripheral will be used to register a random/urandom device automatically, when
enabled.</p>
</section>
<section id="timer">
<h3>TIMER<a class="headerlink" href="#timer" title="Permalink to this heading"></a></h3>
<p>The TIMER peripheral is exposed as standard timer.</p>
</section>
<section id="rtc">
<h3>RTC<a class="headerlink" href="#rtc" title="Permalink to this heading"></a></h3>
<p>The RTC peripheral is exposed as a standard timer, since it is really a low-power
timer, without any date handling capabilities.</p>
</section>
<section id="usbd">
<h3>USBD<a class="headerlink" href="#usbd" title="Permalink to this heading"></a></h3>
<p>The USBD peripheral is exposed via standard USBDEV interface.</p>
</section>
<section id="wdt">
<h3>WDT<a class="headerlink" href="#wdt" title="Permalink to this heading"></a></h3>
<p>The watchdog is supported via low-level API interface and also via standard watchdog
driver. The driver is written so as to handle an already running watchdog, which may
have been set by a bootloader.</p>
</section>
</section>
<section id="ble-support">
<h2>BLE Support<a class="headerlink" href="#ble-support" title="Permalink to this heading"></a></h2>
<p>BLE is supported in nRF52 using Nordic’s <a class="reference external" href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrfxlib/softdevice_controller/README.html">SoftDevice Controller</a>, using HCI interface. To enable BLE support
you need to call <code class="xref c c-func docutils literal notranslate"><span class="pre">nrf52_sdc_initialize()</span></code> on boot, which will initialize the BLE controller.</p>
<p>SDC support involves registering various high-priority zero-latency interrupts and thus requires
enabling BASEPRI and high-priority interrupt support. On supported boards, a sample <code class="docutils literal notranslate"><span class="pre">sdc</span></code> configuration
is provided with settings already set.</p>
<p>Note that in this case, some peripherals (mostly those related to BLE) will be unavailable. Some PPI
channels will also be ocuppied (<code class="docutils literal notranslate"><span class="pre">NRF52_PPI_NUM_CONFIGURABLE_CHANNELS</span></code> will be set accordingly in this case).</p>
</section>
<section id="ieee-802-15-4-support">
<h2>IEEE 802.15.4 Support<a class="headerlink" href="#ieee-802-15-4-support" title="Permalink to this heading"></a></h2>
<p>Details about IEEE 802.15.4 support for nRF52 can be found in <a class="reference internal" href="ieee802154.html"><span class="doc">Nordic nRF52 IEEE 802.15.4</span></a>.</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/arduino-nano-33ble-rev2/index.html">Arduino Nano 33 BLE Sense Rev2</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/arduino-nano-33ble/index.html">Arduino Nano 33 BLE Sense</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf52-feather/intex.html">Adafruit NRF52 Feather</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf52832-dk/index.html">nRF52832-DK</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf52832-mdk/index.html">MakerDiary nRF52832-MDK</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf52832-sparkfun/index.html">Sparkfun nRF52832 Breakout</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf52840-dk/index.html">nRF52840-DK</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf52840-dongle/index.html">nRF52840-dongle</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/nrf9160-dk-nrf52/index.html">Nordic nRF9160 DK (nRF52840)</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/thingy52/index.html">Nordic Thingy:52</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/thingy91-nrf52/index.html">Nordic Thingy:91 (nRF52840)</a></li>
<li class="toctree-l1"><a class="reference internal" href="boards/xiao-nrf52840/index.html">Seeed Studio XIAO nRF52840</a></li>
<li class="toctree-l1"><a class="reference internal" href="ieee802154.html">Nordic nRF52 IEEE 802.15.4</a></li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="ieee802154.html" class="btn btn-neutral float-left" title="Nordic nRF52 IEEE 802.15.4" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="boards/arduino-nano-33ble-rev2/index.html" class="btn btn-neutral float-right" title="Arduino Nano 33 BLE Sense Rev2" 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>