You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lora E220-400T22S与ESP32S接线异常及RF收发失败问题排查

问题排查:Ebyte E220-400T22S LoRa模块与ESP32-S通信故障

问题背景

将搭载在Ebyte E15板的E220-400T22S LoRa模块与ESP32-S连接,尝试基于ESP-IDF LoRa库实现RF收发,但初始化失败(读取寄存器0x42返回0xff);改用UART直连后仍无法收发数据。当前接线及代码如下:

初始接线(LoRa库模式)

  • LoRa GND → ESP32-S GND
  • LoRa VCC → ESP32-S 5V
  • LoRa TXD → ESP32-S P19
  • M0、M1 → GND

UART模式接线

  • LoRa RXD → ESP32-S GPIO16
  • LoRa TXD → ESP32-S GPIO17
  • M0、M1 → GND
  • 电源、地接线同前

接收端UART代码

#define ECHO_TEST_TXD (17)
#define ECHO_TEST_RXD (16)
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)

#define ECHO_UART_PORT_NUM      (UART_NUM_0)
#define ECHO_UART_BAUD_RATE     (115200)

#define BUF_SIZE (1024)

void lora_uart() {

/* Configure parameters of an UART driver,
 * communication pins and install the driver */
uart_config_t uart_config = {
    .baud_rate = ECHO_UART_BAUD_RATE,
    .data_bits = UART_DATA_8_BITS,
    .parity    = UART_PARITY_DISABLE,
    .stop_bits = UART_STOP_BITS_1,
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
    .source_clk = UART_SCLK_DEFAULT,
};
int intr_alloc_flags = 0;


#if CONFIG_UART_ISR_IN_IRAM
    intr_alloc_flags = ESP_INTR_FLAG_IRAM;
#endif

ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags));
ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS));

// Configure a temporary buffer for the incoming data
uint8_t *data = (uint8_t *) malloc(BUF_SIZE);

while (1) {
    // Read data from the UART
    ESP_LOGI(TAG, "Receiving.....");
    int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS);
    if (len) {
        data[len] = '\0';
        ESP_LOGI(TAG, "Recv str: %s", (char *) data);
    }
    vTaskDelay(1000);
}
}

发送端UART代码

#define ECHO_TEST_TXD (17)
#define ECHO_TEST_RXD (16)
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)

#define ECHO_UART_PORT_NUM      (UART_NUM_0)
#define ECHO_UART_BAUD_RATE     (115200)

#define BUF_SIZE (1024)


void lora_uart() {

/* Configure parameters of an UART driver,
 * communication pins and install the driver */
uart_config_t uart_config = {
    .baud_rate = ECHO_UART_BAUD_RATE,
    .data_bits = UART_DATA_8_BITS,
    .parity    = UART_PARITY_DISABLE,
    .stop_bits = UART_STOP_BITS_1,
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
    .source_clk = UART_SCLK_DEFAULT,
};
int intr_alloc_flags = 0;

#if CONFIG_UART_ISR_IN_IRAM
    intr_alloc_flags = ESP_INTR_FLAG_IRAM;
#endif

ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags));
ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS));

// Configure a temporary buffer for the incoming data
// uint8_t *data = (uint8_t *) malloc(BUF_SIZE);

while (1) {
    // Write data back to the UART
    ESP_LOGI(TAG, "Sending....." );
    uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) "Hello", 5);
    ESP_LOGI(TAG, "Wrote data str: %s", (char *) "Hello");
    vTaskDelay(1000);
}
}

故障排查步骤

1. 核心驱动与接线逻辑错误

  • 库选型错误:你使用的esp-idf-sx127x库是针对SPI接口的SX127x系列LoRa模块设计的,但E220-400T22S是UART接口模块,完全不兼容SPI驱动,这是初始化失败的根本原因。
  • UART串口冲突:代码中使用UART_NUM_0,这是ESP32的默认调试串口(用于烧录和日志输出),会导致模块通信与调试输出冲突,建议改用UART_NUM_1或UART_NUM_2。
  • 电源负载问题:E220发射时峰值电流约220mA,ESP32的5V引脚输出能力有限,可能导致模块供电不稳。建议改用独立3.3V电源供电,或确认ESP32 5V输出能满足负载需求。

2. 串口参数不匹配

E220模块默认串口参数为9600波特率、8位数据位、1位停止位、无校验,但你的代码设置为115200波特率,这会直接导致串口通信乱码或无法接收。需将ECHO_UART_BAUD_RATE修改为9600。

3. 代码逻辑缺陷

  • 接收超时过短:接收端uart_read_bytes的超时设置为20ms,LoRa透传存在传输延迟,建议修改为1000 / portTICK_PERIOD_MS(1秒),避免错过数据。
  • 缺少模块状态检测:E220的AUX引脚是就绪状态指示(高电平=就绪,低电平=忙),建议将AUX引脚接ESP32的GPIO,发送前检测AUX状态,确保模块处于就绪状态。

4. 硬件与模式验证

  • 模式引脚确认:M0=0、M1=0是透传模式(默认),需确认引脚确实接地,无虚接;若M1=1,模块会进入AT配置模式,无法正常收发RF数据。
  • 天线连接:E220必须接天线才能正常收发,否则信号衰减严重,无法完成通信。
  • 硬件检测:用万用表测量模块VCC-GND电压,确保在3.3V~5V范围内;用逻辑分析仪检测UART引脚波形,确认ESP32是否有数据输出、模块是否有数据返回。

修正后的建议方案

  1. 更换驱动方式:放弃SPI的sx127x库,直接使用ESP-IDF的UART驱动与E220通信。
  2. 调整接线:
    • LoRa VCC → 独立3.3V电源(或ESP32 5V,需确认电流足够)
    • LoRa GND → ESP32 GND
    • LoRa TXD → ESP32 GPIO16(UART2 RXD)
    • LoRa RXD → ESP32 GPIO17(UART2 TXD)
    • LoRa M0 → GND
    • LoRa M1 → GND
    • LoRa AUX → ESP32 GPIO4(可选,用于状态检测)
  3. 修正串口配置:设置波特率为9600,使用UART_NUM_2避免调试冲突。
  4. 优化代码逻辑:延长接收超时时间,添加AUX状态检测逻辑。

内容的提问来源于stack exchange,提问作者Saeed isa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:32:03