Record Heltec V2 BLE memory repair and validation

This commit is contained in:
mikecarper committed 2026-10-22 08:24:34 -07:00
1 parent 1d4016f483
commit 2c762540ab
4 files changed
+153 -5

No files matched your search

@@ -111,12 +111,15 @@ The same-size V4 build of
adds only the channel-response padding fix described below. Bluetooth, radio,
sleep-policy and role code are unchanged between those last two revisions.
Classic Heltec V2 BLE remains below its required 8,192-byte internal RAM
reserve. Historical checks left 2,552 bytes free on the baseline and 1,224 bytes
At this checkpoint, Classic Heltec V2 BLE was below its required 8,192-byte
static DRAM reserve. Historical checks left 2,552 bytes free on the baseline and 1,224 bytes
on the initial sleep candidate. Removing an unnecessary WiFi-driver reference
recovered 1,208 bytes, raising the later candidate to 2,432: 120 below baseline
and 5,760 short of the reserve. Final cache/padding revisions were not
remeasured on V2. The gate was retained; this target remains unqualified.
remeasured on V2. The gate was retained. The later
[22 October V2 cache repair](heltec_v2_ble_memory_2026-10-22.md) closes the RAM
build failure with 12,440 static bytes free and unchanged capacities; physical
V2 operation was not measured by that repair.
## Physical V4 observations
@@ -663,8 +666,8 @@ failure is retained, with its separate automatic-permission recovery verified.
No nRF52 board, hub power or other firmware was changed in this task.
The Bluetooth hardware checks pass. SDK light-sleep calls are observed without
SDK errors. Strict sleeping two-frequency packet qualification remains open,
and Classic V2 still fails its existing RAM reserve gate. These results do not
SDK errors. Strict sleeping two-frequency packet qualification remains open.
The later V2 cache repair passes its existing RAM reserve gate. These results do not
qualify every ESP32 board or the full thirteen-radio fleet, and do not measure
electrical power savings. Unchanged Bluetooth and quiet-wait checks were not
repeated for padding, version, documentation or fixture-only changes.
@@ -0,0 +1,86 @@
<!-- meshcore-hosted-doc-link:start -->
<p class="meshcore-hosted-doc-link"><a href="https://mikecarper.github.io/MeshCore/test-results/heltec_v2_ble_memory_2026-10-22/">View this page on MeshCore Docs</a>.</p>
<!-- meshcore-hosted-doc-link:end -->
# Heltec V2 BLE RAM reserve repair, 22 October 2026
Status: **build, memory and host tests PASS**. Physical V2 operation was not
tested in this work. The earlier RAM failure remains recorded below.
Clean source
[`1d4016f48`](https://github.com/mikecarper/MeshCore/commit/1d4016f483caaddebde4c923f7eea3dee27ac3ea)
was built through the canonical builder as `Heltec_v2_companion_radio_ble`,
using the auto feature profile, Cascade runtime defaults, USA Cascadia radio
preset and release-length version `v1.18.0.1-halo-keymind-cascade-dev-1d4016f4`.
The [safe receipt](heltec_v2_ble_memory_2026-10-22.safe.json) binds the source,
linked measurements and packaged artifact hashes.
## Change and retained behavior
Only V2 BLE explicitly enables the existing `MESH_CONTACT_CACHE` policy.
Its `Heltec_v2_companion_radio_ble_ps` alias inherits the same setting.
Other V2 profiles and the default cache policies of other boards are unchanged.
All 160 contacts, eight channels and 128 offline frames remain available.
The cache keeps 16 paths and 16 shared secrets resident, rather than embedding
a complete path and shared secret in every contact object. Other paths remain
accessible through checked reads of existing contact records; cold ESP32
secrets are recalculated without secret-file I/O. These resident-cache limits
do not reduce the contact capacity. Cold access can add filesystem reads or
key-calculation work.
The Bluedroid Bluetooth host, PIN authentication, bond storage, dependencies,
radio/display setup, contact protocol and 152-byte contact-file records remain
unchanged. No pairing migration or repartitioning is introduced. The packaged
capability verification passes with an empty reductions list.
The existing 8,192-byte static DRAM reserve remains mandatory. The runtime
model additionally reserves 6,144 bytes for this explicit ESP32 cache opt-in:
4,096 bytes for retained reader buffering plus 2,048 bytes for reader objects,
allocator metadata and related overhead. This is above the unchanged common
filesystem and transient allowances; it is not a claim of zero heap cost.
Automatic Full profiles keep their existing accounting policy.
## Linked results
| Check | Baseline `76437c6bf` | Fixed `1d4016f48` |
| --- | ---: | ---: |
| Static DRAM region | 124,580 bytes | 124,580 bytes |
| Occupied static span | 122,964 bytes | 112,140 bytes |
| Static DRAM free | 1,616 bytes | 12,440 bytes |
| Required static reserve | 8,192 bytes | 8,192 bytes |
| Margin above reserve | -6,576 bytes, FAIL | 4,248 bytes, PASS |
The fixed image saves **10,824 static bytes**. Its runtime model passes with
181,400 internal bytes available versus 141,104 required, including the extra
reader allowance. The modeled margin is 40,296 bytes; these are linked
capacity estimates, not running free-heap or fragmentation measurements.
The application occupies 1,810,568 of 3,342,336 app-slot bytes. The partition
table is byte-identical to the baseline. Both firmware and merged packages,
capability verification and unchanged application-size gates pass. The failed
baseline ELF/map and successful candidate/final artifacts are retained privately.
## Verification and limits
All 74 host test methods passed:
- 14 contact-cache methods, including the exact non-Full ESP32 160-contact
configuration with default secret-flash caching disabled. Sanitized cases
cover eviction, unchanged frames/files, full reload, cooperative saves,
held snapshots, failed-write rollback and cold-secret recalculation.
- 53 RAM-policy methods, including the resolved-environment metadata check.
Synthetic ELF checks reject the old capacity and one byte below the new
requirement, and accept the exact new boundary.
- Seven contact-lifetime, partial-record and packet-streaming methods.
The unit workflow now builds this exact classic ESP32 target at release-version
length and enforces both memory gates. The inherited power-saving alias is
checked by the recipe contract; an identical feature configuration was not
built a second time. No firmware feature or capacity was removed to obtain
the pass, and no memory gate was lowered.
No radio was flashed or contacted. Physical V2 boot, pairing/reconnect,
populated contact sync, filesystem latency and sleep remain outside this
build/host result. It closes the documented V2 RAM build failure, not those
hardware qualification claims.
@@ -0,0 +1,58 @@
{
"source_commit": "1d4016f483caaddebde4c923f7eea3dee27ac3ea",
"source_clean": true,
"canonical_target": "Heltec_v2_companion_radio_ble",
"runtime_profile": "cascade",
"build_profile": "auto",
"radio_preset": "usa-cascadia",
"version": "v1.18.0.1-halo-keymind-cascade-dev-1d4016f4",
"passed": true,
"static_used": 112140,
"static_limit": 124580,
"static_free": 12440,
"static_required_reserve": 8192,
"static_margin": 4248,
"static_saved": 10824,
"runtime_available": 181400,
"runtime_required": 141104,
"runtime_margin": 40296,
"cache_reader_allowance": 6144,
"partitions_unchanged": true,
"capabilities_verified": true,
"reductions": [],
"host_test_methods_passed": 74,
"hardware_tested": false,
"preserved": {
"contacts": 160,
"channels": 8,
"offline_frames": 128,
"bluetooth_host": "Bluedroid",
"existing_bonds": "unchanged storage and host",
"contact_record_bytes": 152
},
"artifact_sha256": {
"Heltec_v2_companion_radio_ble.partsig": "a743a4253cddb196524eca11ec4ca63235f8116ed4e5db0363a75842bd7a41b7",
"Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.memory.json": "ba9a300ac2ea16855817f3fafa2527cd4e36868b95d3cb9d6af28423e34c64eb",
"Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.bin": "09d01ea046e80d6b480e15b00c3cfeef0587a638447c6b6234a8d645c7b1dc48",
"Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4-merged.bin": "4ba76ada54a961cd58bf998160349d3e3be4898d27d515a6068148410f2442ad",
"Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.capabilities.json": "7e306f4a70e02975c86d4623c84f5e80d8f6c753a4bd3b4fa0d227e37257ed2c",
"Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.meshtext-license.txt": "c37d0a453a2491514bac33ed835c1877f207390f134ae439a97b06b004e236d2"
},
"linked_artifacts_sha256": {
"firmware.elf": "e211590b2bfae32fad0cf5cd5a6040a318b838ca3ff515eef58bf1187716058e",
"partitions.bin": "1d9cca96de0fe07ad7fc0648b9878ddecd9ce565e38b589ad20fea698ed4c80c",
"firmware.map": "f24a4f1252ea9a144bf76e4cad42964b5fda39e2155cdfcf8c7a3e099b7bfb8c"
},
"schema": 1,
"scope": "Clean V2 BLE canonical build and host validation; no hardware qualification",
"baseline": {
"source_commit": "76437c6bf8b9e6589b150f265f41bac829e1584f",
"source_clean": true,
"passed": false,
"static_dram_used": 122964,
"static_dram_limit": 124580,
"static_dram_free": 1616,
"static_dram_required_reserve": 8192,
"static_dram_short_by": 6576
}
}
+1
View File
@@ -70,6 +70,7 @@ Completed validation reports, experiments, and test guides are collected here. O
## Build, storage, memory, and checklists
- [Heltec V2 BLE RAM reserve repair, 2026-10-22](heltec_v2_ble_memory_2026-10-22.md)
- [ESP32 Bluetooth shutdown and radio2 CPU idle, 2026-10-21](esp32_ble_radio2_sleep_2026-10-21.md)
- [RAK3401 all firmware CPU sleep checks, 2026-10-21](rak3401_all_roles_cpu_sleep_2026-10-21.md)
- [Shared contact RAM savings and RAK4631 Full qualification, 2026-10-19](contact_memory_2026-10-19.md)