From: Keith Packard Date: Mon, 20 Sep 2021 04:04:41 +0000 (-0700) Subject: altos: Deal with cc1201 limitations X-Git-Tag: 1.9.8~1^2~8 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=c89268c1fa70fbdc661ac0963b9f8fe22c42bbfe;hp=839024907e2777c07e4722e7bb0ab8993abf5638 altos: Deal with cc1201 limitations The CC1201 works fine at higher data rates, but at lower rates it can't crank the RX bandwidth as tight as the CC1200. Deal with this by checking the part number and using the correct settings for each one when running at 9600 or 2400 baud. Signed-off-by: Keith Packard --- diff --git a/src/drivers/ao_cc1200.c b/src/drivers/ao_cc1200.c index 6afa2a21..6f043803 100644 --- a/src/drivers/ao_cc1200.c +++ b/src/drivers/ao_cc1200.c @@ -331,13 +331,24 @@ ao_radio_idle(void) #define PACKET_CHAN_BW_384 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_12 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ (16 << CC1200_CHAN_BW_BB_CIC_DECFACT)) +/* + * CC1201 doesn't support our low bandwidth receive setups, so we use + * larger values for that part, leaving the bandwidth at over 50kHz + */ + /* 200 / 10 = 20 */ -#define PACKET_CHAN_BW_96 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ - (16 << CC1200_CHAN_BW_BB_CIC_DECFACT)) +#define PACKET_CHAN_BW_96_CC1200 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (16 << CC1200_CHAN_BW_BB_CIC_DECFACT)) + +#define PACKET_CHAN_BW_96_CC1201 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (8 << CC1200_CHAN_BW_BB_CIC_DECFACT)) /* 200 / 25 = 8 */ -#define PACKET_CHAN_BW_24 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ - (44 << CC1200_CHAN_BW_BB_CIC_DECFACT)) +#define PACKET_CHAN_BW_24_CC1200 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (44 << CC1200_CHAN_BW_BB_CIC_DECFACT)) + +#define PACKET_CHAN_BW_24_CC1201 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (8 << CC1200_CHAN_BW_BB_CIC_DECFACT)) static const uint16_t packet_setup[] = { CC1200_SYMBOL_RATE1, ((PACKET_SYMBOL_RATE_M >> 8) & 0xff), @@ -379,7 +390,6 @@ static const uint16_t packet_setup_96[] = { (PACKET_DEV_E_96 << CC1200_MODCFG_DEV_E_DEV_E)), CC1200_SYMBOL_RATE2, ((PACKET_SYMBOL_RATE_E_96 << CC1200_SYMBOL_RATE2_DATARATE_E) | (((PACKET_SYMBOL_RATE_M >> 16) & CC1200_SYMBOL_RATE2_DATARATE_M_19_16_MASK) << CC1200_SYMBOL_RATE2_DATARATE_M_19_16)), - CC1200_CHAN_BW, PACKET_CHAN_BW_96, CC1200_MDMCFG2, /* General Modem Parameter Configuration Reg. 2 */ ((CC1200_MDMCFG2_ASK_SHAPE_8 << CC1200_MDMCFG2_ASK_SHAPE) | (CC1200_MDMCFG2_SYMBOL_MAP_CFG_MODE_0 << CC1200_MDMCFG2_SYMBOL_MAP_CFG) | @@ -394,7 +404,6 @@ static const uint16_t packet_setup_24[] = { (PACKET_DEV_E_24 << CC1200_MODCFG_DEV_E_DEV_E)), CC1200_SYMBOL_RATE2, ((PACKET_SYMBOL_RATE_E_24 << CC1200_SYMBOL_RATE2_DATARATE_E) | (((PACKET_SYMBOL_RATE_M >> 16) & CC1200_SYMBOL_RATE2_DATARATE_M_19_16_MASK) << CC1200_SYMBOL_RATE2_DATARATE_M_19_16)), - CC1200_CHAN_BW, PACKET_CHAN_BW_24, CC1200_MDMCFG2, /* General Modem Parameter Configuration Reg. 2 */ ((CC1200_MDMCFG2_ASK_SHAPE_8 << CC1200_MDMCFG2_ASK_SHAPE) | (CC1200_MDMCFG2_SYMBOL_MAP_CFG_MODE_0 << CC1200_MDMCFG2_SYMBOL_MAP_CFG) | @@ -616,9 +625,17 @@ ao_radio_set_mode(uint16_t new_mode) break; case AO_RADIO_RATE_9600: ao_radio_set_regs(packet_setup_96); + if (cc1201) + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_96_CC1201); + else + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_96_CC1200); break; case AO_RADIO_RATE_2400: ao_radio_set_regs(packet_setup_24); + if (cc1201) + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_24_CC1201); + else + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_24_CC1200); break; } }