@@ -7,15 +7,23 @@ void HeltecV4Board::begin() {
77 pinMode (PIN_ADC_CTRL, OUTPUT);
88 digitalWrite (PIN_ADC_CTRL, LOW); // Initially inactive
99
10+ // ---- GC1109 RF FRONT END CONFIGURATION ----
11+ // The Heltec V4 uses a GC1109 FEM chip with integrated PA and LNA
12+ // RF switch control: PA_TX_EN LOW = RX path (LNA), HIGH = TX path (PA)
13+
14+ // PA_POWER: Power enable for GC1109 chip (always on)
1015 pinMode (P_LORA_PA_POWER, OUTPUT);
11- digitalWrite (P_LORA_PA_POWER,HIGH);
16+ digitalWrite (P_LORA_PA_POWER, HIGH);
1217
18+ // PA_EN: Main enable for GC1109 (must be HIGH for both RX and TX)
1319 rtc_gpio_hold_dis ((gpio_num_t )P_LORA_PA_EN);
1420 pinMode (P_LORA_PA_EN, OUTPUT);
15- digitalWrite (P_LORA_PA_EN,HIGH);
16- pinMode (P_LORA_PA_TX_EN, OUTPUT);
17- digitalWrite (P_LORA_PA_TX_EN,LOW);
21+ digitalWrite (P_LORA_PA_EN, HIGH);
1822
23+ // PA_TX_EN: RF switch control (LOW=RX/LNA, HIGH=TX/PA)
24+ pinMode (P_LORA_PA_TX_EN, OUTPUT);
25+ digitalWrite (P_LORA_PA_TX_EN, LOW); // Default to RX mode
26+ // -------------------------------------------
1927
2028 periph_power.begin ();
2129
@@ -32,13 +40,13 @@ void HeltecV4Board::begin() {
3240 }
3341
3442 void HeltecV4Board::onBeforeTransmit (void ) {
35- digitalWrite (P_LORA_TX_LED, HIGH); // turn TX LED on
36- digitalWrite (P_LORA_PA_TX_EN,HIGH);
43+ digitalWrite (P_LORA_TX_LED, HIGH); // Turn TX LED on
44+ digitalWrite (P_LORA_PA_TX_EN, HIGH); // Switch to TX path (PA)
3745 }
3846
3947 void HeltecV4Board::onAfterTransmit (void ) {
40- digitalWrite (P_LORA_TX_LED , LOW); // turn TX LED off
41- digitalWrite (P_LORA_PA_TX_EN, LOW);
48+ digitalWrite (P_LORA_PA_TX_EN , LOW); // Switch back to RX path (LNA)
49+ digitalWrite (P_LORA_TX_LED, LOW); // Turn TX LED off
4250 }
4351
4452 void HeltecV4Board::enterDeepSleep (uint32_t secs, int pin_wake_btn) {
@@ -50,7 +58,9 @@ void HeltecV4Board::begin() {
5058
5159 rtc_gpio_hold_en ((gpio_num_t )P_LORA_NSS);
5260
53- rtc_gpio_hold_en ((gpio_num_t )P_LORA_PA_EN); // It also needs to be enabled in receive mode
61+ // Hold GC1109 FEM pins during sleep (PA_EN=HIGH, PA_TX_EN=LOW for RX mode)
62+ rtc_gpio_hold_en ((gpio_num_t )P_LORA_PA_EN);
63+ rtc_gpio_hold_en ((gpio_num_t )P_LORA_PA_TX_EN);
5464
5565 if (pin_wake_btn < 0 ) {
5666 esp_sleep_enable_ext1_wakeup ( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
0 commit comments