mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-11 07:24:20 +00:00
8c93695d01
* SubGhz: add CC1101 Ext driver * SubGhz: move TIM2 -> TIM17 use cc1101_ext * FuriHal: SPI move channel DMA 3,4 -> 6.7 * Documentation: fix font * SubGhz: add work with SubGhz devices by link to device * SubGhz: add support switching external/internal cc1101 "subghz chat" * SubGhz: add support switching external/internal cc1101 "subghz tx" and "subghz rx" * SubGhz: add "Radio Settings" scene * SubGhz: add icon * SubGhz: add supported CC1101 external module in SubGhz app * SubGhz: fix check frequency supported radio device * SubGhz: fix clang-formatted * Sughz: move dirver CC1101_Ext to lib , compile cmd ./fbt launch_app APPSRC=radio_device_cc1101_ext * SubGhz: fix CLI * SubGhz: fix PVS * SubGhz: delete comments * SubGhz: fix unit_test * Format sources * Update api symbols and drivers targets * Drivers: find proper place for target option * SubGhz: external device connected method naming * Format sources * SubGhz: fix module selection menu, when external is not connected * SubGhz: fix furi_assert(device); * SubGhz: fix split h and c * SubGhz: furi_hal_subghz remove preset load function by name * SubGhz: deleted comments * Format Sources * SubGhz: add some consts and fix unit tests * Sync API Symbols Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
431 lines
12 KiB
C
431 lines
12 KiB
C
#include "cc1101_configs.h"
|
|
#include <cc1101_regs.h>
|
|
|
|
const uint8_t subghz_device_cc1101_preset_ook_270khz_async_regs[] = {
|
|
// 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 */
|
|
CC1101_IOCFG0,
|
|
0x0D, // GD0 as async serial data output/input
|
|
|
|
/* FIFO and internals */
|
|
CC1101_FIFOTHR,
|
|
0x47, // The only important bit is ADC_RETENTION, FIFO Tx=33 Rx=32
|
|
|
|
/* Packet engine */
|
|
CC1101_PKTCTRL0,
|
|
0x32, // Async, continious, no whitening
|
|
|
|
/* Frequency Synthesizer Control */
|
|
CC1101_FSCTRL1,
|
|
0x06, // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
|
|
|
|
// Modem Configuration
|
|
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
|
|
|
|
/* Main Radio Control State Machine */
|
|
CC1101_MCSM0,
|
|
0x18, // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
|
|
|
|
/* Frequency Offset Compensation Configuration */
|
|
CC1101_FOCCFG,
|
|
0x18, // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
|
|
|
|
/* Automatic Gain Control */
|
|
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
|
|
|
|
/* Wake on radio and timeouts control */
|
|
CC1101_WORCTRL,
|
|
0xFB, // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
|
|
|
|
/* Frontend configuration */
|
|
CC1101_FREND0,
|
|
0x11, // Adjusts current TX LO buffer + high is PATABLE[1]
|
|
CC1101_FREND1,
|
|
0xB6, //
|
|
|
|
/* 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,
|
|
};
|
|
|
|
const uint8_t subghz_device_cc1101_preset_ook_650khz_async_regs[] = {
|
|
// 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 */
|
|
CC1101_IOCFG0,
|
|
0x0D, // GD0 as async serial data output/input
|
|
|
|
/* FIFO and internals */
|
|
CC1101_FIFOTHR,
|
|
0x07, // The only important bit is ADC_RETENTION
|
|
|
|
/* Packet engine */
|
|
CC1101_PKTCTRL0,
|
|
0x32, // Async, continious, no whitening
|
|
|
|
/* Frequency Synthesizer Control */
|
|
CC1101_FSCTRL1,
|
|
0x06, // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
|
|
|
|
// Modem Configuration
|
|
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
|
|
|
|
/* Main Radio Control State Machine */
|
|
CC1101_MCSM0,
|
|
0x18, // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
|
|
|
|
/* Frequency Offset Compensation Configuration */
|
|
CC1101_FOCCFG,
|
|
0x18, // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
|
|
|
|
/* Automatic Gain Control */
|
|
// 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
|
|
//MAGN_TARGET for RX filter BW =< 100 kHz is 0x3. For higher RX filter BW's MAGN_TARGET is 0x7.
|
|
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
|
|
|
|
/* Wake on radio and timeouts control */
|
|
CC1101_WORCTRL,
|
|
0xFB, // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
|
|
|
|
/* Frontend configuration */
|
|
CC1101_FREND0,
|
|
0x11, // Adjusts current TX LO buffer + high is PATABLE[1]
|
|
CC1101_FREND1,
|
|
0xB6, //
|
|
|
|
/* 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,
|
|
};
|
|
|
|
const uint8_t subghz_device_cc1101_preset_2fsk_dev2_38khz_async_regs[] = {
|
|
|
|
/* GPIO GD0 */
|
|
CC1101_IOCFG0,
|
|
0x0D, // GD0 as async serial data output/input
|
|
|
|
/* Frequency Synthesizer Control */
|
|
CC1101_FSCTRL1,
|
|
0x06, // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
|
|
|
|
/* Packet engine */
|
|
CC1101_PKTCTRL0,
|
|
0x32, // Async, continious, no whitening
|
|
CC1101_PKTCTRL1,
|
|
0x04,
|
|
|
|
// // Modem Configuration
|
|
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
|
|
|
|
/* Main Radio Control State Machine */
|
|
CC1101_MCSM0,
|
|
0x18, // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
|
|
|
|
/* Frequency Offset Compensation Configuration */
|
|
CC1101_FOCCFG,
|
|
0x16, // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
|
|
|
|
/* Automatic Gain Control */
|
|
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
|
|
|
|
/* Wake on radio and timeouts control */
|
|
CC1101_WORCTRL,
|
|
0xFB, // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
|
|
|
|
/* Frontend configuration */
|
|
CC1101_FREND0,
|
|
0x10, // Adjusts current TX LO buffer
|
|
CC1101_FREND1,
|
|
0x56,
|
|
|
|
/* 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,
|
|
};
|
|
|
|
const uint8_t subghz_device_cc1101_preset_2fsk_dev47_6khz_async_regs[] = {
|
|
|
|
/* GPIO GD0 */
|
|
CC1101_IOCFG0,
|
|
0x0D, // GD0 as async serial data output/input
|
|
|
|
/* Frequency Synthesizer Control */
|
|
CC1101_FSCTRL1,
|
|
0x06, // IF = (26*10^6) / (2^10) * 0x06 = 152343.75Hz
|
|
|
|
/* Packet engine */
|
|
CC1101_PKTCTRL0,
|
|
0x32, // Async, continious, no whitening
|
|
CC1101_PKTCTRL1,
|
|
0x04,
|
|
|
|
// // Modem Configuration
|
|
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
|
|
|
|
/* Main Radio Control State Machine */
|
|
CC1101_MCSM0,
|
|
0x18, // Autocalibrate on idle-to-rx/tx, PO_TIMEOUT is 64 cycles(149-155us)
|
|
|
|
/* Frequency Offset Compensation Configuration */
|
|
CC1101_FOCCFG,
|
|
0x16, // no frequency offset compensation, POST_K same as PRE_K, PRE_K is 4K, GATE is off
|
|
|
|
/* Automatic Gain Control */
|
|
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
|
|
|
|
/* Wake on radio and timeouts control */
|
|
CC1101_WORCTRL,
|
|
0xFB, // WOR_RES is 2^15 periods (0.91 - 0.94 s) 16.5 - 17.2 hours
|
|
|
|
/* Frontend configuration */
|
|
CC1101_FREND0,
|
|
0x10, // Adjusts current TX LO buffer
|
|
CC1101_FREND1,
|
|
0x56,
|
|
|
|
/* 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,
|
|
};
|
|
|
|
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,
|
|
0x00,
|
|
CC1101_PKTLEN,
|
|
0x00,
|
|
CC1101_CHANNR,
|
|
0x00,
|
|
|
|
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,
|
|
0x00,
|
|
CC1101_AGCCTRL2,
|
|
0xC7,
|
|
|
|
CC1101_FREND0,
|
|
0x10,
|
|
CC1101_FREND1,
|
|
0x56,
|
|
|
|
CC1101_BSCFG,
|
|
0x1C,
|
|
CC1101_FSTEST,
|
|
0x59,
|
|
|
|
/* End load reg */
|
|
0,
|
|
0,
|
|
|
|
// 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_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,
|
|
0x00,
|
|
CC1101_PKTLEN,
|
|
0x00,
|
|
|
|
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]
|
|
0xC0, // 10dBm 0xC0, 7dBm 0xC8, 5dBm 0x84, 0dBm 0x60, -10dBm 0x34, -15dBm 0x1D, -20dBm 0x0E, -30dBm 0x12
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
};
|