Fix sleep

This commit is contained in:
Wessel Nieboer 2026-03-02 11:34:42 +01:00
parent 8b7fed65de
commit 14f066bed0
No known key found for this signature in database
GPG key ID: 929C8E45E33B5FD2

View file

@ -5,35 +5,39 @@
void LoRaFEMControl::init(void)
{
setLnaCanControl(false);// Default is uncontrollable
// Power on FEM LDO — set registers before releasing RTC hold for
// atomic transition (no glitch on deep sleep wake).
pinMode(P_LORA_PA_POWER, OUTPUT);
digitalWrite(P_LORA_PA_POWER, HIGH);
rtc_gpio_hold_dis((gpio_num_t)P_LORA_PA_POWER);
rtc_gpio_hold_dis((gpio_num_t)P_LORA_GC1109_PA_EN);
rtc_gpio_hold_dis((gpio_num_t)P_LORA_GC1109_PA_TX_EN);
rtc_gpio_hold_dis((gpio_num_t)P_LORA_KCT8103L_PA_CSD);
rtc_gpio_hold_dis((gpio_num_t)P_LORA_KCT8103L_PA_CTX);
pinMode(P_LORA_PA_POWER,OUTPUT);
digitalWrite(P_LORA_PA_POWER,HIGH);
delay(1);
pinMode(P_LORA_KCT8103L_PA_CSD,INPUT); // detect which FEM is used
esp_reset_reason_t reason = esp_reset_reason();
if (reason != ESP_RST_DEEPSLEEP) {
delay(1); // FEM startup time after cold power-on
}
// Auto-detect FEM type via shared GPIO2 default pull level.
// GC1109 CSD: internal pull-down → reads LOW
// KCT8103L CSD: internal pull-up → reads HIGH
rtc_gpio_hold_dis((gpio_num_t)P_LORA_KCT8103L_PA_CSD);
pinMode(P_LORA_KCT8103L_PA_CSD, INPUT);
delay(1);
if(digitalRead(P_LORA_KCT8103L_PA_CSD)==HIGH) {
// FEM is KCT8103L
// FEM is KCT8103L (V4.3)
fem_type= KCT8103L_PA;
pinMode(P_LORA_KCT8103L_PA_CSD, OUTPUT);
digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
rtc_gpio_hold_dis((gpio_num_t)P_LORA_KCT8103L_PA_CTX);
pinMode(P_LORA_KCT8103L_PA_CTX, OUTPUT);
digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH);
digitalWrite(P_LORA_KCT8103L_PA_CTX, lna_enabled ? LOW : HIGH);
setLnaCanControl(true);
} else if(digitalRead(P_LORA_KCT8103L_PA_CSD)==LOW) {
// FEM is GC1109
} else {
// FEM is GC1109 (V4.2)
fem_type= GC1109_PA;
pinMode(P_LORA_GC1109_PA_EN, OUTPUT);
digitalWrite(P_LORA_GC1109_PA_EN, HIGH);
pinMode(P_LORA_GC1109_PA_TX_EN, OUTPUT);
digitalWrite(P_LORA_GC1109_PA_TX_EN, LOW);
} else {
fem_type= OTHER_FEM_TYPES;
}
}
@ -71,9 +75,9 @@ void LoRaFEMControl::setRxModeEnable(void)
} else if(fem_type==KCT8103L_PA) {
digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
if(lna_enabled) {
digitalWrite(P_LORA_KCT8103L_PA_CTX, LOW);
digitalWrite(P_LORA_KCT8103L_PA_CTX, LOW); // LNA on
} else {
digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH);
digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH); // LNA bypass
}
}
}
@ -90,9 +94,9 @@ void LoRaFEMControl::setRxModeEnableWhenMCUSleep(void)
digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
rtc_gpio_hold_en((gpio_num_t)P_LORA_KCT8103L_PA_CSD);
if(lna_enabled) {
digitalWrite(P_LORA_KCT8103L_PA_CTX, LOW);
digitalWrite(P_LORA_KCT8103L_PA_CTX, LOW); // LNA on
} else {
digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH);
digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH); // LNA bypass
}
rtc_gpio_hold_en((gpio_num_t)P_LORA_KCT8103L_PA_CTX);
}