View this page on MeshCore Docs.
SolarXiao automatic carrier detection and Base support, 2026-10-21
SolarXiao repeater firmware now defaults to automatic carrier detection when
there is no saved selection. A verified INA260 identity enables MPPT support;
until then, the firmware reports self-only telemetry without guessing Base
versus Advanced. Existing saved manual selections retain their meanings.
Manual auto, base, advanced and mppt settings remain available.
Base needs no additional telemetry driver. The published Base Standard schematic uses a CN3791 analog charger with no digital interface or INA monitor. Its battery connects to the XIAO BAT input; charge status drives an LED. Like the older BQ24650 Advanced design, it provides existing XIAO battery voltage and MCU temperature only. There are no new physical measurements for either board. Base Lite publishes a README but no schematic; its exact wiring is not independently qualified here.
Radio target selection stays separate. The published Base schematic specifies E22-900M30S; the pictured 2W Advanced has M33S. The existing 30S/33S target must match the fitted module. Charger detection does not change RF settings, PA limits, hardware/OTA identity, bootloader, flash layout or battery protection.
Qualified source and packages
| Item | Result |
|---|---|
| Application source | 5c44324330a4b3a2e79059dbfa5e086d4cfc1e08 |
| Version | v1.18.0.1-halo-keymind-cascade-dev-5c443243 |
| 33S OTA target / hardware | 0x3caf966e / solarxiao_33S, unchanged |
| 30S OTA target / hardware | 0xb38ebf22 / solarxiao_30S, unchanged |
| Native host checks | 22 PASS: 19 carrier methods and 3 existing power methods; native harnesses use ASan/UBSan |
| XIAO startup/battery safety checks | 6 PASS |
| Full/Reduced DFU, UF2, linked capabilities, memory | PASS for both targets |
| Target | Profile | Application bytes | EndF body hash | Internal bytes available |
|---|---|---|---|---|
solarxiao_33S_repeater |
Full | 599,132 | 7AB98467B6E3A468 |
150,576 |
solarxiao_33S_repeater |
Reduced | 569,136 | 217075127849EE7C |
152,224 |
solarxiao_30S_repeater |
Full | 599,132 | 0C386CB1FC49608C |
150,576 |
solarxiao_30S_repeater |
Reduced | 569,136 | ACBB1554247BB0B5 |
152,224 |
Every memory check requires 76,960 heap/transient bytes. Both profiles in both targets retain compiled LoRa/Bluetooth update support and telemetry history. Independent package checks verified the application version, EndF body length, body hash and target/hardware IDs. Package, UF2 and manifest file hashes matched. All four applications contain the native power marker, verified/pending Auto responses, Base/CN3791 and Advanced/BQ24650 descriptions, live self-reading response and history guidance.
The first 30S dependency installation failed before compilation because of a
local disk quota. Reusing the identical inherited 33S dependency cache resolved
the build setup; the final 30S Full/Reduced pair passed. PlatformIO processes
ran sequentially throughout. Logs and packages are retained under
/home/mesh/hwtest/solarxiao-auto-20261021/.
See the machine-readable validation record for exact package/application/UF2 hashes and detection parameters, and the controls guide for commands and hardware limits.
Detection and host acceptance
Auto reads only INA260 identity registers at carrier address 0x40:
manufacturer 0xfe = 0x5449 and device 0xff & 0xfff0 = 0x2270. Address ACK,
wrong identity, missing response and an incomplete second read do not enable
MPPT. No INA or charger configuration is written by detection.
The first probe occurs after startup initialization. Unverified detection retries every five seconds, including across the millisecond timer wrap. A positive identity is retained until reboot or a successful mode change; temporary communication loss does not demote it. Before verification, the adapter does not read the LTC4162, replay saved overrides or emit native carrier telemetry/history. Self battery/MCU readings remain available.
The actual adapter harness verifies delayed discovery and reloads retained
charger overrides only on the transition that enables native access. A dedicated
long-uptime test first services manual MPPT at a low timestamp, disables it,
then detects Auto at UINT32_MAX - 1000: replay occurs immediately once, the
next check waits exactly five seconds across wrap, and a simulated charger
reset reapplies the override without redundant writes afterward.
Manual Base/Advanced and unconfirmed/corrupt selections make zero native bus calls. Saved Auto restarts as unverified; original eight-byte manual MPPT and Advanced records keep their exact meanings without being rewritten. Fault tests cover metadata/read errors, wrong-size/corrupt records, partial writes, failed rename, corrupt publication and ambiguous public readback. Explicit successful selection recovers. Existing parser bounds, reply canaries, missing readings, history feature propagation, core charger checks and telemetry permissions/channel-order tests also pass.
Deployment limits and commands
No firmware was flashed to any device in this run. No physical Auto detection, Base/Advanced electrical measurement, boot/soak, radio forwarding or LoRa OTA transfer was tested for this image. SEA Sherwood remains unreachable and unchanged; its installed target and bootloader have not been verified. Earlier Mercerwood hardware results belong to their named firmware revisions.
With no saved selection, Auto requires no setup. To replace a saved manual selection after installing compatible firmware:
set solar.board auto
get solar.board
get solar capabilities
Manual overrides use set solar.board base|advanced|mppt. When native access
becomes enabled, retained /solar_power overrides are reloaded. Fresh LTC4162
chemistry/cell-count checks still independently guard all charger writes.