Other Parts Discussed in Thread: CC2544, CC2541
We need to implement a radio link between the existing CC2544 dongle and the new CC2640R2F prototype.
Bitrates with GFSK modulation, which CC2544 supports:
- 250 kbps,160 kHz deviation;
- 1 Mbps,160 kHz deviation;
- 1 Mbps, 250 kHz deviation;
- 2 Mbps, 320 kHz deviation;
- 2 Mbps, 500 kHz deviation.
On the CC2640R2F side we were able to realize only 250 kbps with a 160 kHz deviation. The source code fragment attached.
But we need to increase the bitrate to 2 Mbps or at least to 1 Mbps.
We ask you to give us the appropriate settings for a proprietary radio mode commands: 0x3806, 0x0803, 0x3801, 0x3802.
More, if possible, we would like to see the radio communication between two CC2640R2F chips at a 5 Mbps speed.
// Overrides for CMD_PROP_RADIO_SETUP
uint32_t pOverrides[] =
{
(uint32_t)0xFFFFFFFF,
};
// CMD_PROP_RADIO_SETUP
rfc_CMD_PROP_RADIO_SETUP_t RF_cmdPropRadioDivSetup =
{
.commandNo = 0x3806,
.status = 0x0000,
.pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.modulation.modType = 0x1,// 0: FSK, 1: GFSK, Others: Reserved
.modulation.deviation = 640,//Deviation (250-Hz steps) for FSK modulations
.symbolRate.preScale = 15,//p is the prescaler value, given by symbolRate.preScale, which can be from 4 to 15
.symbolRate.rateWord = 163840,//Fbaud = (R ◊ Fclk) / (p ◊ 2^20), Fclk is the system clock frequency of 24 MHz
.rxBw = 10,
.preamConf.nPreamBytes = 0x4,
.preamConf.preamMode = 0x0,
.formatConf.nSwBits = 32,
.formatConf.bBitReversal = 0x1,
.formatConf.bMsbFirst = 0x1,
.formatConf.fecMode = 0x0,
.formatConf.whitenMode = 0x0,
.config.frontEndMode = 0x0,
.config.biasMode = 0x0, //!< \brief 0: Internal bias, R2 skal ha internal
.config.analogCfgMode = 0x0,
.config.bNoFsPowerUp = 0x0,
.txPower = 0xAB3F,//0xAB3F: 0 Db
.pRegOverride = pOverrides,
};
// CMD_FS
rfc_CMD_FS_t RF_cmdFs =
{
.commandNo = 0x0803,
.status = 0x0000,
.pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.frequency = 2379,
.fractFreq = 0x0000,
.synthConf.bTxMode = 1,
.synthConf.refFreq = 0x0,
};
// CMD_PROP_TX
rfc_CMD_PROP_TX_t RF_cmdPropTx =
{
.commandNo = 0x3801,
.status = 0x0000,
.pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.pktConf.bFsOff = 0x0,
.pktConf.bUseCrc = 0x1,
.pktConf.bVarLen = 0x1,
.pktLen = 0x20,// SET APPLICATION PAYLOAD LENGTH
.syncWord = 0x29417671,
.pPkt = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};
// CMD_PROP_RX
rfc_CMD_PROP_RX_t RF_cmdPropRx =
{
.commandNo = 0x3802,
.status = 0x0000,
.pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.pktConf.bFsOff = 0x0,
.pktConf.bRepeatOk = 0x0,
.pktConf.bRepeatNok = 0x0,
.pktConf.bUseCrc = 0x1,
.pktConf.bVarLen = 0x1,
.pktConf.bChkAddress = 0x0,
.pktConf.endType = 0x0,
.pktConf.filterOp = 0x0,
.rxConf.bAutoFlushIgnored = 0x0,
.rxConf.bAutoFlushCrcErr = 0x0,
.rxConf.bIncludeHdr = 0x1,
.rxConf.bIncludeCrc = 0x0,
.rxConf.bAppendRssi = 0x0,
.rxConf.bAppendTimestamp = 0x0,
.rxConf.bAppendStatus = 0x1,
.syncWord = 0x29417671,
.maxPktLen = 0x7d, // MAKE SURE DATA ENTRY IS LARGE ENOUGH
.address0 = 0x00,
.address1 = 0x00,
.endTrigger.triggerType = 0x1,
.endTrigger.bEnaCmd = 0x0,
.endTrigger.triggerNo = 0x0,
.endTrigger.pastTrig = 0x0,
.endTime = 0x00000000,
.pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
.pOutput = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};