1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

LP-346 RFM22 tuning: Add XtalCap value for fine tuning

This commit is contained in:
Laurent Lalanne 2016-10-03 18:35:51 +02:00
parent 7800f49705
commit ea377973fc
7 changed files with 24 additions and 5 deletions

View File

@ -1573,8 +1573,13 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev)
// RX FIFO Almost Full Threshold (0 - 63)
rfm22_write(rfm22b_dev, RFM22_rx_fifo_control, RX_FIFO_HI_WATERMARK);
// Set the frequency calibration
rfm22_write(rfm22b_dev, RFM22_xtal_osc_load_cap, rfm22b_dev->cfg.RFXtalCap);
// Set the xtal capacitor for frequency calibration
// Cint = 1.8 pF + 0.085 pF x xlc[6:0] + 3.7 pF x xlc[7] (xtalshift)
// cfg.RFXtalCap 0 to 171 range give Cint = 1.8pF to 16.295pF range
// Default is 127, equal to 12.595pF
rfm22_write(rfm22b_dev,
RFM22_xtal_osc_load_cap,
(rfm22b_dev->cfg.RFXtalCap < 128) ? rfm22b_dev->cfg.RFXtalCap : (rfm22b_dev->cfg.RFXtalCap + 84));
// Release the bus
rfm22_releaseBus(rfm22b_dev);

View File

@ -413,6 +413,10 @@ void PIOS_Board_Init(void)
// Configure the RFM22B device
const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev);
// Set the Xtal capacitor value
pios_rfm22b_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) {
PIOS_Assert(0);
}

View File

@ -640,7 +640,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = {
},
};
const struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = {
struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f,
@ -648,7 +648,7 @@ const struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = {
.gpio_direction = GPIO0_RX_GPIO1_TX,
};
const struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = {
struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f,

View File

@ -912,6 +912,11 @@ void PIOS_Board_Init(void)
} else {
/* Configure the RFM22B device. */
const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev);
// Set the Xtal capacitor value
pios_rfm22b_rm1_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
pios_rfm22b_rm2_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) {
PIOS_Assert(0);
}

View File

@ -431,7 +431,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = {
},
};
const struct pios_rfm22b_cfg pios_rfm22b_cfg = {
struct pios_rfm22b_cfg pios_rfm22b_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f,

View File

@ -852,6 +852,10 @@ void PIOS_Board_Init(void)
} else {
/* Configure the RFM22B device. */
const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev);
// Set the Xtal capacitor value
pios_rfm22b_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) {
PIOS_Assert(0);
}

View File

@ -13,6 +13,7 @@
<field name="MinChannel" units="" type="uint8" elements="1" defaultvalue="0"/>
<field name="MaxChannel" units="" type="uint8" elements="1" defaultvalue="250"/>
<field name="CustomDeviceID" units="hex" type="uint32" elements="1" defaultvalue="0"/>
<field name="RFXtalCap" units="" type="uint8" elements="1" defaultvalue="127" limits="%BE:0:171" description="0 to 171 range, default 127"/>
<!-- OpenLRS options -->
<field name="Version" units="" type="uint8" elements="1" defaultvalue="0"/>