blob: a4bfcd6fc324d43bb78342a222168b1148ba77d1 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Configure device address &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../genindex.html"/>
<link rel="search" title="Search" href="../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../index.html"/>
<link rel="up" title="NimBLE Setup" href="ble_setup_intro.html"/>
<link rel="next" title="Respond to sync and reset events" href="ble_sync_cb.html"/>
<link rel="prev" title="Configure clock for controller" href="ble_lp_clock.html"/>
<script src="../../_static/js/modernizr.min.js"></script>
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../_static/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li class="important">
<a href="/quick-start/">Quick Start</a>
</li>
<li>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../index.html">BLE User Guide</a> /
<a href="ble_setup_intro.html">NimBLE Setup</a> /
Configure device address
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-nimble/edit/master/docs/ble_setup/ble_addr.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_11_0" >
Version: 1.11.0
</option>
<option value="/v1_10_0" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" selected="selected" >
Version: 1.8.0
</option>
<option value="/v1_7_0" >
Version: 1.7.0
</option>
<option value="/v1_6_0" >
Version: 1.6.0
</option>
<option value="/v1_5_0" >
Version: 1.5.0
</option>
<option value="/v1_4_0" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">BLE User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../ble_sec.html">NimBLE Security</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="ble_setup_intro.html">NimBLE Setup</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="ble_lp_clock.html">Configure clock for controller</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Configure device address</a></li>
<li class="toctree-l3"><a class="reference internal" href="ble_sync_cb.html">Respond to <em>sync</em> and <em>reset</em> events</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../ble_hs/ble_hs.html">NimBLE Host</a></li>
<li class="toctree-l2"><a class="reference internal" href="../btshell/btshell_api.html">btshell Usage API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mesh/index.html">Bluetooth Mesh</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.8.0 is not the most recent version of the
Apache Mynewt documentation. Click <a href="/latest">here</a> to
read the latest version.
</p>
</div>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="configure-device-address">
<h1>Configure device address<a class="headerlink" href="#configure-device-address" title="Permalink to this headline"></a></h1>
<p>A BLE device needs an address to do just about anything. For information
on the various types of Bluetooth addresses, see the <cite>NimBLE Host
Identity Reference :doc:`&lt;../ble_hs/ble_hs_id/ble_hs_id&gt;</cite>.</p>
<p>There are several methods for assigning an address to a NimBLE device.
The available options are documented below:</p>
<div class="section" id="method-1-configure-nrf-hardware-with-a-public-address">
<h2>Method 1: Configure nRF hardware with a public address<a class="headerlink" href="#method-1-configure-nrf-hardware-with-a-public-address" title="Permalink to this headline"></a></h2>
<p>When Mynewt is running on a Nordic nRF platform, the NimBLE controller
will attempt to read a public address out of the board’s FICR or UICR
registers. The controller uses the following logic while trying to read
an address from hardware:</p>
<ol class="arabic simple">
<li><p>If the <em>DEVICEADDRTYPE</em> FICR register is written, read the address
programmed in the <em>DEVICEADDR[0]</em> and <em>DEVICEADDR[1]</em> FICR registers.</p></li>
<li><p>Else if the upper 16 bits of the <em>CUSTOMER[1]</em> UICR register are 0,
read the address programmed in the <em>CUSTOMER[0]</em> and <em>CUSTOMER[1]</em>
UCI registers.</p></li>
<li><p>Else, no address available.</p></li>
</ol>
</div>
<div class="section" id="method-2-hardcode-a-public-address-in-the-mynewt-target">
<h2>Method 2: Hardcode a public address in the Mynewt target<a class="headerlink" href="#method-2-hardcode-a-public-address-in-the-mynewt-target" title="Permalink to this headline"></a></h2>
<p>The NimBLE controller package exports a
<a class="reference internal" href="../../os/modules/sysinitconfig/sysinitconfig.html"><span class="doc">syscfg</span></a> setting
called <code class="docutils literal notranslate"><span class="pre">BLE_PUBLIC_DEV_ADDR</span></code>. This setting can be overridden at the
application or target level to configure a public Bluetooth address. For
example, a target can assign the public address <em>11:22:33:44:55:66</em> as
follows:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>syscfg.vals:
BLE_PUBLIC_DEV_ADDR: &#39;(uint8_t[6]){0x66, 0x55, 0x44, 0x33, 0x22, 0x11}&#39;
</pre></div>
</div>
<p>This setting takes the form of a C expression. Specifically, the value
is a designated initializer expressing a six-byte array. Also note that
the bytes are reversed, as an array is inherently little-endian, while
addresses are generally expressed in big-endian.</p>
<p>Note: this method takes precedence over method 1. Whatever is written to
the <code class="docutils literal notranslate"><span class="pre">BLE_PUBLIC_DEV_ADDR</span></code> setting is the address that gets used.</p>
</div>
<div class="section" id="method-3-configure-a-random-address-at-runtime">
<h2>Method 3: Configure a random address at runtime<a class="headerlink" href="#method-3-configure-a-random-address-at-runtime" title="Permalink to this headline"></a></h2>
<p>Random addresses get configured through the NimBLE host. The following
two functions are used in random address configuration:</p>
<ul class="simple">
<li><p><span class="xref std std-doc">ble_hs_id_gen_rnd</span>:
Generates a new random address.</p></li>
<li><p><span class="xref std std-doc">ble_hs_id_set_rnd</span>:
Sets the device’s random address.</p></li>
</ul>
<p>For an example of how this is done, see the <span class="xref std std-doc">&lt;../../../os/tutorials/ibeacon&gt;</span>.</p>
<p><em>Note:</em> A NimBLE device can be configured with multiple addresses; at
most one of each address type.</p>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="ble_sync_cb.html" class="btn btn-neutral float-right" title="Respond to sync and reset events" accesskey="n">Next: Respond to sync and reset events <span class="fa fa-arrow-circle-right"></span></a>
<a href="ble_lp_clock.html" class="btn btn-neutral" title="Configure clock for controller" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Configure clock for controller</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt project logo are either
registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
</small>
<a href="">
<img src="../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../_static/js/main.js"></script>
</body>
</html>