Other Parts Discussed in Thread: SYSCONFIG
Hello.
I'm having trouble with an asynchronous transmit with clear channel assessment. It operates fine for several minutes, but eventually it fails to call the txcb. I've checked that the RF_CmdHandle returned by the RF_postCmd function is valid. The call to EasyLink_transmitCcaAsync returns EasyLink_Status_Success, but the txcb is never called after sending or failing to send the packet.
CCA parameters:
//! EASYLINK_CCA_BACKOFF_TIMEUNITS, as a power of 2
#define EASYLINK_MIN_CCA_BACKOFF_WINDOW 5 // min backoff of 8ms
//! \brief Maximum CCA back-off window in units of
//! EASYLINK_CCA_BACKOFF_TIMEUNITS, as a power of 2
#define EASYLINK_MAX_CCA_BACKOFF_WINDOW 8 // max backoff of 64ms
//! \brief The back-off time units in microseconds
#define EASYLINK_CCA_BACKOFF_TIMEUNITS 250 // 0.25ms
//! \brief RSSI threshold for Clear Channel Assessment (CCA)
#define EASYLINK_CS_RSSI_THRESHOLD_DBM -70
//! \brief Time for which the channel RSSI must remain below the specified
//! threshold for the channel to be considered idle
#define EASYLINK_CHANNEL_IDLE_TIME_US 180000 // channel must remain idle for 180ms
// Configure the EasyLink Carrier Sense Command
memset(&EasyLink_cmdPropCs, 0, sizeof(rfc_CMD_PROP_CS_t));
EasyLink_cmdPropCs.commandNo = CMD_PROP_CS;
EasyLink_cmdPropCs.rssiThr = EASYLINK_CS_RSSI_THRESHOLD_DBM;
EasyLink_cmdPropCs.numRssiBusy = 5;
EasyLink_cmdPropCs.startTrigger.triggerType = TRIG_ABSTIME;
EasyLink_cmdPropCs.condition.rule = COND_STOP_ON_TRUE; // Stop next command if this command returned TRUE,
// End causes for the CMD_PROP_CS command:
// Observed channel state Busy with csConf.busyOp = 1: PROP_DONE_BUSY TRUE
// 0bserved channel state Idle with csConf.idleOp = 1: PROP_DONE_IDLE FALSE
// Timeout trigger observed with channel state Busy: PROP_DONE_BUSY TRUE
// Timeout trigger observed with channel state Idle: PROP_DONE_IDLE FALSE
// Timeout trigger observed with channel state Invalid and csConf.timeoutRes = 0: PROP_DONE_BUSYTIMEOUT TRUE
// Timeout trigger observed with channel state Invalid and csConf.timeoutRes = 1: PROP_DONE_IDLETIMEOUT FALSE
// Received CMD_STOP after command started: PROP_DONE_STOPPED FALSE
EasyLink_cmdPropCs.csConf.bEnaRssi = 0x1; // Enable RSSI as a criterion
EasyLink_cmdPropCs.csConf.bEnaCorr = 0x1; // Enable correlation as a criterion
EasyLink_cmdPropCs.csConf.operation = 0x0; //!< \brief 0: Busy if either RSSI or correlation indicates Busy<br>
//!< 1: Busy if both RSSI and correlation indicates Busy
EasyLink_cmdPropCs.corrPeriod = 0x20; // Number of RAT ticks for a correlation observation periods (*4 for us)
EasyLink_cmdPropCs.corrConfig.numCorrBusy = 0x3; //!< \brief Number of subsequent correlation tops with maximum <code>corrPeriod</code> RAT ticks between them
//!< needed to go from Invalid to Busy
EasyLink_cmdPropCs.corrConfig.numCorrInv = 0x2; //!< \brief Number of subsequent correlation tops with maximum <code>corrPeriod</code> RAT ticks between them
//!< needed to go from Idle to Invalid
EasyLink_cmdPropCs.csConf.busyOp = 0x1; // End carrier sense on channel Busy
EasyLink_cmdPropCs.csConf.idleOp = 0x0; // Continue carrier sense on channel Idle
EasyLink_cmdPropCs.csEndTrigger.triggerType = TRIG_REL_START; // Ends at a time relative to the command started
EasyLink_cmdPropCs.csEndTime = EasyLink_us_To_RadioTime(EASYLINK_CHANNEL_IDLE_TIME_US);
Thanks,
Nick