On Si4467/Si4468 A2A devices there exists an API command called OFFLINE_RECAL. The description of this API is rather confusing so I am trying to make things clear here.
The purpose of the API function is to allow the application to perform certain calibrations at its earliest convenience (rather than the FW doing it regardless of application state, i.e., doing a calibration while a message is being received ruining so the reception.)
Note that all calibrations are performed at POWER_UP. The OFFLINE_RECAL command repeats some of these calibrations if a temperature change makes this necessary.
There are two parameters to the API command:
OFFLINE_CAL: This bit tells the FW the type of calibration it must perform. There are two types of calibrations: OFFLINE_CAL and OFFLINE2_CAL. Which one the application needs to perform shall be read back from GET_CHIP_STATUS: INFO_FLAGS: CAL_TYPE.
TEMP: This bit tells the FW which temperature range the calibrations should be performed to. Use LOW_TEMP (0) if the application operates in the -40 to 85C range and use HIGH_TEMP if the application operates in the -40 to 135C temperature range.
Note that this field is missing from the public API. The public API should look like this:
The FW notifies the application when to run the offline calibrations. When a pending interrupt shows up in GET_CHIP_STATUS: CHIP_STATUS: CAL the application shall run the offline calibration type defined in GET_CHIP_STATUS: INFO_FLAGS: CAL_TYPE at its earliest convenience. The OFFLINE_RECAL command is recommended to be invoked in READY state. If it’s not invoked in READY state it will go back to READY state regardless which may interrupt Tx/Rx operations.
Note that a calibration notification for the 32k oscillator also shows up in GET_CHIP_STATUS: CHIP_STATUS: CAL. This means that if the 32k oscillator calibration and offline re-calibrations are used together the notification will not distinguish between the two rendering it not so useful. Note that the 32k oscillator calibrations will be run automatically at the next SLEEP transition without any application interaction so this is truly just a notification in this case. (More on the 32k oscillator calibration you can read at API properties GLOBA_WUT_CONFIG and GLOBAL_WUT_CAL in the API documentation.)
If you are in the unlucky situation of running the 32k clock calibration as well as the offline calibrations in one application, you can do one of the followings: