Skip to content

Commit 84ce1ea

Browse files
nightjoker7thebentern
authored andcommitted
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 eba74fa commit 84ce1ea

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
@@ -448,6 +448,15 @@ template <typename T> void SX126xInterface<T>::resetAGC()
448448
// RX boosted gain mode
449449
lora.setRxBoostedGainMode(config.lora.sx126x_rx_boosted_gain);
450450

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

0 commit comments

Comments
 (0)