From fd8a0be97e01daed13a3da60a588728b25231792 Mon Sep 17 00:00:00 2001 From: GlassOnTin Date: Tue, 7 Apr 2026 19:34:43 +0100 Subject: [PATCH] Fix: don't write CONF_OK in self-provisioning (corrupts SX1262 calibration) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Self-provisioning wrote CONF_OK_BYTE without writing radio config values (freq/bw/sf/txp). This caused eeprom_conf_load() to load 0xFFFFFFFF into lora_freq, then startRadio() called begin(0xFFFFFFFF) which ran calibrate_image() with an impossible frequency — no matching band, leaving PLL/image calibration corrupted. Even when beacon_update() later set correct params, the initial bad calibration persisted. This was the root cause of the recurring LoRa RX decode failure after any flash erase + re-provision cycle. --- RNode_Firmware.ino | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino index e98327a..5cf8213 100644 --- a/RNode_Firmware.ino +++ b/RNode_Firmware.ino @@ -172,7 +172,9 @@ void setup() { EEPROM.write(eeprom_addr(ADDR_MADE+2), 0x00); EEPROM.write(eeprom_addr(ADDR_MADE+3), 0x00); EEPROM.write(eeprom_addr(ADDR_INFO_LOCK), INFO_LOCK_BYTE); - EEPROM.write(eeprom_addr(ADDR_CONF_OK), CONF_OK_BYTE); + // Do NOT write CONF_OK_BYTE — radio config (freq/bw/sf) is not set. + // If CONF_OK is set, eeprom_conf_load() loads 0xFFFFFFFF into lora_freq + // and startRadio() calls begin(0xFFFFFFFF) which corrupts SX1262 calibration. // Compute and write EEPROM checksum (MD5 of first CHECKSUMMED_SIZE bytes) char chk_data[CHECKSUMMED_SIZE]; for (uint8_t i = 0; i < CHECKSUMMED_SIZE; i++)