240 lines
18 KiB
HTML
240 lines
18 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.9.6"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<!-- BEGIN opengraph metadata -->
|
|
<meta property="og:title" content="Doxygen Awesome" />
|
|
<meta property="og:image" content="https://repository-images.githubusercontent.com/348492097/4f16df80-88fb-11eb-9d31-4015ff22c452" />
|
|
<meta property="og:description" content="Custom CSS theme for doxygen html-documentation with lots of customization parameters." />
|
|
<meta property="og:url" content="https://jothepro.github.io/doxygen-awesome-css/" />
|
|
<!-- END opengraph metadata -->
|
|
<!-- BEGIN twitter metadata -->
|
|
<meta name="twitter:image:src" content="https://repository-images.githubusercontent.com/348492097/4f16df80-88fb-11eb-9d31-4015ff22c452" />
|
|
<meta name="twitter:title" content="Doxygen Awesome" />
|
|
<meta name="twitter:description" content="Custom CSS theme for doxygen html-documentation with lots of customization parameters." />
|
|
<!-- END twitter metadata -->
|
|
<title>User Guide: FAQ</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<link rel="icon" type="image/svg+xml" href="logo.drawio.svg"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
|
|
<script type="text/javascript" src="doxygen-awesome-fragment-copy-button.js"></script>
|
|
<script type="text/javascript" src="doxygen-awesome-paragraph-link.js"></script>
|
|
<script type="text/javascript" src="doxygen-awesome-interactive-toc.js"></script>
|
|
<script type="text/javascript" src="doxygen-awesome-tabs.js"></script>
|
|
<script type="text/javascript" src="toggle-alternative-theme.js"></script>
|
|
<script type="text/javascript">
|
|
DoxygenAwesomeFragmentCopyButton.init()
|
|
DoxygenAwesomeDarkModeToggle.init()
|
|
DoxygenAwesomeParagraphLink.init()
|
|
DoxygenAwesomeInteractiveToc.init()
|
|
DoxygenAwesomeTabs.init()
|
|
</script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
|
<link href="custom.css" rel="stylesheet" type="text/css"/>
|
|
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
|
|
<link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
|
|
<link href="custom-alternative.css" rel="stylesheet" type="text/css"/>
|
|
</head>
|
|
<body>
|
|
<!-- https://tholman.com/github-corners/
|
|
<a href="https://github.com/jothepro/doxygen-awesome-css" class="github-corner" title="View source on GitHub" target="_blank">
|
|
<svg viewBox="0 0 250 250" width="40" height="40" style="position: absolute; top: 0; border: 0; right: 0; z-index: 99;" aria-hidden="true">
|
|
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
|
|
-->
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">User Guide
|
|
</div>
|
|
<div id="projectbrief">Bluetooth Low Energy 5.3</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.9.6 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(document).ready(function(){initNavTree('FAQ.html',''); initResizable(); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div><div class="header">
|
|
<div class="headertitle"><div class="title">FAQ </div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><p><a class="anchor" id="md_docs_doxygen_om6626_user_guides_faq"></a></p>
|
|
<h2><a class="anchor" id="autotoc_md60"></a>
|
|
1. What are the BT QDIDs of OM66XX ?</h2>
|
|
<ul>
|
|
<li><a href="https://qualification.bluetooth.com/ListingDetails/146015">182322 - End Product</a></li>
|
|
<li><a href="https://qualification.bluetooth.com/ListingDetails/87996">133480 - Component (Tested)</a></li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md61"></a>
|
|
2. Can I use any of the Timers in sleep mode?</h2>
|
|
<p>Please reference <a class="el" href="group__EVT__TIMER.html#gaa6fa3e4b64c97f391c61dbb3ba40a359">evt_timer_set()</a>, it is a software timer and base on 32k low power clock (pmu timer).</p>
|
|
<h2><a class="anchor" id="autotoc_md62"></a>
|
|
3. How many sleep modes are available in OM6XXX and how to configure?</h2>
|
|
<p>Please reference <a class="el" href="POWER_MANAGE.html">here</a></p>
|
|
<h2><a class="anchor" id="autotoc_md63"></a>
|
|
4. Can I use external 32 kHz crystal ?</h2>
|
|
<p>Yes, OM6XXX support 32768Hz crystal. Use function <a class="el" href="group__PMU.html#ga246f3f61bc55562987771d3b52e2a970">drv_pmu_select_32k()</a> to enable it.</p>
|
|
<h2><a class="anchor" id="autotoc_md64"></a>
|
|
5. How to speed up the execution of my code ?</h2>
|
|
<p>You can try following ways:</p><ul>
|
|
<li>Use faster system and CPU clock, but this leads higher power consumption. (Refrence <a class="el" href="group__PMU.html#ga72023cb355be632499f72c5ed8b207e3">drv_pmu_xtal32m_x2_startup</a> and <a class="el" href="group__RCC.html#ga0a69a21da775ad8f903bd290a385c3ba">drv_rcc_clock_set</a> (RCC_CLK_CPU, 1))</li>
|
|
<li>Do not use MicroLIB of KEIL.</li>
|
|
<li>Put critical code into SRAM. (Use <code>__RAM_CODE</code> or <code>__RAM_RODATA</code> macro to critical function, or put the critical file(.o) into <code>ER_RAM_CODE</code> section in KEIL scatter file).</li>
|
|
<li>Use higher compiler optimization level.</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md65"></a>
|
|
6. How can I reduce system power consumption ?</h2>
|
|
<p>You can try following ways:</p><ul>
|
|
<li>Try putting some frequently executed code into RAM (Use <code>__RAM_CODE</code> or <code>__RAM_RODATA</code> macro).</li>
|
|
<li>Try putting some of the system presets RAM_CODE into RAM. Modify <code>linker_flash.sct</code> file (in KEIL): <div class="fragment"><div class="line"> ER_RAM_CODE +0 ALIGN 32 { ER_RAM_CODE +0 ALIGN 32 {</div>
|
|
<div class="line">from *.o(RAM_CODE) to *.o(RAM_CODE*)</div>
|
|
<div class="line"> *.o(RAM_RODATA) *.o(RAM_RODATA*)</div>
|
|
<div class="line"> } }</div>
|
|
</div><!-- fragment --></li>
|
|
<li>The <a class="el" href="group__CACHE.html#gac5d48d55149c1b57269e7ad654a4df62" title="drv icache power off in sleep">drv_icache_powerdown_in_sleep_enable()</a> function can power down the ICACHE during sleep (default is not power down), but this will cause all the contents of the ICACHE to be lost during sleep, so that it needs to be reloaded when waking up.</li>
|
|
<li>The <a class="el" href="group__PMU.html#ga7da53342cd39c34d05e648f0d818fd3f" title="pmu ram power on">drv_pmu_ram_power_on()</a> function can power down unused RAM block.</li>
|
|
</ul>
|
|
<h2><a class="anchor" id="autotoc_md66"></a>
|
|
7. How to check what is preventing the chip from going to sleep ?</h2>
|
|
<p>The sleep state is completely controlled by software. The <a class="el" href="POWER_MANAGE.html">PM</a> component of the software is how the chip goes to sleep. The <code>PM</code> source code is located at <code>components/pm/pm.c</code>. The following code snippet is from <code>pm.c</code>:</p>
|
|
<div class="fragment"><div class="line"><a class="code hl_enumeration" href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a> <a class="code hl_function" href="group__PM.html#ga8c2ccb7b6d7d850cd3717f1522cce2cb">pm_sleep_check</a>(<span class="keywordtype">void</span>)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <a class="code hl_enumeration" href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a> status;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> status = pm_sleep_state_check(); <span class="comment">// Check Point 1</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">if</span> (status > <a class="code hl_enumvalue" href="group__PM.html#ggac4d27cf0310d8173f6f5d1e71ddb0abcae599a3260cfbf6df7d4873e1c0c21900">PM_STATUS_IDLE</a>) {</div>
|
|
<div class="line"> status = pm_sleep_checker_check();</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">return</span> status;</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">static</span> <a class="code hl_enumeration" href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a> pm_sleep_checker_check(<span class="keywordtype">void</span>)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordtype">int</span> i;</div>
|
|
<div class="line"> <a class="code hl_enumeration" href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a> status = <a class="code hl_function" href="group__PMU.html#ga82f3298af14a6b614e6920035bad727c">drv_pmu_sleep_status</a>(); <span class="comment">// Check Point 2</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">if</span> (status <= <a class="code hl_enumvalue" href="group__PM.html#ggac4d27cf0310d8173f6f5d1e71ddb0abcae599a3260cfbf6df7d4873e1c0c21900">PM_STATUS_IDLE</a>)</div>
|
|
<div class="line"> <span class="keywordflow">return</span> status;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">for</span>(i = 0; i < PM_SLEEP_CHECKER_NUM; ++i) {</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(pm_env.checker[i].callback != NULL) {</div>
|
|
<div class="line"> <a class="code hl_enumeration" href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a> checker_status = pm_env.checker[i].callback(); <span class="comment">// Check Point 3</span></div>
|
|
<div class="line"> status = <a class="code hl_define" href="group__OM__UTILS.html#gaa3af553d65b1d40eab19d88ee01a7d17">OM_MIN</a>(status, checker_status);</div>
|
|
<div class="line"> <span class="keywordflow">if</span> (status <= <a class="code hl_enumvalue" href="group__PM.html#ggac4d27cf0310d8173f6f5d1e71ddb0abcae599a3260cfbf6df7d4873e1c0c21900">PM_STATUS_IDLE</a>) {</div>
|
|
<div class="line"> <span class="keywordflow">break</span>;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">return</span> status;</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">void</span> <a class="code hl_function" href="group__PM.html#gaca065483cfe789215a4d194eda3fc931">pm_power_manage</a>(<span class="keywordtype">void</span>)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <a class="code hl_enumeration" href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a> status;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> status = <a class="code hl_function" href="group__PM.html#ga8c2ccb7b6d7d850cd3717f1522cce2cb">pm_sleep_check</a>();</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">if</span> (!pm_env.sleep_enable) {</div>
|
|
<div class="line"> status = <a class="code hl_define" href="group__OM__UTILS.html#gaa3af553d65b1d40eab19d88ee01a7d17">OM_MIN</a>(<a class="code hl_enumvalue" href="group__PM.html#ggac4d27cf0310d8173f6f5d1e71ddb0abcae599a3260cfbf6df7d4873e1c0c21900">PM_STATUS_IDLE</a>, status); <span class="comment">// Check Point 4</span></div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <a class="code hl_function" href="group__PM.html#gafcf762ea13dde196e7918b394a4c6e41">pm_sleep</a>(status);</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="agroup__OM__UTILS_html_gaa3af553d65b1d40eab19d88ee01a7d17"><div class="ttname"><a href="group__OM__UTILS.html#gaa3af553d65b1d40eab19d88ee01a7d17">OM_MIN</a></div><div class="ttdeci">#define OM_MIN(x, y)</div><div class="ttdoc">MIN.</div><div class="ttdef"><b>Definition:</b> om_utils.h:66</div></div>
|
|
<div class="ttc" id="agroup__PMU_html_ga82f3298af14a6b614e6920035bad727c"><div class="ttname"><a href="group__PMU.html#ga82f3298af14a6b614e6920035bad727c">drv_pmu_sleep_status</a></div><div class="ttdeci">pm_status_t drv_pmu_sleep_status(void)</div><div class="ttdoc">what power status should be entried</div></div>
|
|
<div class="ttc" id="agroup__PM_html_ga8c2ccb7b6d7d850cd3717f1522cce2cb"><div class="ttname"><a href="group__PM.html#ga8c2ccb7b6d7d850cd3717f1522cce2cb">pm_sleep_check</a></div><div class="ttdeci">pm_status_t pm_sleep_check(void)</div><div class="ttdoc">pm sleep check</div></div>
|
|
<div class="ttc" id="agroup__PM_html_gac4d27cf0310d8173f6f5d1e71ddb0abc"><div class="ttname"><a href="group__PM.html#gac4d27cf0310d8173f6f5d1e71ddb0abc">pm_status_t</a></div><div class="ttdeci">pm_status_t</div><div class="ttdoc">PM status.</div><div class="ttdef"><b>Definition:</b> pm.h:112</div></div>
|
|
<div class="ttc" id="agroup__PM_html_gaca065483cfe789215a4d194eda3fc931"><div class="ttname"><a href="group__PM.html#gaca065483cfe789215a4d194eda3fc931">pm_power_manage</a></div><div class="ttdeci">void pm_power_manage(void)</div><div class="ttdoc">pm power manage</div></div>
|
|
<div class="ttc" id="agroup__PM_html_gafcf762ea13dde196e7918b394a4c6e41"><div class="ttname"><a href="group__PM.html#gafcf762ea13dde196e7918b394a4c6e41">pm_sleep</a></div><div class="ttdeci">void pm_sleep(pm_status_t status)</div><div class="ttdoc">system sleep</div></div>
|
|
<div class="ttc" id="agroup__PM_html_ggac4d27cf0310d8173f6f5d1e71ddb0abcae599a3260cfbf6df7d4873e1c0c21900"><div class="ttname"><a href="group__PM.html#ggac4d27cf0310d8173f6f5d1e71ddb0abcae599a3260cfbf6df7d4873e1c0c21900">PM_STATUS_IDLE</a></div><div class="ttdeci">@ PM_STATUS_IDLE</div><div class="ttdoc">All modules are alive, but CPU clock is gating.</div><div class="ttdef"><b>Definition:</b> pm.h:116</div></div>
|
|
</div><!-- fragment --><p>There are 4 important checking points:</p>
|
|
<ul>
|
|
<li>Point 1: Check a global variable, that is controled by functions <a class="el" href="group__PM.html#gaae0a5bf0f02a1932a9c7e67d1dd4c890" title="pm sleep prevent">pm_sleep_prevent()</a> / <a class="el" href="group__PM.html#ga3de7dba19bee189c19e82e5cc0dcc603" title="pm sleep allow">pm_sleep_allow()</a>;</li>
|
|
<li>Point 2: Check <a class="el" href="group__PMU.html#ga82f3298af14a6b614e6920035bad727c" title="what power status should be entried">drv_pmu_sleep_status()</a> function, that is from <code>drv_pmu.c</code>;</li>
|
|
<li>Point 3: Check some of the registered callback functions, that is registered by <a class="el" href="group__PM.html#gae9d1c8d7e754903bd934acf207fd7312" title="pm sleep checker register">pm_sleep_checker_callback_register()</a>;</li>
|
|
<li>Point 4: Check the global sleep enable control, that is controled by function <a class="el" href="group__PM.html#ga9de92c7182c5638b6fcc51ac520d004c" title="pm sleep enable or disable">pm_sleep_enable()</a>; </li>
|
|
</ul>
|
|
</div></div><!-- contents -->
|
|
</div><!-- PageDoc -->
|
|
</div><!-- doc-content -->
|
|
<!-- HTML footer for doxygen 1.9.1-->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
</div>
|
|
</body>
|
|
</html>
|