blob: 511f953b5b08abcebcc8b534ac2cb2ff8540e5a4 [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>Bouffalo Lab BL602 &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/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/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="bl602evb" href="boards/bl602evb/index.html" />
<link rel="prev" title="RISC-V" href="../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"><a class="reference internal" href="../../arm/index.html">ARM</a></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 current"><a class="reference internal" href="../index.html">RISC-V</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Bouffalo Lab BL602</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#bl602-toolchain">BL602 Toolchain</a></li>
<li class="toctree-l4"><a class="reference internal" href="#building">Building</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#nsh">nsh</a></li>
<li class="toctree-l5"><a class="reference internal" href="#wifi">wifi</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#flashing">Flashing</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#config-download">Config download</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#debugging-with-openocd">Debugging with OpenOCD</a></li>
<li class="toctree-l4"><a class="reference internal" href="#bl602-peripheral-support">BL602 Peripheral 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/bl602evb/index.html">bl602evb</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../bl808/index.html">Bouffalo Lab BL808</a></li>
<li class="toctree-l3"><a class="reference internal" href="../c906/index.html">THEAD C906</a></li>
<li class="toctree-l3"><a class="reference internal" href="../esp32c3-legacy/index.html">Espressif ESP32-C3 (Legacy)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../esp32c3/index.html">Espressif ESP32-C3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../esp32c6/index.html">Espressif ESP32-C6</a></li>
<li class="toctree-l3"><a class="reference internal" href="../esp32h2/index.html">Espressif ESP32-H2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../fe310/index.html">SiFive FE310</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hpm6000/index.html">Hpmicro HPM6000</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hpm6750/index.html">Hpmicro HPM6750</a></li>
<li class="toctree-l3"><a class="reference internal" href="../jh7110/index.html">StarFive JH7110</a></li>
<li class="toctree-l3"><a class="reference internal" href="../k210/index.html">Kendryte K210</a></li>
<li class="toctree-l3"><a class="reference internal" href="../k230/index.html">Kendryte K230</a></li>
<li class="toctree-l3"><a class="reference internal" href="../litex/index.html">Enjoy Digital LiteX FPGA’s</a></li>
<li class="toctree-l3"><a class="reference internal" href="../mpfs/index.html">Microchip PolarFire® SoC FPGA’s (MPFS)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../qemu-rv/index.html">QEMU Generic RV32/RV64</a></li>
<li class="toctree-l3"><a class="reference internal" href="../rv32m1/index.html">NXP RV32M1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sg2000/index.html">SOPHGO SG2000</a></li>
</ul>
</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="../../../guides/index.html">Guides</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>
</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">RISC-V</a></li>
<li class="breadcrumb-item active">Bouffalo Lab BL602</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/platforms/risc-v/bl602/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="bouffalo-lab-bl602">
<h1>Bouffalo Lab BL602<a class="headerlink" href="#bouffalo-lab-bl602" title="Permalink to this heading"></a></h1>
<p>BL602/BL604 is Wi-Fi + BLE combo chipset for ultra-low-cost and
low-power application. Wireless subsystem contains 2.4G radio, Wi-Fi
802.11b/g/n and BLE 5.0 baseband/MAC designs. Microcontroller subsystem
contains a low-power 32-bit RISC CPU, high-speed cache and memories.
Power Management Unit controls low-power modes. Moreover, variety of
security features are supported.</p>
<ul class="simple">
<li><p>32-bit RISC CPU with FPU (floating point unit)</p></li>
<li><p>276KB RAM</p></li>
<li><p>128KB ROM</p></li>
<li><p>1Kb eFuse</p></li>
<li><p>Embedded Flash (Optional)</p></li>
<li><p>Four DMA channels</p></li>
</ul>
<section id="bl602-toolchain">
<h2>BL602 Toolchain<a class="headerlink" href="#bl602-toolchain" title="Permalink to this heading"></a></h2>
<p>Toolchain can be obtained from
<a class="reference external" href="https://github.com/bouffalolab/bl_iot_sdk/tree/master/toolchain/riscv/Linux">bl_iot_sdk/toolchain/riscv</a></p>
<p>In addition, SiFive’s toolchain can be downloaded from:</p>
<p><a class="reference external" href="https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz">https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz</a></p>
</section>
<section id="building">
<h2>Building<a class="headerlink" href="#building" title="Permalink to this heading"></a></h2>
<section id="nsh">
<h3>nsh<a class="headerlink" href="#nsh" title="Permalink to this heading"></a></h3>
<p>First make sure the <code class="docutils literal notranslate"><span class="pre">riscv-gnu-toolchain</span></code> has been installed
correctly.</p>
<p>Configure the NuttX project: <code class="docutils literal notranslate"><span class="pre">./tools/configure.sh</span> <span class="pre">bl602evb:nsh</span></code>. Run
<code class="docutils literal notranslate"><span class="pre">make</span></code> to build the project.</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>root@pc:~/nuttx$<span class="w"> </span>tools/configure.sh<span class="w"> </span>bl602evb:nsh
root@pc:~/nuttx$<span class="w"> </span>make
</pre></div>
</div>
</section>
<section id="wifi">
<h3>wifi<a class="headerlink" href="#wifi" title="Permalink to this heading"></a></h3>
<p>Configure the NuttX project: <code class="docutils literal notranslate"><span class="pre">./tools/configure.sh</span> <span class="pre">bl602evb:wifi</span></code>. Run
<code class="docutils literal notranslate"><span class="pre">make</span></code> to build the project.</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>root@pc:~/nuttx$<span class="w"> </span>tools/configure.sh<span class="w"> </span>bl602evb:wifi
root@pc:~/nuttx$<span class="w"> </span>make
</pre></div>
</div>
</section>
</section>
<section id="flashing">
<h2>Flashing<a class="headerlink" href="#flashing" title="Permalink to this heading"></a></h2>
<p>Dev Cube is a chip integrated development tool provided by Bouffalolab,
which includes three functions: IOT program download, MCU program
download and RF performance test.</p>
<p>Dev Cube provides users with the function of downloading programs, and
supports the configuration of parameters such as clock and flash. Users
can decide whether to encrypt the program, add signatures, and replace
the information file, user resource file, partition table and other
functional configurations according to their own needs when the program
is started.</p>
<p>Users can get the latest version of Dev Cube through <a class="reference external" href="https://dev.bouffalolab.com/download">Bouffalo Lab
Dev</a>.</p>
<section id="config-download">
<h3>Config download<a class="headerlink" href="#config-download" title="Permalink to this heading"></a></h3>
<p><strong>Configuration parameters include:</strong></p>
<ul class="simple">
<li><p><strong>Interface</strong>: Select the communication interface for flashing, here
select Uart to download</p></li>
<li><p><strong>COM Port</strong>: When select UART for downloading, select the COM port
number connected to the chip, and you can click the Refresh button to
refresh the COM port</p></li>
<li><p><strong>Uart Rate</strong>: When select UART for downloading, fill in the baud
rate. The recommended download baud rate is 2MHz,</p></li>
<li><p><strong>Xtal</strong>: Select the crystal oscillator frequency when downloading.
If the board does not have a soldered crystal oscillator, the
internal RC32M clock source should be selected here,default is 40M</p></li>
<li><p><strong>Chip Erase</strong>: default setting is False</p></li>
</ul>
<p><strong>Configuration parameters include:</strong></p>
<ul>
<li><p><strong>Factory Params</strong>: Use the dts file in the device_tree folder of the
corresponding chip model in the Dev Cube directory. The default
selection is 40M.</p></li>
<li><p><strong>Partition Table</strong>: Use the partition table in the partition folder
of the corresponding chip model in the Dev Cube directory, and 2M
files are selected by default for BL602</p>
<p><strong>For the nuttx, BL602 has a dedicated partition file. It is placed
in</strong> <code class="docutils literal notranslate"><span class="pre">nuttx/tools/bl602</span></code></p>
</li>
<li><p><strong>Boot2 Bin</strong>: It is the first Flash program that runs after the
system is started. It is responsible for establishing the BLSP
security environment and guiding the main program to run. It uses the
Boot2 file in the builtin_imgs folder of the corresponding chip model
in the Dev Cube directory.</p></li>
<li><p><strong>Firmware Bin</strong>: Bin file path generated by user compilation</p></li>
<li><p><strong>Media/Romfs</strong>: Choose one of Media and Romfs. If you check media,
you should provide a file. If you check Romfs, a folder should be
provided.</p></li>
<li><p><strong>MFG Bin</strong>: Select MFG file</p></li>
<li><p><strong>AES-Encrypt</strong>: If you use the encryption function, you need to
select the AES-Encrypt option, and enter the Key and IV used for
encryption. Hexadecimal characters should be entered, and a Byte is
composed of two characters, so the Key and IV require 32 characters
to be input respectively. It should be noted that the last 8
characters of the IV (ie 4Bytes) must be all 0</p></li>
<li><p><strong>Single Download Config</strong>: you can download a single file. Fill in
the starting address of the download, starting with 0x</p></li>
</ul>
<p>For details, please refer to <a class="reference external" href="https://bouffalolab.github.io/bl_iot_sdk/Developer_Environment/BLFlashEnv/BLFlashEnv.html#iot">BLFlashEnv — BL602 IoT
SDK</a></p>
</section>
</section>
<section id="debugging-with-openocd">
<h2>Debugging with OpenOCD<a class="headerlink" href="#debugging-with-openocd" title="Permalink to this heading"></a></h2>
<p>Download OpenOCD <a class="reference external" href="https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv-openocd-0.10.0-2020.12.1-x86_64-linux-ubuntu14.tar.gz">RISC‑V
OpenOCD</a>.</p>
<p>Start OpenOCD:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>root@pc:~$<span class="w"> </span>openocd<span class="w"> </span>-f<span class="w"> </span>~/bl_iot_sdk/tools/debug/if_bflb_link.cfg<span class="w"> </span>-f<span class="w"> </span>~/bl_iot_sdk/tools/debug/tgt_602_xip.cfg
</pre></div>
</div>
<p>Start GDB:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>root@pc:~$<span class="w"> </span>riscv64-unknown-elf-gdb<span class="w"> </span>~/nuttx/nuttx<span class="w"> </span>-x<span class="w"> </span>~/bl_iot_sdk/tools/debug/602.init
</pre></div>
</div>
<p>Connect OpenOCD:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="o">(</span>gdb<span class="o">)</span><span class="w"> </span>target<span class="w"> </span>remote<span class="w"> </span>:3333
<span class="o">(</span>gdb<span class="o">)</span><span class="w"> </span>c
</pre></div>
</div>
</section>
<section id="bl602-peripheral-support">
<h2>BL602 Peripheral Support<a class="headerlink" href="#bl602-peripheral-support" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>One SDIO 2.0 slave</p></li>
<li><p>One SPI master/slave</p></li>
<li><p>Two UART</p></li>
<li><p>One I2C master</p></li>
<li><p>Five PWM channels</p></li>
<li><p>10-bit general DAC</p></li>
<li><p>12-bit general ADC</p></li>
<li><p>Two general analog comparators (ACOMP)</p></li>
<li><p>PIR (Passive Infra-Red) detection</p></li>
<li><p>IR remote HW accelerator</p></li>
<li><p>16 or 23 GPIOs</p></li>
</ul>
<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>UART</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>SPI</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>I2C</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>DMA</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>Wifi</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>SPI FLASH</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>Timers</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>Watchdog</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>RTC</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>RNG</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>AES</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>eFuse</p></td>
<td><p>Yes</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>ADC</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>Bluetooth</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>LED_PWM</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>SHA</p></td>
<td><p>No</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>RSA</p></td>
<td><p>No</p></td>
<td></td>
</tr>
</tbody>
</table>
</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/bl602evb/index.html">bl602evb</a></li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../index.html" class="btn btn-neutral float-left" title="RISC-V" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="boards/bl602evb/index.html" class="btn btn-neutral float-right" title="bl602evb" 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>