Radio driver changes:

- moving 446x.c register settings from common to RX function.
- adjust RSSI thresholds separately for 4463 versus 4464.
pull/4/head
bob 2018-08-08 00:50:44 +10:00
rodzic 3e04a5e7af
commit 28da0ce01b
4 zmienionych plików z 176 dodań i 126 usunięć

Wyświetl plik

@ -13,7 +13,7 @@ const conf_t conf_flash_default = {
// Primary position app
.pos_pri = {
.beacon = {
.active = true,
.active = false,
.cycle = TIME_S2I(60 * 5),
.init_delay = TIME_S2I(60),
.fixed = false // Add lat, lon alt fields if enabling fixed
@ -35,9 +35,12 @@ const conf_t conf_flash_default = {
.pos_sec = {
.beacon = {
.active = true,
.cycle = TIME_S2I(60),
.cycle = TIME_S2I(60 * 5),
.init_delay = TIME_S2I(60),
.fixed = false // Add lat, lon alt fields if enabling fixed
.fixed = true, // Add lat, lon alt fields if enabling fixed
.lat = -337331175, // Degrees (expressed in 1e-7 form)
.lon = 1511143478, // Degrees (expressed in 1e-7 form)
.alt = 144 // Altitude in metres
},
.radio_conf = {
.pwr = 0x7F,
@ -48,14 +51,14 @@ const conf_t conf_flash_default = {
// App identity
.call = "VK2GJ-15",
.path = "",
.symbol = SYM_CAR,
.symbol = SYM_ANTENNA,
.aprs_msg = true, // Enable APRS message reception on this call sign
},
// Primary image app
.img_pri = {
.svc_conf = {
.active = true,
.active = false,
.cycle = TIME_S2I(60 * 5),
.init_delay = TIME_S2I(60 * 1),
.send_spacing = TIME_S2I(5)
@ -81,10 +84,10 @@ const conf_t conf_flash_default = {
// Secondary image app
.img_sec = {
.svc_conf = {
.active = true,
.cycle = TIME_S2I(60 * 0),
.active = false,
.cycle = TIME_S2I(60 * 15),
.init_delay = TIME_S2I(30 * 1),
.send_spacing = TIME_S2I(5)
.send_spacing = TIME_S2I(30)
},
.radio_conf = {
.pwr = 0x1F,

Wyświetl plik

@ -443,6 +443,7 @@ static bool Si446x_init(const radio_unit_t radio) {
Si446x_setProperty8(radio, Si446x_FRR_CTL_C_MODE, 0x00);
Si446x_setProperty8(radio, Si446x_FRR_CTL_D_MODE, 0x00);
/* Disable interrupts globally. NIRQ pin is used for CCA. */
Si446x_setProperty8(radio, Si446x_INT_CTL_ENABLE, 0x00);
/* Set combined FIFO mode = 0x70. */
@ -453,7 +454,6 @@ static bool Si446x_init(const radio_unit_t radio) {
Si446x_write(radio, reset_fifo, sizeof(reset_fifo));
/* No need to unset bits... see si docs. */
/*
* TODO: Move the TX and RX settings out into the respective functions.
* This would split up into AFSK and FSK for RX & TX.
@ -464,89 +464,56 @@ static bool Si446x_init(const radio_unit_t radio) {
/* 32K clock disabled. Divided clock disabled. */
Si446x_setProperty8(radio, Si446x_GLOBAL_CLK_CFG, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_CONTROL, 0x00);
/* TODO: Don't need this setting? */
/* TODO: This setting would move to 2FSK RX. */
Si446x_setProperty8(radio, Si446x_PREAMBLE_CONFIG_STD_1, 0x14);
Si446x_setProperty8(radio, Si446x_PKT_CONFIG1, 0x41);
/* Bit polarity and mapping. */
Si446x_setProperty8(radio, Si446x_MODEM_MAP_CONTROL, 0x00);
/* Delta Sigma modulation control for PLL synthesizer. */
Si446x_setProperty8(radio, Si446x_MODEM_DSM_CTRL, 0x07);
/* PLL synthesizer settings. */
Si446x_setProperty8(radio, Si446x_MODEM_CLKGEN_BAND, 0x0D);
/* Deviation set to +-0.5KHz. */
Si446x_setProperty24(radio, Si446x_MODEM_FREQ_DEV, 0x00, 0x00, 0x79);
/* Ramp down after TX final symbol. */
Si446x_setProperty8(radio, Si446x_MODEM_TX_RAMP_DELAY, 0x01);
/* PA ramp timing and modulation delay. */
Si446x_setProperty8(radio, Si446x_PA_TC, 0x3D);
/* Synthesizer PLL settings. */
Si446x_setProperty8(radio, Si446x_FREQ_CONTROL_INTE, 0x41);
Si446x_setProperty24(radio, Si446x_FREQ_CONTROL_FRAC, 0x0B, 0xB1, 0x3B);
Si446x_setProperty16(radio, Si446x_FREQ_CONTROL_CHANNEL_STEP_SIZE, 0x0B, 0xD1);
Si446x_setProperty8(radio, Si446x_FREQ_CONTROL_W_SIZE, 0x20);
Si446x_setProperty8(radio, Si446x_FREQ_CONTROL_VCOCNT_RX_ADJ, 0xFA);
Si446x_setProperty8(radio, Si446x_MODEM_MDM_CTRL, 0x80);
Si446x_setProperty8(radio, Si446x_MODEM_IF_CONTROL, 0x08);
Si446x_setProperty24(radio, Si446x_MODEM_IF_FREQ, 0x02, 0x80, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_DECIMATION_CFG1, 0x70);
Si446x_setProperty8(radio, Si446x_MODEM_DECIMATION_CFG0, 0x10);
Si446x_setProperty16(radio, Si446x_MODEM_BCR_OSR, 0x01, 0xC3);
Si446x_setProperty24(radio, Si446x_MODEM_BCR_NCO_OFFSET, 0x01, 0x22, 0x60);
Si446x_setProperty16(radio, Si446x_MODEM_BCR_GAIN, 0x00, 0x91);
Si446x_setProperty8(radio, Si446x_MODEM_BCR_GEAR, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_BCR_MISC1, 0xC2);
Si446x_setProperty8(radio, Si446x_MODEM_AFC_GEAR, 0x54);
if(is_part_Si4463(handler->radio_part))
Si446x_setProperty8(radio, Si446x_MODEM_AFC_WAIT, 0x23);
else
Si446x_setProperty8(radio, Si446x_MODEM_AFC_WAIT, 0x36);
Si446x_setProperty16(radio, Si446x_MODEM_AFC_GAIN, 0x80, 0xAB);
Si446x_setProperty16(radio, Si446x_MODEM_AFC_LIMITER, 0x02, 0x50);
Si446x_setProperty8(radio, Si446x_MODEM_AFC_MISC, 0x80);
if(is_part_Si4463(handler->radio_part))
Si446x_setProperty8(radio, Si446x_MODEM_AGC_CONTROL, 0xE0);
else
Si446x_setProperty8(radio, Si446x_MODEM_AGC_CONTROL, 0xE2);
Si446x_setProperty8(radio, Si446x_MODEM_AGC_WINDOW_SIZE, 0x11);
Si446x_setProperty8(radio, Si446x_MODEM_AGC_RFPD_DECAY, 0x63);
Si446x_setProperty8(radio, Si446x_MODEM_AGC_IFPD_DECAY, 0x63);
if(is_part_Si4463(handler->radio_part))
Si446x_setProperty8(radio, Si446x_MODEM_FSK4_GAIN1, 0x80);
else
Si446x_setProperty8(radio, Si446x_MODEM_FSK4_GAIN1, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_FSK4_GAIN0, 0x02);
Si446x_setProperty16(radio, Si446x_MODEM_FSK4_TH, 0x35, 0x55);
Si446x_setProperty8(radio, Si446x_MODEM_FSK4_MAP, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_OOK_PDTC, 0x2A);
Si446x_setProperty8(radio, Si446x_MODEM_OOK_CNT1, 0x85);
Si446x_setProperty8(radio, Si446x_MODEM_OOK_MISC, 0x23);
if(is_part_Si4463(handler->radio_part))
Si446x_setProperty8(radio, Si446x_MODEM_RAW_SEARCH2, 0xBC);
else
Si446x_setProperty8(radio, Si446x_MODEM_RAW_SEARCH, 0xD6);
Si446x_setProperty8(radio, Si446x_MODEM_RAW_CONTROL, 0x8F);
Si446x_setProperty16(radio, Si446x_MODEM_RAW_EYE, 0x00, 0x3B);
/* Antenna settings. */
Si446x_setProperty8(radio, Si446x_MODEM_ANT_DIV_MODE, 0x01);
Si446x_setProperty8(radio, Si446x_MODEM_ANT_DIV_CONTROL, 0x80);
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_COMP, 0x40);
if(is_part_Si4463(handler->radio_part)) {
Si446x_setProperty8(radio, Si446x_MODEM_SPIKE_DET, 0x03);
Si446x_setProperty8(radio, Si446x_MODEM_DSA_CTRL1, 0xA0);
Si446x_setProperty8(radio, Si446x_MODEM_DSA_CTRL2, 0x04);
Si446x_setProperty8(radio, Si446x_MODEM_ONE_SHOT_AFC, 0x07);
Si446x_setProperty8(radio, Si446x_MODEM_DSA_QUAL, 0x06);
Si446x_setProperty8(radio, Si446x_MODEM_DSA_RSSI, 0x78);
Si446x_setProperty8(radio, Si446x_MODEM_DECIMATION_CFG2, 0x0C);
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_MUTE, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_DSA_MISC, 0x20);
Si446x_setProperty8(radio, Si446x_PREAMBLE_CONFIG, 0x21);
}
/* RSSI value compensation. */
if(is_part_Si4463(handler->radio_part))
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_COMP, 0x48);
else
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_COMP, 0x40);
/* Measure the chip temperature and save it as initial measurement. */
/*
* TODO: Preamble control should be set in each mode.
* Will be needed for RX FSK mode.
* For now it is not relevant since:
* - we don't have RX FSK implemented yet.
* - RX AFSK preamble is decoded in the MCU DSP chain.
* - TX AFSK encodes its own preamble and then upsamples the entire packet.
*/
Si446x_setProperty8(radio, Si446x_PREAMBLE_CONFIG, 0x21);
/* Measure the chip temperature and save initial measurement. */
Si446x_getTemperature(radio);
handler->radio_init = true;
return true;
@ -690,62 +657,142 @@ static void Si446x_setModemAFSK_TX(const radio_unit_t radio) {
}
static void Si446x_setModemAFSK_RX(const radio_unit_t radio) {
// Setup the NCO modulo and oversampling mode
/* uint32_t s = Si446x_CCLK;
uint8_t f3 = (s >> 24) & 0xFF;
uint8_t f2 = (s >> 16) & 0xFF;
uint8_t f1 = (s >> 8) & 0xFF;
uint8_t f0 = (s >> 0) & 0xFF;
Si446x_setProperty32(Si446x_MODEM_TX_NCO_MODE, f3, f2, f1, f0);*/
// Setup the NCO data rate for APRS
//Si446x_setProperty24(radio, Si446x_MODEM_DATA_RATE, 0x04, 0x07, 0x40);
packet_svc_t *handler = pktGetServiceObject(radio);
// Use 2FSK in DIRECT_MODE
Si446x_setProperty8(radio, Si446x_MODEM_MOD_TYPE, 0x0A);
/*
# BatchName Si4464
# Crys_freq(Hz): 26000000 Crys_tol(ppm): 20 IF_mode: 2
# High_perf_Ch_Fil: 1 OSRtune: 0 Ch_Fil_Bw_AFC: 0
# ANT_DIV: 0 PM_pattern: 15
# MOD_type: 2 Rsymb(sps): 1200 Fdev(Hz): 500 RXBW(Hz): 150000
# Manchester: 0 AFC_en: 0 Rsymb_error: 0.0 Chip-Version: 3
# RF Freq.(MHz): 144 API_TC: 29 fhst: 12500 inputBW: 0
# BERT: 0 RAW_dout: 0 D_source: 1 Hi_pfm_div: 1
#
# RX IF frequency is -406250 Hz
# WB filter 2 (BW = 14.89 kHz); NB-filter 2 (BW = 14.89 kHz)
#
# Modulation index: 0.833
*/
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE13_7_0, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE12_7_0, 0xC4);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE11_7_0, 0x30);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE10_7_0, 0x7F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE9_7_0, 0x5F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE8_7_0, 0xB5);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE7_7_0, 0xB8);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE6_7_0, 0xDE);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE5_7_0, 0x05);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE4_7_0, 0x17);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE3_7_0, 0x16);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE2_7_0, 0x0C);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE1_7_0, 0x03);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE0_7_0, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM0, 0x15);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM1, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM2, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM3, 0x00);
/* Set DIRECT_MODE (asynchronous mode as 2FSK). */
Si446x_setProperty8(radio, Si446x_MODEM_MOD_TYPE, 0x0A);
/* Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE13_7_0, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE12_7_0, 0xC4);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE11_7_0, 0x30);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE10_7_0, 0x7F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE9_7_0, 0xF5);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE8_7_0, 0xB5);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE7_7_0, 0xB8);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE6_7_0, 0xDE);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE5_7_0, 0x05);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE4_7_0, 0x17);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE3_7_0, 0x16);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE2_7_0, 0x0C);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE1_7_0, 0x03);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE0_7_0, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM0, 0x15);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM1, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM2, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM3, 0x00);*/
/* Packet handler disabled in RX. */
Si446x_setProperty8(radio, Si446x_PKT_CONFIG1, 0x41);
if(is_part_Si4463(handler->radio_part)) {
/* Run 4463 in 4464 compatibility mode (set SEARCH2 to zero). */
Si446x_setProperty8(radio, Si446x_MODEM_RAW_SEARCH2, 0x00);
}
Si446x_setProperty8(radio, Si446x_MODEM_RAW_CONTROL, 0x8F);
Si446x_setProperty8(radio, Si446x_MODEM_RAW_SEARCH, 0xD6);
Si446x_setProperty16(radio, Si446x_MODEM_RAW_EYE, 0x00, 0x3B);
/*
* OOK_MISC settings include parameters related to asynchronous mode.
* Asynchronous mode is used for AFSK reception passed to DSP decode.
*/
Si446x_setProperty8(radio, Si446x_MODEM_OOK_PDTC, 0x2A);
Si446x_setProperty8(radio, Si446x_MODEM_OOK_CNT1, 0x85);
Si446x_setProperty8(radio, Si446x_MODEM_OOK_MISC, 0x23);
/* RX AFC control. */
Si446x_setProperty8(radio, Si446x_MODEM_AFC_GEAR, 0x54);
Si446x_setProperty8(radio, Si446x_MODEM_AFC_WAIT, 0x36);
Si446x_setProperty16(radio, Si446x_MODEM_AFC_GAIN, 0x80, 0xAB);
Si446x_setProperty16(radio, Si446x_MODEM_AFC_LIMITER, 0x02, 0x50);
Si446x_setProperty8(radio, Si446x_MODEM_AFC_MISC, 0x80);
/* RX AGC control. */
Si446x_setProperty8(radio, Si446x_MODEM_AGC_CONTROL, 0xE0); // 0xE2
Si446x_setProperty8(radio, Si446x_MODEM_AGC_WINDOW_SIZE, 0x11);
Si446x_setProperty8(radio, Si446x_MODEM_AGC_RFPD_DECAY, 0x63);
Si446x_setProperty8(radio, Si446x_MODEM_AGC_IFPD_DECAY, 0x63);
/* RX Bit clock recovery control. */
Si446x_setProperty8(radio, Si446x_MODEM_MDM_CTRL, 0x80);
Si446x_setProperty16(radio, Si446x_MODEM_BCR_OSR, 0x01, 0xC3);
Si446x_setProperty24(radio, Si446x_MODEM_BCR_NCO_OFFSET, 0x01, 0x22, 0x60);
Si446x_setProperty16(radio, Si446x_MODEM_BCR_GAIN, 0x00, 0x91);
Si446x_setProperty8(radio, Si446x_MODEM_BCR_GEAR, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_BCR_MISC1, 0xC2);
/* RX IF controls. */
Si446x_setProperty8(radio, Si446x_MODEM_IF_CONTROL, 0x08);
Si446x_setProperty24(radio, Si446x_MODEM_IF_FREQ, 0x02, 0x80, 0x00);
/* RX If filter decimation controls. */
Si446x_setProperty8(radio, Si446x_MODEM_DECIMATION_CFG1, 0x70);
Si446x_setProperty8(radio, Si446x_MODEM_DECIMATION_CFG0, 0x10);
if(is_part_Si4463(handler->radio_part)) {
Si446x_setProperty8(radio, Si446x_MODEM_DECIMATION_CFG2, 0x0C);
}
/* RSSI latching disabled. */
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_CONTROL, 0x00);
/* RX IF filter coefficients. */
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE13_7_0, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE12_7_0, 0xC4);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE11_7_0, 0x30);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE10_7_0, 0x7F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE9_7_0, 0x5F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE8_7_0, 0xB5);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE7_7_0, 0xB8);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE6_7_0, 0xDE);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE5_7_0, 0x05);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE4_7_0, 0x17);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE3_7_0, 0x16);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE2_7_0, 0x0C);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE1_7_0, 0x03);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COE0_7_0, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM0, 0x15);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM1, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM2, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX1_CHFLT_COEM3, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE13_7_0, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE12_7_0, 0xC4);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE11_7_0, 0x30);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE10_7_0, 0x7F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE9_7_0, 0x5F);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE8_7_0, 0xB5);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE7_7_0, 0xB8);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE6_7_0, 0xDE);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE5_7_0, 0x05);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE4_7_0, 0x17);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE3_7_0, 0x16);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE2_7_0, 0x0C);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE1_7_0, 0x03);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COE0_7_0, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM0, 0x15);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM1, 0xFF);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM2, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_CHFLT_RX2_CHFLT_COEM3, 0x00);
Si446x_setProperty8(radio, Si446x_PREAMBLE_CONFIG, 0x21);
/* Unused Si4463 features for AFSK RX. */
if(is_part_Si4463(handler->radio_part)) {
/* DSA is not enabled. */
Si446x_setProperty8(radio, Si446x_MODEM_DSA_CTRL1, 0x00); // 0xA0
Si446x_setProperty8(radio, Si446x_MODEM_DSA_CTRL2, 0x00); // 0x04
Si446x_setProperty8(radio, Si446x_MODEM_SPIKE_DET, 0x00); // 0x03
Si446x_setProperty8(radio, Si446x_MODEM_ONE_SHOT_AFC, 0x00); // 0x07
Si446x_setProperty8(radio, Si446x_MODEM_DSA_QUAL, 0x00); // 0x06
Si446x_setProperty8(radio, Si446x_MODEM_DSA_RSSI, 0x00); // 0x78
Si446x_setProperty8(radio, Si446x_MODEM_RSSI_MUTE, 0x00);
Si446x_setProperty8(radio, Si446x_MODEM_DSA_MISC, 0x00); // 0x20
}
}
/**
*
*/
static void Si446x_setModem2FSK_TX(const radio_unit_t radio,
const uint32_t speed)
{
const uint32_t speed) {
// Setup the NCO modulo and oversampling mode
uint32_t s = Si446x_CCLK / 10;
uint8_t f3 = (s >> 24) & 0xFF;
@ -772,10 +819,9 @@ static void Si446x_setModem2FSK_TX(const radio_unit_t radio,
}
/*
/**
* Radio Settings
*/
static uint8_t __attribute__((unused)) Si446x_getChannel(const radio_unit_t radio) {
const uint8_t state_info[] = {Si446x_REQUEST_DEVICE_STATE};
uint8_t rxData[4];

Wyświetl plik

@ -120,6 +120,7 @@
#define Si446x_MODEM_FSK4_TH 0x203D
#define Si446x_MODEM_FSK4_MAP 0x203F
#define Si446x_MODEM_OOK_PDTC 0x2040
#define Si446x_MODEM_OOK_BLOPK 0x2041
#define Si446x_MODEM_OOK_CNT1 0x2042
#define Si446x_MODEM_OOK_MISC 0x2043
#define Si446x_MODEM_RAW_SEARCH 0x2044

Wyświetl plik

@ -600,9 +600,9 @@ bool GPS_Init() {
#if defined(UBLOX_UART_CONNECTED) && UBLOX_USE_I2C == FALSE
// Init and start UART
TRACE_INFO("GPS > Init GPS UART");
/* TODO: Put UBLOX UART definition in portab. */
palSetLineMode(LINE_GPS_RXD, PAL_MODE_ALTERNATE(11)); // UART RXD
palSetLineMode(LINE_GPS_TXD, PAL_MODE_ALTERNATE(11)); // UART TXD
sdStart(&SD5, &gps_config);
#endif