This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Radiated Immunity Certification problems/Unclear documentation about CCA

Hello there,

We're developing a chip with a nRF52840 as the only processor, which we're trying to get certified against 802.15.4. However, we had problems passing the radiated immunity test. We realized we didn't use the ack/resend functionality of 802.15.4, and that we probably wanted another CCA setting, so we made those changes in the software, and sent a new sample to the test lab. However, the new sample performed worse (dropped "most" instead of "some" packages, with variations depending on the external emission frequency). This surprised us.

As the documentation is slightly unclear on the following, my questions (to start with) are:

1. Given the configuration in the code snippet below, will the chip use Energy Detection as well as Carrier Detect, then report the channel clear to send on if at least one of the two measurements reports the channel clear?

2. Given the same snippet, will we actually set the Energy Detection to -80 dBm? That is, will ED report the channel clear to send on if the measured energy is beneath -80 dBm?

nrf_802154_cca_cfg_t cca_cfg = {
    .mode = NRF_RADIO_CCA_MODE_CARRIER_AND_ED,
    .ed_threshold = (uint8_t) -80,
    .corr_threshold = 0,
    .corr_limit = 0
};
nrf_802154_cca_cfg_set(&cca_cfg);


Other details:
Specific version of the nRF52, as read from the etching on the hardware:
N52840
Q1AAC0
1816AU

nRF5 SDK v15.0.0
nRF IEEE 802.15.4 radio driver 1.1.0
We use a Front End Module (FEM), SE2431L, which is controlled by the following insert into the 802.15.4 driver state machine:
/** Set driver state.
 *
 * @param[in]  state  Driver state to set.
 */
static void state_set(radio_state_t state)
{
    m_state = state;

    printf("%s", str_set);
    switch (state)
    {
        case RADIO_STATE_SLEEP:
        case RADIO_STATE_FALLING_ASLEEP:
        	antenna_sleep_mode();
            printf("%s", str_s);
            break;
        case RADIO_STATE_RX:
        case RADIO_STATE_RX_ACK:
            antenna_rx_mode();
            printf("%s", str_r);
//			antenna_bypass_mode();
            break;
        case RADIO_STATE_TX_ACK:
        case RADIO_STATE_CONTINUOUS_CARRIER:
        case RADIO_STATE_CCA_TX:
        case RADIO_STATE_TX:
            antenna_tx_mode();
            printf("%s", str_t);
            break;
        case RADIO_STATE_ED:
        case RADIO_STATE_CCA:
        default:
            antenna_bypass_mode();
            printf("%s", str_b);
            break;
    }

    nrf_802154_log(EVENT_SET_STATE, (uint32_t)state);
}


For the resend functionality, we let the chip send 4 times total before giving up.
The certification test setup has two copies of our chip, one which sends every second, and one that receives those messages and send them to a connected computer which logs when a message is missed.

Thank you in advance,

Gabriel


Related