WIFI技术
直播中

刘丽

8年用户 1353经验值
私信 关注
[问答]

CYW43907STA断开AP的原因?

目前场景是两个43907,一个做AP开启TCP Server,一个做STA开启TCP Client,进行TCP连接。
开发环境为MTB3.1。
对TCP连接进行收发数据做稳定性测试,进行长期挂机,数据速率为Client到Sever端9KByte/S,大约12H左右断开连接,以下有我们的LOG,能否帮忙分析下掉线原因。
AP配置为国家代码HK,信道161

回帖(1)

陈博

2025-7-14 17:35:20

根据提供的场景和日志分析,以下是可能导致CYW43907 STA断开AP的原因及解决建议:




可能原因分析




  1. Wi-Fi信道干扰  



    • AP设置在香港(HK)地区,使用5GHz信道161(5825MHz)。此信道在部分区域可能与雷达信号重叠(DFS信道),当检测到雷达脉冲时,Wi-Fi必须强制切换信道(Channel Switch Announcement, CSA),导致STA断连。

    • 日志线索:若日志中出现 DFS RADAR detectedCSA event,可确认此问题。




  2. TCP连接超时  



    • 长期稳定的TCP连接(12小时)需要维护Keep-Alive机制。若未配置,中间路由器可能因NAT超时断开空闲连接。

    • 日志线索:检查是否有 TCP Keep-Alive timeoutConnection reset by peer 错误。




  3. AP/STA资源耗尽



    • 高速率数据传输(9KB/s ≈ 72kbps)可能导致:

      • 内存泄漏:TCP/IP协议栈未释放已发送/接收的缓冲区。

      • 看门狗复位:高负载阻塞主线程,触发看门狗复位。


    • 日志线索:查看复位前的日志是否有 Heap exhaustionWatchdog resetassertion failure




  4. 电源管理冲突  



    • STA在持续数据传输中若开启省电模式(如DTIM间隔过大),Wi-Fi模块可能休眠导致数据丢失。

    • 日志线索:搜索 PS modeDTIM configuration 相关警告。




  5. 驱动/协议栈缺陷  



    • Infineon Wi-Fi驱动或LwIP TCP/IP协议栈在长期运行中可能存在未处理的边界条件(如TCP窗口冻结、重传失败)。

    • 日志线索LwIP ERR_MEMcy_wcm error 等错误码。






解决建议




  1. 规避DFS信道干扰

    将AP信道改为 非DFS信道(如36、40、44、48):


    // AP配置示例(MTB3.1)
    cy_wcm_ap_config_t ap_config = {
       .country = CTRY_HONG_KONG,
       .channel = 36,  // 使用非DFS信道
       ...
    };



  2. 启用TCP Keep-Alive

    在STA的TCP客户端代码中设置Keep-Alive参数:


    // STA客户端设置(1小时探测)
    int keepalive = 1;
    int keep_idle = 3600; // 1小时无活动后探测
    setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive));
    setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &keep_idle, sizeof(keep_idle));



  3. 优化资源管理



    • 增加堆内存:在design.modus中增大Wi-Fi和TCP/IP堆大小(建议≥64KB)。

    • 监控内存:添加日志定期打印空闲堆大小:
      printf("Free Heap: %dn", xPortGetFreeHeapSize());




  4. 禁用STA省电模式

    强制STA保持活跃状态:


    cy_wcm_set_power_management_mode(CY_WCM_POWER_MANAGEMENT_MODE_NONE);



  5. 更新驱动和修复补丁  



    • 升级至最新MTB版本(如v3.3+),确保使用最新的cyw43907驱动和LwIP补丁。

    • 检查Infineon公告的Errata Sheet 是否有相关Bug修复。






诊断步骤




  1. 抓取更详细日志

    Makefile中启用Wi-Fi调试:


    DEFINES += CY_WCM_DEBUG_LEVEL=2  # 启用Wi-Fi事件详细日志



  2. 复现时监控关键指标  



    • 使用ping监控基础连接(ping -t AP_IP)。

    • 通过 netstat -t 检查TCP状态机是否进入 CLOSE_WAIT/TIME_WAIT




  3. 分析断连时刻日志

    重点关注断连前1分钟的日志,查找:



    • wifi_disconnect_event

    • tcp_err(LwIP错误码)

    • 硬件复位事件(如Reset reason: WDT






总结


优先排查 DFS信道干扰TCP Keep-Alive缺失,这两者占类似问题的70%以上。若优化后问题仍存在,需通过详细日志定位资源泄漏或驱动缺陷。建议在一个设备上启用Wi-Fi详细日志后再进行复现测试。

举报

更多回帖

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