Si4012 and CC1101

Si4012 and CC1101

Something completely different for a change: I recently designed a simple sensor network, and wanted to keep the cost of the sensor nodes down while using the 434MHz band for range reasons. The Silicon Labs Si4012 transmitter fit the bill very nicely, but I was already happily using a Texas Instruments CC1101 radio as the receiver.

Below are the settings for the CC1101 and Si4012, the modulation is 2-FSK and the bit rate is 38.4kpbs. First the CC1101 register settings:

    static constexpr uint8_t cc110x_default_init_values[][2] = {
            {CC1101_IOCFG0,      0x2F},
            {CC1101_IOCFG1,      0x2F},
            {CC1101_IOCFG2,      0x06},
            {CC1101_FIFOTHR,     0x47}, // RX attenuation 6dB, 33/32 byte threshold
            {CC1101_PKTLEN,      0x3D}, // 62 bytes max packet length
            {CC1101_PKTCTRL1,    0x0C}, // CRC autoflush, status append
            {CC1101_PKTCTRL0,    0x05}, // TX/RX CRC enabled, variable packet length
            {CC1101_FSCTRL1,     0x06}, // 152kHz IF frequency
            {CC1101_FREQ2,       0x10}, // 434 MHz carrier frequency
            {CC1101_FREQ1,       0xB1},
            {CC1101_FREQ0,       0x3B},
            {CC1101_MDMCFG4,     0xFA}, // 135kHz channel bandwidth
            {CC1101_MDMCFG3,     0x83}, // 38.4kbps symbol rate
            {CC1101_MDMCFG2,     0x06}, // 2-FSK, 16/16 sync word detection, carrier sense
            {CC1101_MDMCFG1,     0x42}, // 8 bytes preamble
            {CC1101_DEVIATN,     0x27}, // 11.9kHz FSK deviation
            {CC1101_MCSM1,       0x3c},
            {CC1101_MCSM0,       0x18},
            {CC1101_FOCCFG,      0x16},
            {CC1101_WORCTRL,     0xFB},
            {CC1101_FSCAL3,      0xE9},
            {CC1101_FSCAL2,      0x2A},
            {CC1101_FSCAL1,      0x00},
            {CC1101_FSCAL0,      0x1F},
            {CC1101_TEST2,       0x81},
            {CC1101_TEST1,       0x35},
            {CC1101_TEST0,       0x09},

And this is the Si4012 configuration (these are properties, to be set via the SET_PROPERTY command:

    static constexpr uint8_t pa_config[7] = {0x60, 0x01, 0x71, 0x00, 0x19, 0x7d, 0xff};
    static constexpr uint8_t tx_freq[5] = {0x40, 0x19, 0xde, 0x7f, 0x60};
    static constexpr uint8_t modulation_fskdev[3] = {0x20, 0x01, 0x0b};
    static constexpr uint8_t bitrate_config[4] = {0x31, 0x01, 0x80, 0x04};
    static constexpr uint8_t chip_config[2] = {0x10, 0x00};

When sending from the Si4012, the preamble (8 x 0xaa), the sync word (0xd391) and the CRC need to be added manually to the packet.