This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1352R: Obtaining Frequency Offset Compensation for Proprietary Protocol

Part Number: CC1352R
Other Parts Discussed in Thread: CC2510

We are developing our next generation product using the CC1352R micro-controller, porting our proprietary protocol (2.4GHz, FSK, FHSS, data rate of 12 kbod) from the current product which uses your CC2510. The ported communication is working, one thing that we would like to have is the frequency offset information on a received data packet. I have found information online (RF Core, section 14.1 Frequency Offset Compensation) with an description of how to obtain the frequency offset, using an immediate command after receipt of a packet, with a rfc_CMD_READ_RFREG_t structure, field .commandNo set to 0x0601, field .address set to 0x5154. The offset is to be returned in the .value field. After successful receipt of a packet and within the RX callback,  issuing the immediate command via RF_runImmediateCmd, its return status indicates the command was successful but the contents found in the value field is always 0, no matter how far we purposefully change the frequency to be 'off center', to the point where communication stops (i.e., way too far off expected frequency). Any help you could provide or additional suggested material to read would be appreciated. Thank you.

code snippet follows

declared outside RX callback function

uint32_t offsetValue = 0;

rfc_CMD_READ_RFREG_t RF_cmdReadRfregFreqOffset =
{
.commandNo = CMD_READ_RFREG, // 0x0601,
.address = 0x5154,
.value = 12,  // NOTE: was using zero, just wanted to confirm value changed to zero via immediate command
};

within RX callback function

... have successfully obtained a packet

if ((RFRX_immediateCommandStatus = RF_runImmediateCmd(h, (uint32_t*)&RF_cmdReadRfregFreqOffset)) == RF_StatCmdDoneSuccess)

{

offsetValue = RF_cmdReadRfregFreqOffset.value;

// Note calculation would be performed here but value is always 0.