Skip to content

Commit 4090d9f

Browse files
authored
SX126x: re-apply 0x8B5 register in resetAGC() to preserve RX sensitivity (#10219)
The CALIBRATE_ALL (0x7F) command inside resetAGC() clears bit 0 of the undocumented 0x8B5 register. That bit is set once in init() by #9571 and #9777 to improve SX1262 RX sensitivity, and the AGC-reset path was not re-applying it. Result: every SX1262 node silently loses the RX sensitivity patch ~60s after boot and never recovers until reboot. Empirically confirmed on Heltec Mesh Node T114 (nRF52840 + SX1262): - Post-calibration read of 0x8B5 = 0x04 (bit 0 cleared) - After re-apply: 0x05 (bit 0 set) Reproducible every AGC_RESET_INTERVAL_MS tick. Fix re-applies the register bit alongside the existing post-calibration re-applies (setDio2AsRfSwitch, setRxBoostedGainMode).
1 parent d50caf2 commit 4090d9f

1 file changed

Lines changed: 9 additions & 0 deletions

File tree

src/mesh/SX126xInterface.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,15 @@ template <typename T> void SX126xInterface<T>::resetAGC()
455455
// RX boosted gain mode
456456
lora.setRxBoostedGainMode(config.lora.sx126x_rx_boosted_gain);
457457

458+
// Re-apply the undocumented 0x8B5 RX sensitivity patch that was set in init().
459+
// The CALIBRATE_ALL (0x7F) command above clears bit 0 of register 0x8B5, which
460+
// silently removes the RX sensitivity improvement introduced in #9571 / #9777.
461+
// Without this re-apply, every SX1262 node loses its RX boost ~60s after boot
462+
// and never recovers until reboot. See empirical evidence in the PR description.
463+
if (module.SPIsetRegValue(0x8B5, 0x01, 0, 0) != RADIOLIB_ERR_NONE) {
464+
LOG_WARN("SX126x resetAGC: failed to re-apply 0x8B5 RX sensitivity patch");
465+
}
466+
458467
// 6. Resume receiving
459468
startReceive();
460469
}

0 commit comments

Comments
 (0)