Record SolarXiao auto detection and Base build validation [skip ci]
This commit is contained in:
1 parent
804219e9fe
commit
7182c01ff8
4 files changed
+275
-1
No files matched your search
@@ -112,7 +112,8 @@ A remotely deployed node must first receive compatible firmware before these
|
||||
commands can be used. Deployment still requires its installed target and
|
||||
bootloader compatibility to be checked when it is reachable.
|
||||
|
||||
See the [earlier manual Advanced profile validation](test-results/solarxiao_advanced_2026-10-21.md).
|
||||
See the [automatic detection/Base build and host validation](test-results/solarxiao_auto_2026-10-21.md)
|
||||
and [earlier manual Advanced profile validation](test-results/solarxiao_advanced_2026-10-21.md).
|
||||
This adds no measurements beyond existing self voltage/MCU temperature and has
|
||||
not been installed on the remote Advanced board.
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ Completed validation reports, experiments, and test guides are collected here. O
|
||||
|
||||
## Radio and RF
|
||||
|
||||
- [SolarXiao automatic detection and Base support build/host validation, 2026-10-21](solarxiao_auto_2026-10-21.md)
|
||||
- [SolarXiao Advanced carrier profile build/host validation, 2026-10-21](solarxiao_advanced_2026-10-21.md)
|
||||
- [SolarXiao native MPPT and battery controls, 2026-10-21](solarxiao_power_2026-10-21.md)
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
# 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](https://github.com/wehooper4/Meshtastic-Hardware/blob/main/XaioSeries/SolarXaio/Base/Standard/Schematic_SolarXaio_Base_2025-10-23.pdf)
|
||||
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`](https://github.com/mikecarper/MeshCore/commit/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](solarxiao_auto_2026-10-21.safe.json)
|
||||
for exact package/application/UF2 hashes and detection parameters, and the
|
||||
[controls guide](../solarxiao_power.md) 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:
|
||||
|
||||
```text
|
||||
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.
|
||||
@@ -0,0 +1,163 @@
|
||||
{
|
||||
"passed": true,
|
||||
"scope": "build and host validation only; no hardware flashing, OTA transfer, electrical or radio tests",
|
||||
"source_commit": "5c44324330a4b3a2e79059dbfa5e086d4cfc1e08",
|
||||
"version": "v1.18.0.1-halo-keymind-cascade-dev-5c443243",
|
||||
"default_selection": "auto when no saved selection exists",
|
||||
"detection": {
|
||||
"address": "0x40",
|
||||
"manufacturer_register": "0xfe",
|
||||
"manufacturer_id": "0x5449",
|
||||
"device_register": "0xff",
|
||||
"device_mask": "0xfff0",
|
||||
"device_id": "0x2270",
|
||||
"retry_ms": 5000,
|
||||
"positive_identity_latched_until": "reboot or selection change",
|
||||
"unverified_result": "self-only; Base vs Advanced unknown",
|
||||
"detection_configuration_writes": 0
|
||||
},
|
||||
"manual_overrides": [
|
||||
"auto",
|
||||
"base",
|
||||
"advanced",
|
||||
"mppt"
|
||||
],
|
||||
"legacy_manual_records_preserved": true,
|
||||
"base_and_advanced_new_measurements": [],
|
||||
"installed_on_any_device": false,
|
||||
"tests": {
|
||||
"carrier": 19,
|
||||
"existing_native_power": 3,
|
||||
"xiao_battery_safety": 6,
|
||||
"total": 28,
|
||||
"native_sanitizers": [
|
||||
"ASan",
|
||||
"UBSan"
|
||||
],
|
||||
"native-tests.log_sha256": "5cea7fe67245b4c13cf9d14d0d603c9209217d0fb8f0392c94d7727a3978bd71",
|
||||
"xiao-startup-tests.log_sha256": "aeb690eba78ed4f1376ccdbbfb9ecc7e531f3ae1488e5793e87d300f6a11f2f0"
|
||||
},
|
||||
"build_environment": {
|
||||
"initial_30s_dependency_install": "failed with local disk quota exceeded before compilation; retained log",
|
||||
"retry": "reused the identical inherited 33S dependency cache; Full and Reduced passed",
|
||||
"platformio_concurrency": 1
|
||||
},
|
||||
"builds": {
|
||||
"solarxiao_33S_repeater": {
|
||||
"full": {
|
||||
"package": "solarxiao_33S_repeater-full-ota-v1.18.0.1-halo-keymind-cascade-dev-5c443243.zip",
|
||||
"package_sha256": "ac8908c732c0e19571ff482842095e99405cd0c0bf6c235c1b269c7a0b13013b",
|
||||
"application_bytes": 599132,
|
||||
"application_sha256": "ff075c9f3cca5e98becdc27fe5a15d2fbe8a1458b70c72c7cbf9b0f9d1814325",
|
||||
"body_bytes": 599076,
|
||||
"body_hash": "7AB98467B6E3A468",
|
||||
"ota_target": "0x3caf966e",
|
||||
"hardware_id": "solarxiao_33S",
|
||||
"firmware_markers": {
|
||||
"native_power": true,
|
||||
"auto_identity_verified": true,
|
||||
"auto_unverified_self_only": true,
|
||||
"base_analog_charger": true,
|
||||
"advanced_analog_charger": true,
|
||||
"live_self_readings": true,
|
||||
"history_guidance": true
|
||||
},
|
||||
"memory_passed": true,
|
||||
"available_internal_bytes": 150576,
|
||||
"required_heap_bytes": 76960,
|
||||
"capabilities_verified": true,
|
||||
"update_methods": [
|
||||
"bluetooth",
|
||||
"lora"
|
||||
],
|
||||
"uf2_sha256": "8ba8286eb2be7f2538802ddacc99e1eefd898721938dff0becbbc85ce3796ea5"
|
||||
},
|
||||
"reduced": {
|
||||
"package": "solarxiao_33S_repeater-reduced-ota-v1.18.0.1-halo-keymind-cascade-dev-5c443243.zip",
|
||||
"package_sha256": "60bebaaa24a5abab94bfa26f3d826ba2a7e619b552dcdd060db247b692370abf",
|
||||
"application_bytes": 569136,
|
||||
"application_sha256": "03281ca3816d68ed45474a6dc7fa15db9eac764e7c036109019c0c81e687a494",
|
||||
"body_bytes": 569080,
|
||||
"body_hash": "217075127849EE7C",
|
||||
"ota_target": "0x3caf966e",
|
||||
"hardware_id": "solarxiao_33S",
|
||||
"firmware_markers": {
|
||||
"native_power": true,
|
||||
"auto_identity_verified": true,
|
||||
"auto_unverified_self_only": true,
|
||||
"base_analog_charger": true,
|
||||
"advanced_analog_charger": true,
|
||||
"live_self_readings": true,
|
||||
"history_guidance": true
|
||||
},
|
||||
"memory_passed": true,
|
||||
"available_internal_bytes": 152224,
|
||||
"required_heap_bytes": 76960,
|
||||
"capabilities_verified": true,
|
||||
"update_methods": [
|
||||
"bluetooth",
|
||||
"lora"
|
||||
],
|
||||
"uf2_sha256": "d2cbb00a0dac8bf846f80af4f27e13100c86b23e35a64ac88a82d8f55f90f642"
|
||||
}
|
||||
},
|
||||
"solarxiao_30S_repeater": {
|
||||
"full": {
|
||||
"package": "solarxiao_30S_repeater-full-ota-v1.18.0.1-halo-keymind-cascade-dev-5c443243.zip",
|
||||
"package_sha256": "cad2a95577d4e594340587ceed621994457e6de1325f1c29efc780ea0e86bb1d",
|
||||
"application_bytes": 599132,
|
||||
"application_sha256": "d24f914c0a211d616b7419e2b8f03c6ec65158f26719ddff70cae544904521d1",
|
||||
"body_bytes": 599076,
|
||||
"body_hash": "0C386CB1FC49608C",
|
||||
"ota_target": "0xb38ebf22",
|
||||
"hardware_id": "solarxiao_30S",
|
||||
"firmware_markers": {
|
||||
"native_power": true,
|
||||
"auto_identity_verified": true,
|
||||
"auto_unverified_self_only": true,
|
||||
"base_analog_charger": true,
|
||||
"advanced_analog_charger": true,
|
||||
"live_self_readings": true,
|
||||
"history_guidance": true
|
||||
},
|
||||
"memory_passed": true,
|
||||
"available_internal_bytes": 150576,
|
||||
"required_heap_bytes": 76960,
|
||||
"capabilities_verified": true,
|
||||
"update_methods": [
|
||||
"bluetooth",
|
||||
"lora"
|
||||
],
|
||||
"uf2_sha256": "69ef67c581b1c913d5506d6a9a6ae4d6a97a37335a00cc0cf5ad46333981aaa1"
|
||||
},
|
||||
"reduced": {
|
||||
"package": "solarxiao_30S_repeater-reduced-ota-v1.18.0.1-halo-keymind-cascade-dev-5c443243.zip",
|
||||
"package_sha256": "240bbe83fffb0a1f3480a361b8533ccc1cfc31f768a318791ac3d81e33f7f4cc",
|
||||
"application_bytes": 569136,
|
||||
"application_sha256": "3ba61daf9e536e636a4aed9afff3566e99852d9ce57c7f963666824cef0d3ea8",
|
||||
"body_bytes": 569080,
|
||||
"body_hash": "ACBB1554247BB0B5",
|
||||
"ota_target": "0xb38ebf22",
|
||||
"hardware_id": "solarxiao_30S",
|
||||
"firmware_markers": {
|
||||
"native_power": true,
|
||||
"auto_identity_verified": true,
|
||||
"auto_unverified_self_only": true,
|
||||
"base_analog_charger": true,
|
||||
"advanced_analog_charger": true,
|
||||
"live_self_readings": true,
|
||||
"history_guidance": true
|
||||
},
|
||||
"memory_passed": true,
|
||||
"available_internal_bytes": 152224,
|
||||
"required_heap_bytes": 76960,
|
||||
"capabilities_verified": true,
|
||||
"update_methods": [
|
||||
"bluetooth",
|
||||
"lora"
|
||||
],
|
||||
"uf2_sha256": "3fb621c06960203ca1227a05f128e483033e79a52b144db0374c5c63a1d8c22c"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user