mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-09-26 11:47:53 +00:00
3506 lines
61 KiB
HTML
3506 lines
61 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
<meta name="description" content="Documentation for the open source MeshCore firmware">
|
|
|
|
|
|
|
|
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/sf10_rollback_failure_validation/">
|
|
|
|
|
|
<link rel="prev" href="../sf10_nrf52_double_write_settling_validation/">
|
|
|
|
|
|
<link rel="next" href="../sf125_settling_limits_validation/">
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../assets/images/favicon.png">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
|
|
|
|
|
|
|
<title>SF10/125 rollback and wider-spacing failure isolation - MeshCore Docs</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
|
|
|
<link rel="stylesheet" href="../_stylesheets/firmware_picker.css">
|
|
|
|
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
|
|
|
<link rel="stylesheet" href="../_stylesheets/filter_tool.css">
|
|
|
|
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
<body dir="ltr">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#sf10125-rollback-and-wider-spacing-failure-isolation" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<header class="md-header md-header--shadow" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href=".." title="MeshCore Docs" class="md-header__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
|
|
|
|
<img src="../_assets/meshcore.svg" alt="logo">
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
MeshCore Docs
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
SF10/125 rollback and wider-spacing failure isolation
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
</label>
|
|
<nav class="md-search__options" aria-label="Search">
|
|
|
|
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
</button>
|
|
</nav>
|
|
|
|
<div class="md-search__suggest" data-md-component="search-suggest"></div>
|
|
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-header__source">
|
|
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
mikecarper/MeshCore
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href=".." title="MeshCore Docs" class="md-nav__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
|
|
|
|
<img src="../_assets/meshcore.svg" alt="logo">
|
|
|
|
</a>
|
|
MeshCore Docs
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
mikecarper/MeshCore
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href=".." class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Introduction
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../WiFi/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
WiFi and MQTT by Firmware Type
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../cad_scan_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SX1262 channel-scanning hardware results
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../carrier_wave/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Carrier-wave RF checks
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../carrier_wave_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CW and CW2 validation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../cli_build_matrix/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CLI Availability by Firmware Build
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../cli_command_availability/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CLI Command Availability Matrix
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../cli_commands/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CLI Commands
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../cli_settings_audit/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CLI setting dispatch audit
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_contact_cache/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Full Companion contact caches
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_contact_cache_results/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Contact-cache and NimBLE RAM qualification
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_offline_queue/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Companion Offline Message Queue
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_protocol/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Companion Protocol
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_radio_full/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Full Companion
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_usb_ascii_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
USB Companion ASCII default validation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../companion_usb_client_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
USB Companion client compatibility
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../docs/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Local Documentation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../double_frequency_v4_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Double center-frequency write: V4 transmitter / XIAO receiver
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../esp32_memory_budget/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Classic ESP32 image memory budget
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../espnow_bridge_setup/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
ESP-NOW bridge: simple setup
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../faq/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Frequently Asked Questions
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../filter_tool/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Filter policy playground
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../firmware_memory_budget/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Firmware memory checks
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../firmware_picker/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Firmware picker
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../flood_filtering/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Flood Filtering and Moderation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../four_fixed_tx_dwell_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Four fixed transmitters: longer dwell repeats
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../four_fixed_tx_single_pass_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Four fixed transmitters / fast single-pass receiver
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../full_companion_features/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Full Companion: turn features on and off
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../full_companion_usb_switcher/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Companion USB CLI and binary switcher
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../full_usb_logging_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Full USB logging repair — 1.17.1.6
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../gps_tracking/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
GPS Tracking
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../halo_keymind_settings/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Halo and Keymind Branch Settings
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../hardware_validation_bluetooth_stealth_2026-09-07/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
XIAO Bluetooth stealth hardware validation - 2026-09-07
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../hardware_validation_checklist/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Hardware validation checklist
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../home_text_spacing/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Home-screen text spacing
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../host_cli_service/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
LoRa CLI Host Service
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
MeshCore KISS Modem Protocol
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../lora_ota_automation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Scripted LoRa OTA from start to finish
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../mbedtls-tls-footprint/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Shrinking the per-connection TLS footprint on non-PSRAM observers
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../mixed_scan_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Mixed-bandwidth two-channel reception test
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../mixed_sf_bw_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Equal-symbol-time mixed SF/BW, four-channel test
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../nimble_companion_trial/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
ESP32-S3 NimBLE Full Companion trial
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../nimble_companion_trial_results/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
ESP32-S3 NimBLE trial results, 2026-09-08
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../nrf52-usb-ready-fix/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
nRF52 USB READY hang
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../nrf52_companion_storage_recovery/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
nRF52 Companion automatic ExtraFS recovery
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../nrf52_power_management/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
nRF52 Power Management
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../number_allocations/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Number Allocations
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ota_easy/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Easy firmware updates over LoRa
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
MeshTower V2 microSD LoRa OTA
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ota_nrf52_bootloader_update/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
nRF52 bootloader updates over LoRa
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ota_nrf52_qspi/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
nRF52 repeater LoRa OTA with external QSPI
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ota_protocol/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
MeshCore OTA - .mota container & LoRa protocol
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ota_user_guide/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Updating your node over the air (OTA) - user guide
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../packet_format/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Packet Format
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../pair_4p6_300us_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF7/62.5 + SF8/500: 4.6 slow chirps, 0.3 ms reserve
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../pair_preamble32_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF7/62.5 + SF8/500, fast switching and preamble 32
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../payloads/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Payload Format
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../pr7_review_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
PR #7 review and validation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../preamble_detection_investigation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Off-channel preamble investigation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../qr_codes/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
QR Codes
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../radio_chirp_math_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Shared radio/radio2 chirp timing and preamble warnings
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../radio_dwell_policy_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Automatic dwell policy: 4.6 chirps on both profiles
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../radio_profile_switch_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SX1262 profile-switch validation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../radio_profiles/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Two LoRa profiles on one radio
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../radio_profiles_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Dual-profile receive validation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../radio_receive_calibration/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Radio receive calibration and recovery
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../rak3401_mota_chain/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
RAK3401 1W repeater compact LoRa update chain
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../role_feature_switches/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Feature switches by role — 1.17.1.5 USA Cascade
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../s3_memory_soak_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
ESP32-S3 OTA memory experiment
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../separated_radio_modulation_cache_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Separated radios, normal XIAO RX gain, and unchanged-modulation timing
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf10_10_vs_100hz_full_sample_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF10/125 full samples: 10 Hz versus 100 Hz first-pass detour
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf10_10hz_cr_detour_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF10/125: tiny first-pass frequency offset and coding-rate detour
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf10_full_retune_twice_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF10/125: apply the full radio settings twice per hop
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf10_nrf52_double_write_settling_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF10 / 125 kHz, XIAO nRF52 TX, double write, 1 ms delay grid
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF10/125 rollback and wider-spacing failure isolation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF10/125 rollback and wider-spacing failure isolation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#fixture-and-requested-controls" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Fixture and requested controls
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#maximum-practical-settling-control" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Maximum practical settling control
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#250-khz-spacing-eleven-rollback-cases" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
250 kHz spacing: eleven rollback cases
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#fixed-frequency-controls-off-channel-responses-without-switching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Fixed-frequency controls: off-channel responses without switching
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#a-traced-real-timeout-at-250-khz-spacing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
A traced real timeout at 250 kHz spacing
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#1-mhz-spacing-strict-results-versus-payload-delivery" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
1 MHz spacing: strict results versus payload delivery
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#changes-and-verification" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Changes and verification
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#evidence-provenance-sha-256" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Evidence provenance (SHA-256)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf125_settling_limits_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Descending SF10..SF5 / 125 kHz settling limits
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf5_250_dwell_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF5 / 250 kHz: four-channel dwell sweep
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf6_125_settling_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF6/125 four-channel post-switch settling sweep
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf6_5p1_trace_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF6 / 125 kHz: four channels at 5.1 chirps
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf6_channel_scan_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF6 / 125 kHz channel-count test
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../sf8_5p1_trace_validation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SF8 / 125 kHz: four-channel comparison at 5.1 chirps
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../spiffs_regular_file_reads/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SPIFFS regular-file reads and login replay state
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../stats_binary_frames/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Stats Binary Frame Structures
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../telemetry_decoder/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Telemetry decoder
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../terminal_chat_cli/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Terminal Chat CLI
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../usb_serial_backpressure/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Native USB backpressure and radio liveness
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../v4_pixel5_font_trial/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Small-screen message fonts
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_88" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_88" id="__nav_88_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Releases
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_88_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_88">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Releases
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../releases/1.17.1.5-doc-audit/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Markdown audit — 1.17.1.5 USA Cascade
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../releases/1.17.1.5/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
MeshCore 1.17.1.5 Dev - USA Cascade
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../releases/1.17.1.6/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
MeshCore 1.17.1.6 Dev - USA Cascade
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#fixture-and-requested-controls" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Fixture and requested controls
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#maximum-practical-settling-control" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Maximum practical settling control
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#250-khz-spacing-eleven-rollback-cases" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
250 kHz spacing: eleven rollback cases
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#fixed-frequency-controls-off-channel-responses-without-switching" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Fixed-frequency controls: off-channel responses without switching
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#a-traced-real-timeout-at-250-khz-spacing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
A traced real timeout at 250 kHz spacing
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#1-mhz-spacing-strict-results-versus-payload-delivery" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
1 MHz spacing: strict results versus payload delivery
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#changes-and-verification" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Changes and verification
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#evidence-provenance-sha-256" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Evidence provenance (SHA-256)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/sf10_rollback_failure_validation.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
<h1 id="sf10125-rollback-and-wider-spacing-failure-isolation">SF10/125 rollback and wider-spacing failure isolation</h1>
|
|
<p>2026-09-14. <strong>No strict four-channel 400/400 pass. Reverting the switching
|
|
optimizations did not remove failures. Off-channel reception also occurs with
|
|
a fixed, fully initialized receiver, without any channel switching.</strong> A traced
|
|
timeout shows an off-channel preamble holding the scanner away from the
|
|
intended channel until after its transmit preamble. Wider spacing did not
|
|
eliminate either wrong-channel delivery or actual missing packets.</p>
|
|
<p>This isolates a concrete scanner failure mechanism, not the underlying
|
|
physical RF cause. Commanded frequency words are observed, but actual emitted
|
|
spectrum, antenna-port power, image responses and overload have not been
|
|
independently measured. Do not claim front-end saturation or a specific spur
|
|
as proven. Do not treat these first-failure-censored samples as unbiased PER.</p>
|
|
<h2 id="fixture-and-requested-controls">Fixture and requested controls</h2>
|
|
<ul>
|
|
<li>RX: XIAO ESP32-S3 / Wio SX1262, COM31, MAC 28:84:85:B4:09:80; normal RX gain
|
|
register 0x94 throughout (boosted gain off).</li>
|
|
<li>TX: XIAO nRF52840 / Wio SX1262, COM15, serial B35E71C1C3726CE7.</li>
|
|
<li>SF10, 125 kHz BW, CR4/5, 32-symbol preamble, 16-byte sequenced CHS1 probes,
|
|
-9 dBm chip request, four channels, 5.1-symbol post-settle listening visits.</li>
|
|
<li>Original centers: 909.5, 909.75, 910.0, 910.25 MHz. User-requested wider
|
|
centers: 909.5, 910.5, 911.5, 912.5 MHz (1 MHz spacing).</li>
|
|
<li>Existing fixed-channel positive control was 100/100; see
|
|
<code>sf10_nrf52_double_write_settling_validation.md</code>. No failed packets retried.</li>
|
|
<li>Unrelated RAK COM29 was not opened. New nRF52 upload was application-only,
|
|
using normal SoftDevice ID 0x0123 validation; no bootloader/SoftDevice erase.</li>
|
|
</ul>
|
|
<p>Rollback modes are runtime HIL controls on the same current source, not
|
|
historical firmware checkouts. No production default or receive safety guard
|
|
was changed during this investigation. Tests preserve ownership, packet-in-
|
|
progress, BUSY and command-result checks. Existing unrelated working-tree
|
|
changes were left intact. No commit or push was requested this turn.</p>
|
|
<h2 id="maximum-practical-settling-control">Maximum practical settling control</h2>
|
|
<p>At SF10/125, a symbol is 8,192 us, the programmed preamble is 262,144 us,
|
|
and each 5.1-symbol post-settle visit is 41,780 us. For each rollback mode:</p>
|
|
<ol>
|
|
<li>Measure six seconds of RX-only switching without added delay.</li>
|
|
<li>Choose the largest 100 us delay step satisfying
|
|
<code>4 * (41780 + observed_max_switch_us + added_delay_us + 500) <= 262144</code>.</li>
|
|
<li>Measure another six seconds; require at least eight full idle cycles and
|
|
maximum observed idle cycle below the preamble before allowing TX.</li>
|
|
</ol>
|
|
<p>The 500 us per-hop reserve covers some observed scheduling variation, not
|
|
all possible jitter. RX is active during added settling. Near-ceiling cycle
|
|
timing is not itself a guarantee of acquisition for every arrival phase,
|
|
especially when an IRQ causes an extended packet hold. Idle-cycle statistics
|
|
exclude guard/packet-held visits; those are measured separately.</p>
|
|
<h2 id="250-khz-spacing-eleven-rollback-cases">250 kHz spacing: eleven rollback cases</h2>
|
|
<p>Each case stopped on its <strong>first probe</strong>, TX channel 3, with a real timeout.
|
|
No strict 400/400 pass, TX fault, RX mode/cache failure, or hardware error.
|
|
The first nine cases used the checkout's existing 1,600 us TCXO setting;
|
|
the final two explicitly restored 6,000 us. Production timing was not edited.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Case</th>
|
|
<th style="text-align: right;">Added delay (us)</th>
|
|
<th style="text-align: right;">Zero-delay mean switch (us)</th>
|
|
<th style="text-align: right;">Max settled idle cycle (us)</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Fast, cached modulation, double frequency write</td>
|
|
<td style="text-align: right;">22500</td>
|
|
<td style="text-align: right;">535.88</td>
|
|
<td style="text-align: right;">259297</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Always write modulation</td>
|
|
<td style="text-align: right;">22500</td>
|
|
<td style="text-align: right;">625.50</td>
|
|
<td style="text-align: right;">259682</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Individual SF/BW/CR writes</td>
|
|
<td style="text-align: right;">22200</td>
|
|
<td style="text-align: right;">840.97</td>
|
|
<td style="text-align: right;">259346</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Full normal RX restart</td>
|
|
<td style="text-align: right;">22200</td>
|
|
<td style="text-align: right;">896.89</td>
|
|
<td style="text-align: right;">259577</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Full RX + individual modulation</td>
|
|
<td style="text-align: right;">22000</td>
|
|
<td style="text-align: right;">1113.95</td>
|
|
<td style="text-align: right;">259623</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Above + byte-wise SPI, warm XOSC</td>
|
|
<td style="text-align: right;">21800</td>
|
|
<td style="text-align: right;">1215.79</td>
|
|
<td style="text-align: right;">259220</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Above + RC standby, 1.6 ms TCXO</td>
|
|
<td style="text-align: right;">20100</td>
|
|
<td style="text-align: right;">2942.50</td>
|
|
<td style="text-align: right;">259339</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Fast, cached modulation, single frequency write</td>
|
|
<td style="text-align: right;">22600</td>
|
|
<td style="text-align: right;">450.25</td>
|
|
<td style="text-align: right;">259341</td>
|
|
</tr>
|
|
<tr>
|
|
<td>RC/full RX/individual/byte-wise, single write, 1.6 ms TCXO</td>
|
|
<td style="text-align: right;">20200</td>
|
|
<td style="text-align: right;">2837.50</td>
|
|
<td style="text-align: right;">259329</td>
|
|
</tr>
|
|
<tr>
|
|
<td>RC/full RX/individual/byte-wise, double write, 6 ms TCXO</td>
|
|
<td style="text-align: right;">15800</td>
|
|
<td style="text-align: right;">7293.25</td>
|
|
<td style="text-align: right;">259550</td>
|
|
</tr>
|
|
<tr>
|
|
<td>RC/full RX/individual/byte-wise, single write, 6 ms TCXO</td>
|
|
<td style="text-align: right;">15800</td>
|
|
<td style="text-align: right;">7190.31</td>
|
|
<td style="text-align: right;">259139</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Actual frequency/modulation command counts and fast-RX counts verified each
|
|
policy. Slower modes received less added delay to preserve the total sweep
|
|
budget. These are eleven probes with eleven timeouts, <strong>not eleven complete
|
|
400-packet runs</strong>. Packet arrival pauses use the same seeded scheduling
|
|
method but not hardware-synchronized identical RF phases across modes.</p>
|
|
<h2 id="fixed-frequency-controls-off-channel-responses-without-switching">Fixed-frequency controls: off-channel responses without switching</h2>
|
|
<p>Each pair received three independent probes after full normal initialization.
|
|
Positive controls were interleaved. The receiver remained at one frequency:
|
|
zero observed frequency commands after setup, no hopping or cache shortcut.
|
|
Payload success requires the exact expected sequence/channel/body, length 16
|
|
and clean CRC. It does not require RX center to equal TX center in this
|
|
explicit offset diagnostic. Offset below means programmed RX minus TX.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Spacing</th>
|
|
<th style="text-align: right;">RX-TX offset (kHz)</th>
|
|
<th style="text-align: right;">Probes</th>
|
|
<th style="text-align: right;">Intact expected payloads</th>
|
|
<th style="text-align: right;">Preamble IRQ seen</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>250 kHz</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td style="text-align: right;">6</td>
|
|
<td style="text-align: right;">6</td>
|
|
<td style="text-align: right;">6</td>
|
|
</tr>
|
|
<tr>
|
|
<td>250 kHz</td>
|
|
<td style="text-align: right;">-250</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">2</td>
|
|
<td style="text-align: right;">3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>250 kHz</td>
|
|
<td style="text-align: right;">-500</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td style="text-align: right;">3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>250 kHz</td>
|
|
<td style="text-align: right;">-750</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td style="text-align: right;">3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>250 kHz</td>
|
|
<td style="text-align: right;">+250</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td style="text-align: right;">2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>1 MHz</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td style="text-align: right;">6</td>
|
|
<td style="text-align: right;">6</td>
|
|
<td style="text-align: right;">6</td>
|
|
</tr>
|
|
<tr>
|
|
<td>1 MHz</td>
|
|
<td style="text-align: right;">-1000</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">2</td>
|
|
<td style="text-align: right;">3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>1 MHz</td>
|
|
<td style="text-align: right;">-2000</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td style="text-align: right;">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td>1 MHz</td>
|
|
<td style="text-align: right;">-3000</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>1 MHz</td>
|
|
<td style="text-align: right;">+1000</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">3</td>
|
|
<td style="text-align: right;">3</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>At 250 kHz spacing, the two valid -250 kHz-offset packets reported RSSI
|
|
-91/-90 dBm and SNR -12.8/-10.8 dB. At 1 MHz spacing, valid off-channel
|
|
packets reported RSSI -102..-109 dBm and SNR -11.5..-15.8 dB. Wider on-channel
|
|
controls were all -33 dBm, SNR +8.0..+8.8 dB. These are radio-reported values,
|
|
not calibrated measurements of transmitted spurs or receiver rejection.</p>
|
|
<p>The non-monotonic offset pattern means that increasing spacing alone cannot
|
|
be assumed to remove this response. These fixed-frequency tests rule out a
|
|
channel-hop shortcut as a necessary condition for the observed off-channel
|
|
packets; they do not establish which physical component produces them.</p>
|
|
<h2 id="a-traced-real-timeout-at-250-khz-spacing">A traced real timeout at 250 kHz spacing</h2>
|
|
<p>Fast/double-write RX, +22,500 us settling. One channel-3 probe timed out with
|
|
TX rc=0, RX mode=1 and device errors=0. The trace contains 454 events, overflow
|
|
0. Trace adds 64 us IRQ polling; use it for ordering, not an unperturbed timing
|
|
A/B comparison. Times below are relative to receiver expectation arming.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th style="text-align: right;">RX time (ms)</th>
|
|
<th>Evidence</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: right;">169.190</td>
|
|
<td>Frequency command for channel 3, 910.25 MHz</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">234.032</td>
|
|
<td>Leaves channel 3 for channel 0</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">298.869</td>
|
|
<td>Frequency command for channel 1, 909.75 MHz</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">330.030</td>
|
|
<td>PREAMBLE_DETECTED (0x0004) while on channel 1</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">363.632</td>
|
|
<td>Requested next hop is held by receive-in-progress guard</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">726.734</td>
|
|
<td>Guard clears the lingering preamble IRQ</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">726.826</td>
|
|
<td>Frequency command for channel 2</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">791.654</td>
|
|
<td>Finally commands intended channel 3 again</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;">814.586</td>
|
|
<td>Channel-3 hop/settling completes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>TX setup was 86,914 us and its transmit call 529,297 us. Host/firmware timing
|
|
places TX RF start approximately 287..289 ms after RX arming and the end of
|
|
its programmed preamble around 550 ms. This estimate is not a synchronized
|
|
RF measurement, but the receiver's several-hundred-millisecond absence from
|
|
the intended channel is much larger than USB timestamp uncertainty.</p>
|
|
<p>The held channel-1 visit measured <strong>427,395 us</strong>, versus normal idle four-
|
|
channel cycle maximum <strong>259,358 us</strong>. The guard timeout is consistent with
|
|
<code>RadioLibWrapper::calcMaxPacketMillis</code>: <code>(32 + 8 + 4.25) * 8192 = 362496 us</code>,
|
|
rounded to 363 ms. <code>CustomSX1262::isReceiving()</code> starts that timer when the
|
|
guard first observes the preamble, here later than the diagnostic IRQ poll.</p>
|
|
<p>Thus an off-channel preamble can monopolize the scanner long enough to miss
|
|
the real channel. Do not simply remove or shorten this safety guard as a
|
|
production fix: it also protects legitimate weak or long-preamble reception.</p>
|
|
<h2 id="1-mhz-spacing-strict-results-versus-payload-delivery">1 MHz spacing: strict results versus payload delivery</h2>
|
|
<p>Three strict rollback cases (fast double, fast single, fully rolled back
|
|
single/6 ms) each stopped at their first probe. All three actually decoded
|
|
the intact channel-3 payload while programmed for channel 2: RX 911.5 MHz,
|
|
TX 912.5 MHz, RF word at read 955777024. They are <strong>channel mismatches, not
|
|
lost payloads</strong>. RSSI was -102/-101/-101 dBm; SNR -11.5/-11.5/-11.2 dB.</p>
|
|
<p>An explicitly separate payload-delivery diagnostic then continued through
|
|
such packets while retaining strict validity in raw evidence:</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Mode</th>
|
|
<th style="text-align: right;">Added delay</th>
|
|
<th style="text-align: right;">Delivered before stop</th>
|
|
<th style="text-align: right;">Strict same-channel</th>
|
|
<th>Stop</th>
|
|
<th style="text-align: right;">Mean switch</th>
|
|
<th style="text-align: right;">Max idle cycle</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Fast, cached, double write</td>
|
|
<td style="text-align: right;">22.5 ms</td>
|
|
<td style="text-align: right;">3 of 4 probes</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td>TX channel 0 timed out</td>
|
|
<td style="text-align: right;">557.721 us</td>
|
|
<td style="text-align: right;">259381 us</td>
|
|
</tr>
|
|
<tr>
|
|
<td>RC/full RX/individual/byte-wise, single write, 6 ms TCXO</td>
|
|
<td style="text-align: right;">15.8 ms</td>
|
|
<td style="text-align: right;">2 of 3 probes</td>
|
|
<td style="text-align: right;">0</td>
|
|
<td>TX channel 1 timed out</td>
|
|
<td style="text-align: right;">7310.510 us</td>
|
|
<td style="text-align: right;">259643 us</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Every delivered packet in these two runs arrived one programmed channel below
|
|
its transmitter. Both runs had zero mode/cache/RX/device errors and actual
|
|
switch-policy counts matched. Neither is a 400/400 pass, even under the relaxed
|
|
delivery-only criterion. The true timeout in the fully rolled-back path also
|
|
shows the problem is not limited to the accelerated RX restart or 0x8B cache.
|
|
No traces were enabled for these two runs, so do not assign their individual
|
|
timeouts the exact IRQ timeline from the earlier traced probe.</p>
|
|
<h2 id="changes-and-verification">Changes and verification</h2>
|
|
<ul>
|
|
<li>HIL-only rollback, explicit TCXO timing, selectable 250/1000 kHz spacing,
|
|
frequency-command trace events and fixed-frequency offset controls.</li>
|
|
<li>Separate opt-in payload-delivery test; strict wire validity remains intact.
|
|
Host/device counters distinguish strict from off-channel deliveries;
|
|
settling sweeps reject delivery-only captures, including reused evidence.</li>
|
|
<li>16 native profile tests and 46 HIL host tests passed. Receiver and nRF52
|
|
builds/uploads succeeded with normal verification. Receiver reported
|
|
94,844 bytes RAM / 366,777 bytes flash; nRF52 18,220 / 95,572 bytes.</li>
|
|
<li><code>git diff --check</code> passed; unrelated pre-existing CRLF warnings only.</li>
|
|
<li>Temporary PlatformIO overlay removed. Controllers stopped, both boards
|
|
rebooted idle with HIL firmware retained. No autonomous TX or restoration.</li>
|
|
</ul>
|
|
<p>Next useful isolation is the physical off-channel response (controlled RF
|
|
attenuation or reversed radio roles), followed by safe acquisition/hold-policy
|
|
experiments. More settling delay alone does not address the demonstrated
|
|
false-hold mechanism. No claim of an identified silicon defect or verified
|
|
production fix is made here.</p>
|
|
<h2 id="evidence-provenance-sha-256">Evidence provenance (SHA-256)</h2>
|
|
<p>Raw JSON files below are under <code>tools/hil/</code>; prior captures were not rewritten.
|
|
Matrix manifests include per-case paths and timing controls. All listed new
|
|
experiments completed under their stated stopping policies without fixture or
|
|
cleanup errors. Completed first-failure runs still have incomplete 400-packet
|
|
levels by design.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Capture</th>
|
|
<th>SHA-256</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>profile_switch_sf10_rollback_results.json</td>
|
|
<td><code>e87c504b3c89fbafe90c18fcd0ab37df34a6aeb51d95b5c69f58d60f70de185a</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_stationary_sf10_offset_results.json</td>
|
|
<td><code>d3d87315513a70fc3f00cc7f17369043328f53ee3028d499087b21e767370ab7</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_switch_sf10_rollback_fast_trace_results.json</td>
|
|
<td><code>8ac9db50f0f06eb7511d7d233957119618df62afdc7112dd83eb68d292fcd725</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_switch_sf10_rollback_6ms_results.json</td>
|
|
<td><code>74e7bfeb23bc569a5786e2322b5e3b1753cba9f628e2969bf4f5c4296ca5817a</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_switch_sf10_wide_rollback_results.json</td>
|
|
<td><code>d79096fbe3e15e0375457b487fd40be3418789e798a978efb79d8298c880eea2</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_switch_sf10_wide_payload_results.json</td>
|
|
<td><code>1316a2c2f32a8c0773fc56587c4220ee8f6f6cdf4ab9b87e00fd361fc9395257</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_switch_sf10_wide_legacy_payload_results.json</td>
|
|
<td><code>fcf2123270634e2f27800787e20b9b8b7ae63bcfb03e17d26a4a4f6f4e23d32f</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>profile_stationary_sf10_wide_offset_results.json</td>
|
|
<td><code>4c494a59fa793d274b0366185cfe3230b6c9fce7a57dfaa61f9f29c36465bbd3</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>RX firmware images used, in chronological order:</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Stage</th>
|
|
<th>firmware.bin SHA-256</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Initial nine-mode rollback</td>
|
|
<td><code>5f8dbf9c4584e0de94a7aebda5a20e961b644a880ecb6a34ab5871621958696f</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Fixed 250 kHz offsets and traced timeout</td>
|
|
<td><code>cd839caa33c869dd448cc55e9c8b959e39d105f80a2ac4a8029393698b993fd3</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Explicit 6 ms TCXO rollback</td>
|
|
<td><code>0ba044035c4986749c9ad4f50c702dc8c57e8e0fecf9d46fc11515cad5678166</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Wider strict rollback</td>
|
|
<td><code>5fc919c80438635b4a96021b39fae2ada9e767508d7bb73854e4e108f0d4920f</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Wider delivery diagnostics and fixed offsets; final installed</td>
|
|
<td><code>7b313a0f8f1eb04f6fc12197af5e9481ad43154b981ab7627e50167d2a97d8c2</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The 250 kHz tests used the prior nRF52 TX ZIP hash
|
|
<code>7466625ef5e7bcc8f7dd16db2b843db29b4312a33b0d32bc0b1e1193d6aee03a</code>.
|
|
All wider tests used the new selectable-spacing application:</p>
|
|
<ul>
|
|
<li>TX ZIP: <code>c474b7598a2c0b6c529ead897f3fc7aab8caf4b7581c73d7acac6ffae081377d</code></li>
|
|
<li>TX HEX: <code>b400fc53c496f4a956f88ccee5cda83b5f6679b8e2b59bfcb4b8155ea9e1e5e9</code></li>
|
|
</ul>
|
|
<p>Build artifacts are generated and may be replaced by a subsequent build;
|
|
hashes identify the images used, not a promise that every historical binary
|
|
remains in <code>.pio/build</code>. Source starts from keymindCascade commit
|
|
<code>0e5955f889788a4317863e731b38ffe09e3d5441</code> with the existing dirty changes and
|
|
these uncommitted HIL additions; this is not a clean-release comparison.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
Material for MkDocs
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
|
|
|
|
|
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
|
|
|
<script src="../_javascript/firmware_picker.js"></script>
|
|
|
|
<script src="../_javascript/telemetry_decoder.js"></script>
|
|
|
|
<script src="../_javascript/filter_tool.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |