2023-07-03 09:48:47 +00:00
# include "cc1101_configs.h"
# include <cc1101_regs.h>
2023-07-03 10:36:26 +00:00
const uint8_t subghz_device_cc1101_preset_ook_270khz_async_regs [ ] = {
2023-07-03 09:48:47 +00:00
// https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/382066/cc1101---don-t-know-the-correct-registers-configuration
/* GPIO GD0 */
2023-07-03 10:36:26 +00:00
CC1101_IOCFG0 ,
0x0D , // GD0 as async serial data output/input
2023-07-03 09:48:47 +00:00
/* FIFO and internals */
2023-07-03 10:36:26 +00:00
CC1101_FIFOTHR ,
0x47 , // The only important bit is ADC_RETENTION, FIFO Tx=33 Rx=32
2023-07-03 09:48:47 +00:00
/* Packet engine */
2023-07-03 10:36:26 +00:00
CC1101_PKTCTRL0 ,
0x32 , // Async, continious, no whitening
2023-07-03 09:48:47 +00:00
/* Frequency Synthesizer Control */
2023-07-03 10:36:26 +00:00
CC1101_FSCTRL1 ,
0x06 , // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
2023-07-03 09:48:47 +00:00
// Modem Configuration
2023-07-03 10:36:26 +00:00
CC1101_MDMCFG0 ,
0x00 , // Channel spacing is 25kHz
CC1101_MDMCFG1 ,
0x00 , // Channel spacing is 25kHz
CC1101_MDMCFG2 ,
0x30 , // Format ASK/OOK, No preamble/sync
CC1101_MDMCFG3 ,
0x32 , // Data rate is 3.79372 kBaud
CC1101_MDMCFG4 ,
0x67 , // Rx BW filter is 270.833333kHz
2023-07-03 09:48:47 +00:00
/* Main Radio Control State Machine */
2023-07-03 10:36:26 +00:00
CC1101_MCSM0 ,
0x18 , // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
2023-07-03 09:48:47 +00:00
/* Frequency Offset Compensation Configuration */
2023-07-03 10:36:26 +00:00
CC1101_FOCCFG ,
0x18 , // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
2023-07-03 09:48:47 +00:00
/* Automatic Gain Control */
2023-07-03 10:36:26 +00:00
CC1101_AGCCTRL0 ,
0x40 , // 01 - Low hysteresis, small asymmetric dead zone, medium gain; 00 - 8 samples agc; 00 - Normal AGC, 00 - 4dB boundary
CC1101_AGCCTRL1 ,
0x00 , // 0; 0 - LNA 2 gain is decreased to minimum before decreasing LNA gain; 00 - Relative carrier sense threshold disabled; 0000 - RSSI to MAIN_TARGET
CC1101_AGCCTRL2 ,
0x03 , // 00 - DVGA all; 000 - MAX LNA+LNA2; 011 - MAIN_TARGET 24 dB
2023-07-03 09:48:47 +00:00
/* Wake on radio and timeouts control */
2023-07-03 10:36:26 +00:00
CC1101_WORCTRL ,
0xFB , // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
2023-07-03 09:48:47 +00:00
/* Frontend configuration */
2023-07-03 10:36:26 +00:00
CC1101_FREND0 ,
0x11 , // Adjusts current TX LO buffer + high is PATABLE[1]
CC1101_FREND1 ,
0xB6 , //
2023-07-03 09:48:47 +00:00
2023-07-03 10:36:26 +00:00
/* End load reg */
0 ,
0 ,
//ook_async_patable[8]
0x00 ,
0xC0 , // 12dBm 0xC0, 10dBm 0xC5, 7dBm 0xCD, 5dBm 0x86, 0dBm 0x50, -6dBm 0x37, -10dBm 0x26, -15dBm 0x1D, -20dBm 0x17, -30dBm 0x03
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
2023-07-03 09:48:47 +00:00
} ;
2023-07-03 10:36:26 +00:00
const uint8_t subghz_device_cc1101_preset_ook_650khz_async_regs [ ] = {
2023-07-03 09:48:47 +00:00
// https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/382066/cc1101---don-t-know-the-correct-registers-configuration
/* GPIO GD0 */
2023-07-03 10:36:26 +00:00
CC1101_IOCFG0 ,
0x0D , // GD0 as async serial data output/input
2023-07-03 09:48:47 +00:00
/* FIFO and internals */
2023-07-03 10:36:26 +00:00
CC1101_FIFOTHR ,
0x07 , // The only important bit is ADC_RETENTION
2023-07-03 09:48:47 +00:00
/* Packet engine */
2023-07-03 10:36:26 +00:00
CC1101_PKTCTRL0 ,
0x32 , // Async, continious, no whitening
2023-07-03 09:48:47 +00:00
/* Frequency Synthesizer Control */
2023-07-03 10:36:26 +00:00
CC1101_FSCTRL1 ,
0x06 , // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
2023-07-03 09:48:47 +00:00
// Modem Configuration
2023-07-03 10:36:26 +00:00
CC1101_MDMCFG0 ,
0x00 , // Channel spacing is 25kHz
CC1101_MDMCFG1 ,
0x00 , // Channel spacing is 25kHz
CC1101_MDMCFG2 ,
0x30 , // Format ASK/OOK, No preamble/sync
CC1101_MDMCFG3 ,
0x32 , // Data rate is 3.79372 kBaud
CC1101_MDMCFG4 ,
0x17 , // Rx BW filter is 650.000kHz
2023-07-03 09:48:47 +00:00
/* Main Radio Control State Machine */
2023-07-03 10:36:26 +00:00
CC1101_MCSM0 ,
0x18 , // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
2023-07-03 09:48:47 +00:00
/* Frequency Offset Compensation Configuration */
2023-07-03 10:36:26 +00:00
CC1101_FOCCFG ,
0x18 , // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
2023-07-03 09:48:47 +00:00
/* Automatic Gain Control */
2023-07-03 10:36:26 +00:00
// CC1101_AGCTRL0,0x40, // 01 - Low hysteresis, small asymmetric dead zone, medium gain; 00 - 8 samples agc; 00 - Normal AGC, 00 - 4dB boundary
// CC1101_AGCTRL1,0x00, // 0; 0 - LNA 2 gain is decreased to minimum before decreasing LNA gain; 00 - Relative carrier sense threshold disabled; 0000 - RSSI to MAIN_TARGET
// CC1101_AGCCTRL2, 0x03, // 00 - DVGA all; 000 - MAX LNA+LNA2; 011 - MAIN_TARGET 24 dB
2023-07-03 09:48:47 +00:00
//MAGN_TARGET for RX filter BW =< 100 kHz is 0x3. For higher RX filter BW's MAGN_TARGET is 0x7.
2023-07-03 10:36:26 +00:00
CC1101_AGCCTRL0 ,
0x91 , // 10 - Medium hysteresis, medium asymmetric dead zone, medium gain ; 01 - 16 samples agc; 00 - Normal AGC, 01 - 8dB boundary
CC1101_AGCCTRL1 ,
0x0 , // 0; 0 - LNA 2 gain is decreased to minimum before decreasing LNA gain; 00 - Relative carrier sense threshold disabled; 0000 - RSSI to MAIN_TARGET
CC1101_AGCCTRL2 ,
0x07 , // 00 - DVGA all; 000 - MAX LNA+LNA2; 111 - MAIN_TARGET 42 dB
2023-07-03 09:48:47 +00:00
/* Wake on radio and timeouts control */
2023-07-03 10:36:26 +00:00
CC1101_WORCTRL ,
0xFB , // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
2023-07-03 09:48:47 +00:00
/* Frontend configuration */
2023-07-03 10:36:26 +00:00
CC1101_FREND0 ,
0x11 , // Adjusts current TX LO buffer + high is PATABLE[1]
CC1101_FREND1 ,
0xB6 , //
2023-07-03 09:48:47 +00:00
2023-07-03 10:36:26 +00:00
/* End load reg */
0 ,
0 ,
//ook_async_patable[8]
0x00 ,
0xC0 , // 12dBm 0xC0, 10dBm 0xC5, 7dBm 0xCD, 5dBm 0x86, 0dBm 0x50, -6dBm 0x37, -10dBm 0x26, -15dBm 0x1D, -20dBm 0x17, -30dBm 0x03
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
2023-07-03 09:48:47 +00:00
} ;
2023-07-03 10:36:26 +00:00
const uint8_t subghz_device_cc1101_preset_2fsk_dev2_38khz_async_regs [ ] = {
2023-07-03 09:48:47 +00:00
/* GPIO GD0 */
2023-07-03 10:36:26 +00:00
CC1101_IOCFG0 ,
0x0D , // GD0 as async serial data output/input
2023-07-03 09:48:47 +00:00
/* Frequency Synthesizer Control */
2023-07-03 10:36:26 +00:00
CC1101_FSCTRL1 ,
0x06 , // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
2023-07-03 09:48:47 +00:00
/* Packet engine */
2023-07-03 10:36:26 +00:00
CC1101_PKTCTRL0 ,
0x32 , // Async, continious, no whitening
CC1101_PKTCTRL1 ,
0x04 ,
2023-07-03 09:48:47 +00:00
// // Modem Configuration
2023-07-03 10:36:26 +00:00
CC1101_MDMCFG0 ,
0x00 ,
CC1101_MDMCFG1 ,
0x02 ,
CC1101_MDMCFG2 ,
0x04 , // Format 2-FSK/FM, No preamble/sync, Disable (current optimized)
CC1101_MDMCFG3 ,
0x83 , // Data rate is 4.79794 kBaud
CC1101_MDMCFG4 ,
0x67 , //Rx BW filter is 270.833333 kHz
CC1101_DEVIATN ,
0x04 , //Deviation 2.380371 kHz
2023-07-03 09:48:47 +00:00
/* Main Radio Control State Machine */
2023-07-03 10:36:26 +00:00
CC1101_MCSM0 ,
0x18 , // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
2023-07-03 09:48:47 +00:00
/* Frequency Offset Compensation Configuration */
2023-07-03 10:36:26 +00:00
CC1101_FOCCFG ,
0x16 , // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
2023-07-03 09:48:47 +00:00
/* Automatic Gain Control */
2023-07-03 10:36:26 +00:00
CC1101_AGCCTRL0 ,
0x91 , //10 - Medium hysteresis, medium asymmetric dead zone, medium gain ; 01 - 16 samples agc; 00 - Normal AGC, 01 - 8dB boundary
CC1101_AGCCTRL1 ,
0x00 , // 0; 0 - LNA 2 gain is decreased to minimum before decreasing LNA gain; 00 - Relative carrier sense threshold disabled; 0000 - RSSI to MAIN_TARGET
CC1101_AGCCTRL2 ,
0x07 , // 00 - DVGA all; 000 - MAX LNA+LNA2; 111 - MAIN_TARGET 42 dB
2023-07-03 09:48:47 +00:00
/* Wake on radio and timeouts control */
2023-07-03 10:36:26 +00:00
CC1101_WORCTRL ,
0xFB , // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
2023-07-03 09:48:47 +00:00
/* Frontend configuration */
2023-07-03 10:36:26 +00:00
CC1101_FREND0 ,
0x10 , // Adjusts current TX LO buffer
CC1101_FREND1 ,
0x56 ,
2023-07-03 09:48:47 +00:00
2023-07-03 10:36:26 +00:00
/* End load reg */
0 ,
0 ,
// 2fsk_async_patable[8]
0xC0 , // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
2023-07-03 09:48:47 +00:00
} ;
2023-07-03 10:36:26 +00:00
const uint8_t subghz_device_cc1101_preset_2fsk_dev47_6khz_async_regs [ ] = {
2023-07-03 09:48:47 +00:00
/* GPIO GD0 */
2023-07-03 10:36:26 +00:00
CC1101_IOCFG0 ,
0x0D , // GD0 as async serial data output/input
2023-07-03 09:48:47 +00:00
/* Frequency Synthesizer Control */
2023-07-03 10:36:26 +00:00
CC1101_FSCTRL1 ,
0x06 , // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
2023-07-03 09:48:47 +00:00
/* Packet engine */
2023-07-03 10:36:26 +00:00
CC1101_PKTCTRL0 ,
0x32 , // Async, continious, no whitening
CC1101_PKTCTRL1 ,
0x04 ,
2023-07-03 09:48:47 +00:00
// // Modem Configuration
2023-07-03 10:36:26 +00:00
CC1101_MDMCFG0 ,
0x00 ,
CC1101_MDMCFG1 ,
0x02 ,
CC1101_MDMCFG2 ,
0x04 , // Format 2-FSK/FM, No preamble/sync, Disable (current optimized)
CC1101_MDMCFG3 ,
0x83 , // Data rate is 4.79794 kBaud
CC1101_MDMCFG4 ,
0x67 , //Rx BW filter is 270.833333 kHz
CC1101_DEVIATN ,
0x47 , //Deviation 47.60742 kHz
2023-07-03 09:48:47 +00:00
/* Main Radio Control State Machine */
2023-07-03 10:36:26 +00:00
CC1101_MCSM0 ,
0x18 , // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
2023-07-03 09:48:47 +00:00
/* Frequency Offset Compensation Configuration */
2023-07-03 10:36:26 +00:00
CC1101_FOCCFG ,
0x16 , // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
2023-07-03 09:48:47 +00:00
/* Automatic Gain Control */
2023-07-03 10:36:26 +00:00
CC1101_AGCCTRL0 ,
0x91 , //10 - Medium hysteresis, medium asymmetric dead zone, medium gain ; 01 - 16 samples agc; 00 - Normal AGC, 01 - 8dB boundary
CC1101_AGCCTRL1 ,
0x00 , // 0; 0 - LNA 2 gain is decreased to minimum before decreasing LNA gain; 00 - Relative carrier sense threshold disabled; 0000 - RSSI to MAIN_TARGET
CC1101_AGCCTRL2 ,
0x07 , // 00 - DVGA all; 000 - MAX LNA+LNA2; 111 - MAIN_TARGET 42 dB
2023-07-03 09:48:47 +00:00
/* Wake on radio and timeouts control */
2023-07-03 10:36:26 +00:00
CC1101_WORCTRL ,
0xFB , // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
2023-07-03 09:48:47 +00:00
/* Frontend configuration */
2023-07-03 10:36:26 +00:00
CC1101_FREND0 ,
0x10 , // Adjusts current TX LO buffer
CC1101_FREND1 ,
0x56 ,
2023-07-03 09:48:47 +00:00
2023-07-03 10:36:26 +00:00
/* End load reg */
0 ,
0 ,
2023-07-03 09:48:47 +00:00
2023-07-03 10:36:26 +00:00
// 2fsk_async_patable[8]
0xC0 , // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
2023-07-03 09:48:47 +00:00
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
2023-07-03 10:36:26 +00:00
} ;
const uint8_t subghz_device_cc1101_preset_msk_99_97kb_async_regs [ ] = {
/* GPIO GD0 */
CC1101_IOCFG0 ,
0x06 ,
CC1101_FIFOTHR ,
0x07 , // The only important bit is ADC_RETENTION
CC1101_SYNC1 ,
0x46 ,
CC1101_SYNC0 ,
0x4C ,
CC1101_ADDR ,
2023-07-03 09:48:47 +00:00
0x00 ,
2023-07-03 10:36:26 +00:00
CC1101_PKTLEN ,
2023-07-03 09:48:47 +00:00
0x00 ,
2023-07-03 10:36:26 +00:00
CC1101_CHANNR ,
2023-07-03 09:48:47 +00:00
0x00 ,
2023-07-03 10:36:26 +00:00
CC1101_PKTCTRL0 ,
0x05 ,
CC1101_FSCTRL0 ,
0x23 ,
CC1101_FSCTRL1 ,
0x06 ,
CC1101_MDMCFG0 ,
0xF8 ,
CC1101_MDMCFG1 ,
0x22 ,
CC1101_MDMCFG2 ,
0x72 ,
CC1101_MDMCFG3 ,
0xF8 ,
CC1101_MDMCFG4 ,
0x5B ,
CC1101_DEVIATN ,
0x47 ,
CC1101_MCSM0 ,
0x18 ,
CC1101_FOCCFG ,
0x16 ,
CC1101_AGCCTRL0 ,
0xB2 ,
CC1101_AGCCTRL1 ,
2023-07-03 09:48:47 +00:00
0x00 ,
2023-07-03 10:36:26 +00:00
CC1101_AGCCTRL2 ,
0xC7 ,
CC1101_FREND0 ,
0x10 ,
CC1101_FREND1 ,
0x56 ,
CC1101_BSCFG ,
0x1C ,
CC1101_FSTEST ,
0x59 ,
2023-07-03 09:48:47 +00:00
2023-07-03 10:36:26 +00:00
/* End load reg */
0 ,
0 ,
// msk_async_patable[8]
2023-07-03 09:48:47 +00:00
0xC0 , // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
2023-07-03 10:36:26 +00:00
} ;
const uint8_t subghz_device_cc1101_preset_gfsk_9_99kb_async_regs [ ] = {
CC1101_IOCFG0 ,
0x06 , //GDO0 Output Pin Configuration
CC1101_FIFOTHR ,
0x47 , //RX FIFO and TX FIFO Thresholds
//1 : CRC calculation in TX and CRC check in RX enabled,
//1 : Variable packet length mode. Packet length configured by the first byte after sync word
CC1101_PKTCTRL0 ,
0x05 ,
CC1101_FSCTRL1 ,
0x06 , //Frequency Synthesizer Control
CC1101_SYNC1 ,
0x46 ,
CC1101_SYNC0 ,
0x4C ,
CC1101_ADDR ,
2023-07-03 09:48:47 +00:00
0x00 ,
2023-07-03 10:36:26 +00:00
CC1101_PKTLEN ,
2023-07-03 09:48:47 +00:00
0x00 ,
2023-07-03 10:36:26 +00:00
CC1101_MDMCFG4 ,
0xC8 , //Modem Configuration 9.99
CC1101_MDMCFG3 ,
0x93 , //Modem Configuration
CC1101_MDMCFG2 ,
0x12 , // 2: 16/16 sync word bits detected
CC1101_DEVIATN ,
0x34 , //Deviation = 19.042969
CC1101_MCSM0 ,
0x18 , //Main Radio Control State Machine Configuration
CC1101_FOCCFG ,
0x16 , //Frequency Offset Compensation Configuration
CC1101_AGCCTRL2 ,
0x43 , //AGC Control
CC1101_AGCCTRL1 ,
0x40 ,
CC1101_AGCCTRL0 ,
0x91 ,
CC1101_WORCTRL ,
0xFB , //Wake On Radio Control
/* End load reg */
0 ,
0 ,
// gfsk_async_patable[8]
2023-07-03 09:48:47 +00:00
0xC0 , // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
0x00 ,
2023-07-03 10:36:26 +00:00
0x00 ,
} ;
// Shpargalka
// const uint8_t subghz_device_cc1101_preset_ook_async_patable[8] = {
// 0x00,
// 0xC0, // 12dBm 0xC0, 10dBm 0xC5, 7dBm 0xCD, 5dBm 0x86, 0dBm 0x50, -6dBm 0x37, -10dBm 0x26, -15dBm 0x1D, -20dBm 0x17, -30dBm 0x03
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00};
// const uint8_t subghz_device_cc1101_preset_ook_async_patable_au[8] = {
// 0x00,
// 0x37, // 12dBm 0xC0, 10dBm 0xC5, 7dBm 0xCD, 5dBm 0x86, 0dBm 0x50, -6dBm 0x37, -10dBm 0x26, -15dBm 0x1D, -20dBm 0x17, -30dBm 0x03
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00};
// const uint8_t subghz_device_cc1101_preset_2fsk_async_patable[8] = {
// 0xC0, // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00};
// const uint8_t subghz_device_cc1101_preset_msk_async_patable[8] = {
// 0xC0, // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00};
// const uint8_t subghz_device_cc1101_preset_gfsk_async_patable[8] = {
// 0xC0, // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00,
// 0x00};