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.

Question regarding CC1101 Radio Module with MSP430: Development Board F5438 - RF Settings and Data Packets

Other Parts Discussed in Thread: TEST2

Below is a partial email correspondence started with TI, as I was told to post here.

 

Issues:

1) Firmware: SmartRFStudio asks to 'update' to an older version of the development board firmware - is this correct or acceptable, or will I lose functionality? When I start RFStudio (the latest version available on the website, 1.3.2), I double-click on ‘Connected Devices’ and a window pops up saying ‘The Evaluation Board is running unknown firmware or an obsolete version of the standard firmware. Current Version: 2.4.8.02, Update to: 2.4.4.0 ?’


2) Other RFStudio: I can still open the control panel without this firmware update, and therefore play around with some register settings, but I cannot test and upload them. My workaround to this is rather simple, I simply input the register settings directly to the RF settings in the appropriate C file of the compiler. I’ve gotten the radio to work at the desired 500 KBaud, but I’d like to run TI’s tests just to know if everything is done correctly. Also, I noticed that when I input my desired settings (904 MHz base freq, 60 channels for hopping, 350 kHz channel spacing, 26 MHz Xtal freq, 499.878 kBaud, 464.28 RX filter BW, MSK, and 10 dBm TX power), the register settings seem to default to an infinite packet length, synchronous serial mode. I’ve changed the register settings to our desired variable-length packet mode (up to 255 bytes) and we utilize the TX and RX FIFO’s. I guess my question is – why is the only available ‘typical setting’ for 500kBaud this synchronous serial mode? If we saturate the channel with a full datastream, will the radios be able to handle the 500 kBaud throughput using the variable-length packet mode? Is our setup just non-typical or would we see problems transferring that much packetized data? I will continue to devise my own tests, but I have a feeling that the tests within RFStudio take into account the limitations of the radio much better than I could.


3) Transmission Time and Delay: Our goal is to transmit an 80 byte packet 720 times each second (roughly 460kbps). I am noticing, with settings above, that transmitting an 80-byte packet takes approximately 1.5ms (measured with a scope and interrupt GDO0, which goes high when a sync word is detected in transmit, and goes low when an end-of-packet is detected). I also set up a test point that measures the time between calling a function to send packet (writing burst register to the TX FIFO and beginning the process) and when the actual sync word is detected and transmission begins (also the GDO0 trigger above)... and there is a delay of 1.2ms! This seems a very high latency for the radio to begin transmission and results in our data being fully transmitted after a total delay of 2.7ms... Even if I could get the radio to transmit a fully packed data stream of 80 bytes / 1.5 ms (which seems unlikely), this only translates to roughly 426kBaud. I am not achieving the target 500kBaud data rate that is advertised. My RFSettings are listed below - those unlisted are default values.

 

void writeRFSettings(void) {
    // Write register settings
    CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x00); // GDO2 RX FIFO > THRESHOLD to RX FIFO < THRESHOLD
    CC_SPIWriteReg(TI_CCxxx0_IOCFG1,   0x0B); // Serial Clock
    CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06); // Goes low on FIFO overflow/underflow
    CC_SPIWriteReg(TI_CCxxx0_FIFOTHR, RF_FIFO_THR);
    CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF); // Packet length.
    CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); // Packet automation control.
    // Address check, no broadcast = 1 + APPEND_STATUS = 4
    CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05); // Packet automation control.
    // variable packet = 1, enable CRC = 4
    CC_SPIWriteReg(TI_CCxxx0_ADDR,     RF_ADDRESS); // Device address.
    CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
    CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x0B); // Freq synthesizer control.
    CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
    CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x22); // Freq control word, high byte
    CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0xC4); // Freq control word, mid byte.
    CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0xEC); // Freq control word, low byte.     
    CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x3E); // Modem configuration.
    CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x0C); // Modem configuration.          
    CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
    CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x43); // Modem configuration.
    CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xB9); // Modem configuration.
    CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
    CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
    CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
    CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compens. Config
    CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
    CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
    CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
    CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
    CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
    CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
    CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
    CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
    CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
    CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x1F); // Frequency synthesizer cal.      
    CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
    CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
    CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
    CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B); // Various test settings.  

 

Any help is greatly appreciated. I will continue testing and be eying this forum frequently.

  • also, sorry, FIFO_THR is decimal 12, or 0x0C, didn't realize I had a define in there

  • I'll have to defer #1 to the tools team.

    #2 is also a tools team question but my suspicion is the answer will be somewhat like "you have to default to somewhere".  However, there is no reason you shouldn't be able to change the register settings in SmartRF Studio and export them in a manner which is consistent with what you want in your C file.  Perhaps if you could give a more step by step process I could help troubleshoot...

    The latency you are seeing from filing the TX FIFO to start of transmission is most likely due to the auto calibration step being performed.  This will take around 800us to complete which is about 67% of the timing you are seeing.  You have a couple of options here, 1) turn off calibration entirely and do it manually, 2) set calibration to only occur 1out of 4 transmissions.

    In the first case, you simply take on the responsibility of calibrating the radio yourself by issuing a calibrate command to the radio state machine.  This allows you to send any number of packets between calibrations and can save you considerable time when your overall com budget is tight.  The second case is merely a change in the register settings which calibrates every 4th transmit or receive command instead of every time.  This may be enough to by back what you need in your com budget but you will have to do the math to be sure.

    Note that the 500kbps data rate is not an average data rate but actual data rate.  Thus when you consider the time to transmit the preamble, sync word, length byte, and possibly CRC data as well, you can see that the average user data rate will be somewhat less than actual data rate.  I understand you may feel as though you have been mislead by some marketing hype, but the reality is all radios are spec'd this way including our competitors so at least you can compare apples to apples.  The reason for specifying radios in this manner is not to try to mislead you but rather because the size of the sync word and length of the preamble are up to the user to specify and whether or not to include the CRC is also a user choice.  The length byte is also a user choice but without it you need to do some additional management of the radio in software so offering it is a tradeoff decision you make in designing your system architecture.  Because of this, the average user data rate is dependent upon system design parameters as much as the actual data rate.

    You may also need to manage the FIFO's during transmit and receive, i.e. keeping the FIFO full/empty during the transmit/receive process.  This can also minimize any dead time period between packets.

    Finally, if you are using an 1101 radio (which it sounds like you are), you can choose 4fsk for your modulation.  Set the data rate to 300kbps and since you are transmitting 2 bits per symbol you get an actual data rate of 600kbps.  This can help you achieve your com budget too.

    Jim Noxon