Part Number:CC1101-CC1190EM869RD
Tool/software: Linux
Hello! I designed a PCB based on your demo PC1101_CC1190EM 869MHz rev 2.1.0. I check on the spectral analyzer and do not really understand what is happening. There may be an error in the code when switching reception and transmission.
The board is not directly connected to the spectrum analyzer.
The board is installed on Raspberry Pi 3, using wiringPi SPI.
Software based on your Link2 example.
Base frequency: 869.524780 MHz
Xtal Freq: 27MHz
Data rate 38.4178 kBaud
Channel spacing: 207.641602 kHz
RX Filter BW: 105.468750 kHz
Deviation: 19.775391 kHz
Modulation: GFSK
TX Power (PA Table): 0xC0
Scheme
![]()
PCB 2-Layer
TOP Layer
![]()
BOTTOM Layer
![]()
Setting
uint8_t register_set_value[47] =
{
0x07, // IOCFG2 GDO2 Output Pin Configuration
0x2E, // IOCFG1 GDO1 Output Pin Configuration
0x06, // IOCFG0 GDO0 Output Pin Configuration
0x0E, // FIFOTHR RX FIFO and TX FIFO Thresholds
0xD3, // SYNC1 Sync Word, High Byte
0x91, // SYNC0 Sync Word, Low Byte
0xff, // PKTLEN Packet Length
0x44, // PKTCTRL1 Packet Automation Control
0x05, // PKTCTRL0 Packet Automation Control
0x00, // ADDR Device Address
0x00, // CHANNR Channel Number
0x06, // FSCTRL1 Frequency Synthesizer Control
0x00, // FSCTRL0 Frequency Synthesizer Control
0x20, // FREQ2 Frequency Control Word, High Byte
0x34, // FREQ1 Frequency Control Word, Middle Byte
0x62, // FREQ0 Frequency Control Word, Low Byte
0xCA, // MDMCFG4 Modem Configuration
0x75, // MDMCFG3 Modem Configuration
0x13, // MDMCFG2 Modem Configuration
0x42, // MDMCFG1 Modem Configuration
0xF8, // MDMCFG0 Modem Configuration
0x34, // DEVIATN Modem Deviation Setting
0x07, // MCSM2 Main Radio Control State Machine Configuration
0x30, // MCSM1 Main Radio Control State Machine Configuration
0x28, // MCSM0 Main Radio Control State Machine Configuration
0x16, // FOCCFG Frequency Offset Compensation Configuration
0x6C, // BSCFG Bit Synchronization Configuration
0x03, // AGCCTRL2 AGC Control
0x40, // AGCCTRL1 AGC Control
0x91, // AGCCTRL0 AGC Control
0x87, // WOREVT1 High Byte Event0 Timeout
0x6B, // WOREVT0 Low Byte Event0 Timeout
0xFB, // WORCTRL Wake On Radio Control
0x56, // FREND1 Front End RX Configuration
0x10, // FREND0 Front End TX Configuration
0xE9, // FSCAL3 Frequency Synthesizer Calibration
0x2A, // FSCAL2 Frequency Synthesizer Calibration
0x00, // FSCAL1 Frequency Synthesizer Calibration
0x1F, // FSCAL0 Frequency Synthesizer Calibration
0x41, //RC Oscillator Configuration
0x00, //RC Oscillator Configuration
0x59, //Frequency Synthesizer Calibration Control
0x7F, //Production Test
0x3F, //AGC Test
0x81, // TEST2 Various Test Settings
0x2D, // TEST1 Various Test Settings
0x09 // TEST0 Various Test Settings
};
Switching to transmission:
cc1101_StrobeCmd(SIDLE);
cc1101_StrobeCmd(SFTX);
cc1101_Write_BurstAccess(TX_FIFO, txBuffer, LENGHT_LENGHT_FIELD + txBuffer[0]); //DATA_LENGHT + CRC_LENGHT + LENGHT_LENGHT
cc1101_StrobeCmd(STX);
Switching to reception:
cc1101_StrobeCmd(SFTX);
cc1101_StrobeCmd(SIDLE);
cc1101_StrobeCmd(SFRX);
cc1101_StrobeCmd(SRX);
The transmission attempt is 5 times. On the screenshots of the spectral analyzer, you can see five transmissions. Why such a spread in frequency?
First send
![]()
Second
![]()
3
![]()
4
![]()
5
![]()
If you add a calligraphy before switching transitions, that is, like this:
Switching to transmission:
cc1101_StrobeCmd(SIDLE);
cc1101_StrobeCmd(SCAL);
cc1101_StrobeCmd(SFTX);
cc1101_Write_BurstAccess(TX_FIFO, txBuffer, LENGHT_LENGHT_FIELD + txBuffer[0]); //DATA_LENGHT + CRC_LENGHT + LENGHT_LENGHT
cc1101_StrobeCmd(STX);
Then the picture of the spectrum changes. I have not yet checked for data reception, but I'm still wondering if this is the correct behavior of the transmitter.
Here are all 5 transmission attempts.
![]()
How to properly switch between receiving and transmitting and correctly adjust the chip?