blob: 05760463d3c47ff76d82b7897db1a6858331ada6 [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 clock for controller &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="Configure device address" href="ble_addr.html"/>
<link rel="prev" title="NimBLE Setup" href="ble_setup_intro.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 clock for controller
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-nimble/edit/master/docs/ble_setup/ble_lp_clock.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" selected="selected" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" >
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 current"><a class="current reference internal" href="#">Configure clock for controller</a></li>
<li class="toctree-l3"><a class="reference internal" href="ble_addr.html">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.10.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-clock-for-controller">
<h1>Configure clock for controller<a class="headerlink" href="#configure-clock-for-controller" title="Permalink to this headline"></a></h1>
<p>The NimBLE stack uses OS cputime for scheduling various events inside
controller. Since the code of controller is optimized to work with 32768
Hz clock, the OS cputime has to be configured accordingly.</p>
<p>To make things easier, controller package (<code class="docutils literal notranslate"><span class="pre">net/nimble/controller</span></code>)
defines new system configuration setting <code class="docutils literal notranslate"><span class="pre">BLE_LP_CLOCK</span></code> as sets it to
<code class="docutils literal notranslate"><span class="pre">1</span></code> so other packages can be configured if necessary. The next section
describes configuration required for controller to work properly.</p>
<div class="section" id="system-configuration">
<h2>System configuration<a class="headerlink" href="#system-configuration" title="Permalink to this headline"></a></h2>
<p><strong>Note:</strong> All BSPs based on nRF5x have below settings automatically
applied when <code class="docutils literal notranslate"><span class="pre">BLE_LP_CLOCK</span></code> is set, there is no need to configure this
in application.</p>
<p>The following things need to be configured for NimBLE controller to work
properly:</p>
<ul class="simple">
<li><p>OS cputime frequency shall be set to <code class="docutils literal notranslate"><span class="pre">32768</span></code></p></li>
<li><p>OS cputime timer source shall be set to 32768 Hz clock source</p></li>
<li><p>Default 1 MHz clock source can be disabled if not used by application</p></li>
<li><p>32768 Hz clock source shall be enabled</p></li>
<li><p>Crystal settling time shall be set to non-zero value (see below)</p></li>
</ul>
<p>For example, on nRF52 platform timer 5 can be used as source for 32768
Hz clock. Also, timer 0 can be disabled since this is the default source
for OS cputime clock and is no longer used. The configuration will look
as below:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>syscfg.vals:
OS_CPUTIME_FREQ: 32768
OS_CPUTIME_TIMER_NUM: 5
TIMER_0: 0
TIMER_5: 1
BLE_XTAL_SETTLE_TIME: 1500
</pre></div>
</div>
<p>On nRF51 platform the only difference is to use timer 3 instead of timer
5.</p>
<p>On platforms without 32768 Hz crystal available it usually can be
synthesized by setting <code class="docutils literal notranslate"><span class="pre">XTAL_32768_SYNTH</span></code> to <code class="docutils literal notranslate"><span class="pre">1</span></code> - this is also
already configured in existing BSPs.</p>
</div>
<div class="section" id="crystal-settle-time-configuration">
<h2>Crystal settle time configuration<a class="headerlink" href="#crystal-settle-time-configuration" title="Permalink to this headline"></a></h2>
<p>The configuration variable <code class="docutils literal notranslate"><span class="pre">BLE_XTAL_SETTLE_TIME</span></code> is used by the
controller to turn on the necessary clock source(s) for the radio and
associated peripherals prior to Bluetooth events (advertising, scanning,
connections, etc). For the nRF5x platforms, the HFXO needs to be turned
on prior to using the radio and the <code class="docutils literal notranslate"><span class="pre">BLE_XTAL_SETTLE_TIME</span></code> must be set
to accommodate this time. The amount of time required is board
dependent, so users must characterize their hardware and set
<code class="docutils literal notranslate"><span class="pre">BLE_XTAL_SETTLE_TIME</span></code> accordingly. The current value of 1500
microseconds is a fairly long time and was intended to work for most, if
not all, platforms.</p>
<p>Note that changing this time will impact battery life with the amount
depending on the application. The HFXO draws a fairly large amount of
current when running so keeping this time as small as possible will
reduce overall current drain.</p>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="ble_addr.html" class="btn btn-neutral float-right" title="Configure device address" accesskey="n">Next: Configure device address <span class="fa fa-arrow-circle-right"></span></a>
<a href="ble_setup_intro.html" class="btn btn-neutral" title="NimBLE Setup" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: NimBLE Setup</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>