diff --git a/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp b/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp index 4975d5cde..a620e7868 100644 --- a/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp +++ b/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp @@ -6,14 +6,23 @@ void HeltecTrackerV2Board::begin() { pinMode(PIN_ADC_CTRL, OUTPUT); digitalWrite(PIN_ADC_CTRL, LOW); // Initially inactive + // ---- GC1109 RF FRONT END CONFIGURATION ---- + // The Heltec Tracker V2 uses a GC1109 FEM chip with integrated PA and LNA + // RF switch control: PA_TX_EN LOW = RX path (LNA), HIGH = TX path (PA) + + // PA_POWER: Power enable for GC1109 chip (always on) pinMode(P_LORA_PA_POWER, OUTPUT); - digitalWrite(P_LORA_PA_POWER,HIGH); + digitalWrite(P_LORA_PA_POWER, HIGH); + // PA_EN: Main enable for GC1109 (must be HIGH for both RX and TX) rtc_gpio_hold_dis((gpio_num_t)P_LORA_PA_EN); pinMode(P_LORA_PA_EN, OUTPUT); - digitalWrite(P_LORA_PA_EN,HIGH); + digitalWrite(P_LORA_PA_EN, HIGH); + + // PA_TX_EN: RF switch control (LOW=RX/LNA, HIGH=TX/PA) pinMode(P_LORA_PA_TX_EN, OUTPUT); - digitalWrite(P_LORA_PA_TX_EN,LOW); + digitalWrite(P_LORA_PA_TX_EN, LOW); // Default to RX mode + // ------------------------------------------- periph_power.begin(); @@ -30,13 +39,13 @@ void HeltecTrackerV2Board::begin() { } void HeltecTrackerV2Board::onBeforeTransmit(void) { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - digitalWrite(P_LORA_PA_TX_EN,HIGH); + digitalWrite(P_LORA_TX_LED, HIGH); // Turn TX LED on + digitalWrite(P_LORA_PA_TX_EN, HIGH); // Switch to TX path (PA) } void HeltecTrackerV2Board::onAfterTransmit(void) { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - digitalWrite(P_LORA_PA_TX_EN,LOW); + digitalWrite(P_LORA_PA_TX_EN, LOW); // Switch back to RX path (LNA) + digitalWrite(P_LORA_TX_LED, LOW); // Turn TX LED off } void HeltecTrackerV2Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) { @@ -48,7 +57,9 @@ void HeltecTrackerV2Board::begin() { rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS); - rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_EN); //It also needs to be enabled in receive mode + // Hold GC1109 FEM pins during sleep (PA_EN=HIGH, PA_TX_EN=LOW for RX mode) + rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_EN); + rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_TX_EN); if (pin_wake_btn < 0) { esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet diff --git a/variants/heltec_tracker_v2/platformio.ini b/variants/heltec_tracker_v2/platformio.ini index 61ccd4f4b..af4a28d12 100644 --- a/variants/heltec_tracker_v2/platformio.ini +++ b/variants/heltec_tracker_v2/platformio.ini @@ -26,6 +26,8 @@ build_flags = -D SX126X_DIO3_TCXO_VOLTAGE=1.8 -D SX126X_CURRENT_LIMIT=140 -D SX126X_RX_BOOSTED_GAIN=1 + -D SX126X_RXEN=RADIOLIB_NC ; No separate RX enable pin + -D SX126X_TXEN=46 ; TX enable pin (P_LORA_PA_TX_EN) controls RF switch -D PIN_BOARD_SDA=5 -D PIN_BOARD_SCL=6 -D PIN_USER_BTN=0 diff --git a/variants/heltec_v4/HeltecV4Board.cpp b/variants/heltec_v4/HeltecV4Board.cpp index f143db36f..388ebc56b 100644 --- a/variants/heltec_v4/HeltecV4Board.cpp +++ b/variants/heltec_v4/HeltecV4Board.cpp @@ -7,15 +7,23 @@ void HeltecV4Board::begin() { pinMode(PIN_ADC_CTRL, OUTPUT); digitalWrite(PIN_ADC_CTRL, LOW); // Initially inactive + // ---- GC1109 RF FRONT END CONFIGURATION ---- + // The Heltec V4 uses a GC1109 FEM chip with integrated PA and LNA + // RF switch control: PA_TX_EN LOW = RX path (LNA), HIGH = TX path (PA) + + // PA_POWER: Power enable for GC1109 chip (always on) pinMode(P_LORA_PA_POWER, OUTPUT); - digitalWrite(P_LORA_PA_POWER,HIGH); + digitalWrite(P_LORA_PA_POWER, HIGH); + // PA_EN: Main enable for GC1109 (must be HIGH for both RX and TX) rtc_gpio_hold_dis((gpio_num_t)P_LORA_PA_EN); pinMode(P_LORA_PA_EN, OUTPUT); - digitalWrite(P_LORA_PA_EN,HIGH); - pinMode(P_LORA_PA_TX_EN, OUTPUT); - digitalWrite(P_LORA_PA_TX_EN,LOW); + digitalWrite(P_LORA_PA_EN, HIGH); + // PA_TX_EN: RF switch control (LOW=RX/LNA, HIGH=TX/PA) + pinMode(P_LORA_PA_TX_EN, OUTPUT); + digitalWrite(P_LORA_PA_TX_EN, LOW); // Default to RX mode + // ------------------------------------------- periph_power.begin(); @@ -32,13 +40,13 @@ void HeltecV4Board::begin() { } void HeltecV4Board::onBeforeTransmit(void) { - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on - digitalWrite(P_LORA_PA_TX_EN,HIGH); + digitalWrite(P_LORA_TX_LED, HIGH); // Turn TX LED on + digitalWrite(P_LORA_PA_TX_EN, HIGH); // Switch to TX path (PA) } void HeltecV4Board::onAfterTransmit(void) { - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off - digitalWrite(P_LORA_PA_TX_EN,LOW); + digitalWrite(P_LORA_PA_TX_EN, LOW); // Switch back to RX path (LNA) + digitalWrite(P_LORA_TX_LED, LOW); // Turn TX LED off } void HeltecV4Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) { @@ -50,7 +58,9 @@ void HeltecV4Board::begin() { rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS); - rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_EN); //It also needs to be enabled in receive mode + // Hold GC1109 FEM pins during sleep (PA_EN=HIGH, PA_TX_EN=LOW for RX mode) + rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_EN); + rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_TX_EN); if (pin_wake_btn < 0) { esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet diff --git a/variants/heltec_v4/platformio.ini b/variants/heltec_v4/platformio.ini index c26a5bc69..d0f3a43e7 100644 --- a/variants/heltec_v4/platformio.ini +++ b/variants/heltec_v4/platformio.ini @@ -31,6 +31,8 @@ build_flags = -D SX126X_DIO3_TCXO_VOLTAGE=1.8 -D SX126X_CURRENT_LIMIT=140 -D SX126X_RX_BOOSTED_GAIN=1 + -D SX126X_RXEN=RADIOLIB_NC ; No separate RX enable pin + -D SX126X_TXEN=46 ; TX enable pin (P_LORA_PA_TX_EN) controls RF switch -D PIN_GPS_RX=38 -D PIN_GPS_TX=39 -D PIN_GPS_RESET=42