请教一下,我使用模组esp32c3-mini1,用AT指令进行TCP透传。
AT固件版本2.4.2.0,
按照指南将UART的RX缓冲区改成了16*1024大小,串口波特率750000.
每隔100ms向模组发送200个字节左右的数据,主机有一个500ms的看门狗
用电脑测试网络环境不是很稳定,ping包平均时延163MS,丢包率0.3%。有时候延时能达到2000ms。
一开始没开硬件流控,存在很大几率丢包。
开启硬件流控后,有时会引起看门狗复位,因为我的串口发送是一直在等的,可能导致没能及时喂狗。
我想了解一下这个硬件流控是不是与底层的TCP发送有些联系,什么联系能告诉一下我吗。
或者是不是这样理解,我发送的数据先被接收到16*1024大小的缓冲区里,然后tcp在缓冲区里取数据。当缓冲区满了,但是当前TCP发送窗口还不能在缓冲区里取数据。那么此时流控就不会置位,导致我一直不能发送触发看门狗。
但是16*1024的缓冲区相对于我的数据量已经足够大了啊,能缓冲近十秒的数据。我看触发看门狗的速度还挺快的,上一秒我看服务器还在接数据,一会我这边就触发看门狗了。
麻烦帮忙看一下吧!!!
硬件流控触发看门狗
Moderator: ESP_XCGuang
Re: 硬件流控触发看门狗
没有开硬件流控,只要存在 UART 速率大于 TCP 发送速率,丢包就是必然的。
开启硬件流控后,你说的 watchdog 是什么样的呢,有日志么。
大致流程是这样:
1. UART 驱动里收到 MCU 过来的数据
2. UART 驱动抛 UART 事件到 AT 里 (https://github.com/espressif/esp-idf/bl ... rt.c#L1100)
3. AT 读取 UART 事件,向 AT core 里抛事件 (https://github.com/espressif/esp-at/blo ... ask.c#L196)
4. AT core 里读取事件,从 UART buffer 里读取数据,丢到 TCP WND 里
watchdog 和上面的没关系,是不是有死循环的可能。如果是软件的 task watchdog,可以参考这个文档定位 watchdog 问题:
https://blog.csdn.net/espressif/article ... .3001.4450
开启硬件流控后,你说的 watchdog 是什么样的呢,有日志么。
大致流程是这样:
1. UART 驱动里收到 MCU 过来的数据
2. UART 驱动抛 UART 事件到 AT 里 (https://github.com/espressif/esp-idf/bl ... rt.c#L1100)
3. AT 读取 UART 事件,向 AT core 里抛事件 (https://github.com/espressif/esp-at/blo ... ask.c#L196)
4. AT core 里读取事件,从 UART buffer 里读取数据,丢到 TCP WND 里
watchdog 和上面的没关系,是不是有死循环的可能。如果是软件的 task watchdog,可以参考这个文档定位 watchdog 问题:
https://blog.csdn.net/espressif/article ... .3001.4450
Who is online
Users browsing this forum: No registered users and 10 guests