194 lines
10 KiB
HTML
Raw Permalink Normal View History

2025-09-28 09:58:38 +08:00
<!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: Bootloader</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&amp;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&amp;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&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('BOOTLOADER.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">Bootloader </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="md_docs_doxygen_om6626_user_guides_bootloader"></a></p>
<p>The OM6XXX contains a tiny bootloader which is capable of:</p><ul>
<li>Downloading an application via UART/BLE and programming the application image to the flash.</li>
<li>Downloading an application to internal SRAM via UART/BLE and executing the application directly.</li>
<li>Loading an application located in Flash to internal SRAM and executing the application.</li>
<li>Execute an application located in Flash directly.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>If the chip supports <a class="el" href="SECUREBOOT.html">Secure Boot</a>, this bootloader will no longer be run.</dd></dl>
<h1><a class="anchor" id="autotoc_md32"></a>
Bootloader</h1>
<p>OM6XXX bootloader flow show as follow:</p>
<div class="image">
<img src="Bootloader_flow_om6626.png" alt=""/>
<div class="caption">
OM6XXX Bootloader Flow</div></div>
<p>The GPIO4 is known as BOOT PIN. BOOT PIN can force OM6XXX into ISP mode.</p>
<p>The IO of external-flash is:</p><ul>
<li>MISO = IO7</li>
<li>CS = IO8</li>
<li>CLK = IO9</li>
<li>MOSI = IO10</li>
</ul>
<p>OM6XXX almost contains internal flash, so most application scenarios do not boot from external flash.</p>
<p>The application's <code>VECTOR_TABLE[10]</code> (defined in startup_xxx.s) is "App Run on SRAM" or "App Run on Flash" flag, If <code>VECTOR_TABLE[10] == 0x46533252</code>, app will run on FLASH directly, otherwise bootloader load FLASH app to SRAM and jump to SRAM.</p>
<h1><a class="anchor" id="autotoc_md33"></a>
ISP and BOOT mode</h1>
<p>There are two modes in bootloader: ISP mode and BOOT mode.</p>
<ul>
<li>ISP Mode is used for burning application to SFlash or SRAM.</li>
<li>BOOT Mode is used for loading application from SFlash to internal SRAM or executing flash application directly.</li>
</ul>
<p>When OM6XXX power on or reset, the bootloader will check the boot pin. If the boot pin is LOW level, OM6XXX will be running in ISP mode. If the boot pin is HIGH level and sflash has a valid application, OM6XXX will come into BOOT mode, otherwise ISP mode is running.</p>
<div class="image">
<img src="Bootloader_isp_mode.jpg" alt=""/>
<div class="caption">
OM6XXX ISP Mode</div></div>
<ul>
<li><b>Branch 1</b>: Bootloader burns application image to FLASH.</li>
<li><b>Branch 2</b>: Bootloader burns application image to SRAM.</li>
</ul>
<div class="image">
<img src="Bootloader_boot_mode.jpg" alt=""/>
<div class="caption">
OM6XXX BOOT Mode</div></div>
<h2><a class="anchor" id="autotoc_md34"></a>
Read and write protection (lock SWD)</h2>
<ul>
<li>If the customer does not set the write protection of Flash: After setting read and write protection (lock SWD) through ISP, you can unlock read and write protection (also unlock SWD) through ISP, and the unlock method is to erase all flash (keep the CPFT calibration area);</li>
<li>If the customer sets the write protection of Flash: After setting the read and write protection (lock SWD) through the ISP, it can no longer be unlocked by the ISP. In this case, the upgrade can only be performed through OTA (or other custom upgrade methods of customers);</li>
</ul>
<h1><a class="anchor" id="autotoc_md35"></a>
OTA</h1>
<p>Please reference <a class="el" href="BLE_OTA.html">BLE OTA</a> </p>
</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>