Persist Si4684 crystal calibration (ibias/ctun/xtalFreqHz) to EEPROM
Extends the existing FM/DAB ANTCAP EEPROM persistence pattern
(Eeprom24aa::writeFmAntCap/writeDabAntCap) to the crystal trim found by
POST /api/tuner/xtal-calibrate, which previously only applied live and
was lost on every reboot.
- Eeprom24aa gains readXtalCalibration()/writeXtalCalibration() at word
addresses 0x02 (ibias), 0x03 (ctun), 0x04-0x07 (xtalFreqHz,
big-endian), right after the existing FM/DAB ANTCAP bytes.
- HardwareBootstrap::boot() now boots ADAU1701 before Si4684 (needed so
the EEPROM read, which borrows ADAU1701's I2C bus, can happen before
Si4684's boot() call, which takes the crystal trim as an argument),
loads the saved trim if present, and falls back to the compiled-in
defaults (ibias=72, ctun=0, xtalFreqHz=19199750) otherwise.
- POST /api/tuner/xtal-calibrate now persists every successful live
recalibration automatically ("persisted":true/false in the response)
via a new saveXtalCalibration()/net::AntennaCalibration::saveXtal
bridge, mirroring the ANTCAP save pattern.
Verified live: boot log confirms "Xtal not calibrated" before the first
save, "Xtal calibration loaded: ibias=72 ctun=0 xtal_freq_hz=19199750"
after, surviving a reboot; DAB/FM tuning unaffected (DAB CNR 17-19dB,
locked).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -197,6 +197,26 @@ public:
|
||||
* @date 2026-08-20
|
||||
*/
|
||||
[[nodiscard]] static bool saveDabAntCapCalibration(std::uint8_t antCap);
|
||||
|
||||
/**
|
||||
* @brief saveXtalCalibration — persist the Si4684 crystal trim.
|
||||
*
|
||||
* @dname saveXtalCalibration
|
||||
* @param ibias Value found via POST /api/tuner/xtal-calibrate.
|
||||
* @param ctun Value found via POST /api/tuner/xtal-calibrate.
|
||||
* @param xtalFreqHz Value found via POST /api/tuner/xtal-calibrate.
|
||||
* @return true on success, false on an I2C failure.
|
||||
* @pubstate writes the 24AA025E48 user region. Does not itself reboot
|
||||
* the Si4684 — callers apply the values live via
|
||||
* Si4684Tuner::recalibrateXtal() first; boot() reads this back
|
||||
* on the next power-up so the trim survives a reboot.
|
||||
*
|
||||
* @author Michele Bigi
|
||||
* @date 2026-08-24
|
||||
*/
|
||||
[[nodiscard]] static bool saveXtalCalibration(std::uint8_t ibias,
|
||||
std::uint8_t ctun,
|
||||
std::uint32_t xtalFreqHz);
|
||||
};
|
||||
|
||||
} // namespace hardware
|
||||
|
||||
Reference in New Issue
Block a user