乐鑫技术交流
直播中

王艳

7年用户 1232经验值
私信 关注
[问答]

启用了硬件的流控RTS,CTS, 出现esp-modem: HW FIFO Overflow是什么原因导致的?

Config UART */
    uart_config_t uart_config = {
        .baud_rate = config->baud_rate,
        .data_bits = config->data_bits,
        .parity = config->parity,
        .stop_bits = config->stop_bits,
        .flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS ,
        .rx_flow_ctrl_thresh = 122 //UART_FIFO_LEN -8
    };

    MODEM_CHECK(uart_param_config(esp_dte->uart_port, &uart_config) == ESP_OK, "config modem uart parameter failed", err_uart_config);
    if (config->flow_control == MODEM_FLOW_CONTROL_HW) {
        printf("[MODEM UART FLOW_CONTROL]:uart_set_pin,rts pin:%d,cts pin:%dn",config->uart_pins_rts,config->uart_pins_cts);
        res = uart_set_pin(esp_dte->uart_port, config->uart_pins_txd, config->uart_pins_rxd,
                           config->uart_pins_rts, config->uart_pins_cts);
        
    } else {
        res = uart_set_pin(esp_dte->uart_port, config->uart_pins_txd, config->uart_pins_rxd,
                           UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    }
   
    MODEM_CHECK(res == ESP_OK, "config modem uart gpio failed", err_uart_config);
-----------------------------------------------------------------------------------------------------
使用以上代码初始化了 4G 模块的串口,4G模块也已启用 RTS /CTS 硬件流控,并验证了4G模块的RTS/CTS是有效的;ppp拨号也成功建立了连接:
[HOS MODEM] esp_modem_dte_send_cmd,port:1,cmd:ATD*99***1#
[HOS MODEM] AT read:

[HOS MODEM] AT read:CONNECT

pppos netif created! addr=0x3f80bb3c
Modem PPP Started
Modem Connect to PPP Server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IP          : 10.50.115.93
Netmask     : 255.255.255.255
Gateway     : 10.64.64.64
Name Server1: 183.230.126.225
Name Server2: 183.230.126.224
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[HOS IP ROUTE] add item :0,ip: 180.153.49.147, netmask:255.255.255.255, gw:10.64.64.64
[HOS IP ROUTE] add item :1,ip: 180.153.49.128, netmask:255.255.255.255, gw:10.64.64.64

应用程序运行在 Core1 上,CPU负荷比较高,大约在 95% 以上

用示波器看 RTS 引脚,可以看到 RTS 有变化,

但仍然频繁出现 :
W (374153) esp-modem: HW FIFO Overflow
W (374173) esp-modem: HW FIFO Overflow
W (374953) esp-modem: HW FIFO Overflow
W (374983) esp-modem: HW FIFO Overflow
W (377023) esp-modem: HW FIFO Overflow
W (377043) esp-modem: HW FIFO Overflow
W (380103) esp-modem: HW FIFO Overflow
W (386633) esp-modem: HW FIFO Overflow
W (394133) esp-modem: HW FIFO Overflow
W (400463) esp-modem: HW FIFO Overflow
dhcps: send_nak>>udp_sendto result 0
W (426463) esp-modem: HW FIFO Overflow
dhcps: send_nak>>udp_sendto result 0
dhcps: send_nak>>udp_sendto result 0

请问这个是说明原因呢?
                        

回帖(1)

余彦

2024-6-25 09:23:40
我也遇到这个问题了。主要问题在于中断处理不够快,FIFO的数据无法快速转换到Ring Buffer里。
可以通过设置menuconfig菜单,(Top) → Component config → Driver configurations → UART configuration 。
选中Place UART ISR function into IRAM。

然后记得根据你更新包的大小适度调到Ring Buffer的值,建议用4096.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分