V1.0 / 指南 / 中文

TXW82x SDK 网络流量调优指南

项目内容
修订日期2026-10-21
适用SDKTXW82x_V2.7(含TXW827/TXW828等82X系列)
适用工程FPV(IPC/图传)工程及基于SDK的客户工程
网络协议栈lwIP 2.2.1(sdk/lib/net/lwip)
WiFi协议栈UMAC(IEEE802.11) + LMAC,双核架构(CPU0应用 / CPU1基带)

1. 概述

本指南面向使用TXW82x系列SDK进行网络类产品(IPC摄像头、图传FPV、IoT上传设备等)开发的软件工程师,指导如何通过软件配置对网络吞吐量、时延、丢包率进行调优。

声明:本指南的参数取值与测试数据均基于特定评估板与测试环境(屏蔽房、固定衰减、指定固件配置),实际效果以产品实际情况为准。每次调整后必须重新进行压力测试与长时间老化验证;调优不排除引入系统稳定性、功耗、时序裕量等问题,量产前请完成高低温等可靠性验证。

网络流量参考

下表为82X学习板的iperf实测值:实测条件为屏蔽房环境、82X作STA连接路由器(82X端30dB衰减)、PSRAM=320MHz、TX开聚合/RX不开聚合,数据详情见3.4、4.4节:

指标基础配置(注1)调优后配置(注2)
TCP RX(下行)~28.8 Mbps~32.2 Mbps
TCP TX(上行)~25.8 Mbps~33.5 Mbps
UDP RX(下行)~36.3 Mbps~36.8 Mbps
UDP TX(上行)~35.2 Mbps~45.0 Mbps

注1:sysclk=192MHz、Flash=60MHz(SDK默认典型配置)

注2:sysclk=240MHz、Flash=80MHz(调优上限配置)

调优路线

按以下顺序逐层检查,每完成一层做一次基线压测对比(点击章节号跳转):

顺序调优项章节关键动作
1CPU主频第3章DEFAULT_SYS_CLK提至192MHz(最高240MHz),保证CPU占用率有足够余量
2Flash速率第4章SPI_CLK_MHZ以FPV基准0x3c(60MHz)起步,外挂FLASH可提至0x50(80MHz);也可启动后用ll_xip_clock_init()运行时提频
3PSRAM及内存布局第5章开PSRAM_HEAP,保证SKB池/RXBUF容量与PSRAM带宽余量
4WiFi参数第6章TX/RX聚合按场景开关;速率控制、重传、功耗策略见第7章
5LWIP参数第8章缓冲与窗口按RAM预算加大,必要时开窗口缩放

压测与观测命令见第9章,场景化组合配置见第10章,全参数速查见第11章。

2. 网络数据通路与瓶颈分析

TXW82x为双核架构,网络数据需要跨核传输,理解通路是定位瓶颈的前提:

                     CPU0(应用核)                        CPU1(通信核)
 ┌──────────────────────────────────────┐   RPC/Mailbox   ┌─────────────────────────┐
 │ 应用任务 ←→ socket ←→ lwIP(TCPIP线程) │ <────────────>  │ UMAC ↔ LMAC ↔ RF        │
 │            netdev/ethernetif         │   skb(PSRAM池)  │ rxbuf(SRAM)  skbpool    │
 └──────────────────────────────────────┘                 └─────────────────────────┘
  • RX路径:RF → CPU1 LMAC(rxbuf) → 打包skb(从PSRAM中的SKB池分配)→ RPC跨核 → CPU0 lwIP → 应用。
  • TX路径:应用 → lwIP → netdev → RPC跨核 → CPU1 LMAC → RF。
  • 关键内存资源:
    • CONFIG_CORE_RXBUF_SIZE:CPU1的LMAC RX缓冲(SRAM)。
    • CONFIG_CORE_SKB_POOL_SIZE:CPU1的SKB池(PSRAM),跨核数据帧的载体。
    • CPU0侧lwIP的PBUF_POOL_SIZE、TCP_WND/TCP_SND_BUF等。
  • 任何一环"池子太小、取指太慢、时钟太低",都会表现为吞吐上不去、ping抖动或丢包。

CPU1资源分配见system0.c: sys_start_cpu1(),初始化见txw82xCore/main.c: sys_wifi_init()。

3. 系统时钟与CPU负载调优(DEFAULT_SYS_CLK / CPU占用率)

3.1 原理

CPU0运行lwIP协议栈与应用,CPU1运行WiFi协议栈。时钟频率直接决定每秒可处理的报文数。时钟过低时,典型表现为:iperf吞吐远低于RF能力、CPU占用率(AT+SYSDBG=top,1)接近100%。

3.2 配置方法

在工程sys_config.h(或project_config.h中覆盖)定义:

// 默认系统时钟(CPU0)
#define DEFAULT_SYS_CLK                 (192*1000000)
  • 生效链路:system0.c: system_clock_init() → sysctrl_cmu_sysclk_set(DEFAULT_SYS_CLK, 1)(sdk/chip/txw82x/sysctrl.c)。
  • 系统时钟最高可配置到240MHz(240*1000000),SDK按所配频率自动完成时钟源与分频设置。

3.3 SDK参考配置

工程DEFAULT_SYS_CLK说明
IPC 720P/1080P demo(sdk/demo/ipc_720p_demo/ipc_720p_config.h:30)192MHz视频+网络并发场景推荐值
FPV工程默认(txw82xApp/sys_config.h:115)60MHz低功耗兜底默认值,网络场景必须覆盖

3.4 调优建议

  1. 网络吞吐类产品建议直接使用192MHz;功耗敏感且流量小的场景可酌情下调。
  2. 系统时钟最高240MHz;频率越高功耗越高,接近上限的频率量产前必须做高低温与长时间老化验证。
  3. CPU1时钟:CONFIG_CORE_CPU_CLK默认取DEFAULT_SYS_CLK(txw82xApp/sys_config.h:25),一般与CPU0同频即可,不要低于CPU0。
  4. 网络忙时CPU0占用率长期>90%(AT+SYSDBG=top,1观察)时优先升频,其次再优化协议栈参数。

系统时钟192MHz→240MHz的实测收益(屏蔽房环境,TXW828-E016,PSRAM=320MHz、Flash=60MHz,打流条件同3.5案例):

配置TCP RXTCP TXUDP RXUDP TX
sysclk=192MHz28.7825.7736.3135.15
sysclk=240MHz30.6530.3436.5339.14
收益+6.5%+17.7%+0.6%+11.4%
不同配置流量对比

可见提升系统时钟对TCP(TX方向+17.7%)与UDP TX(+11.4%)收益明显,UDP RX基本不变。

3.5 调优案例:CPU占用率对实际流量的影响

CPU0上任何高占用率的线程(业务算法、编解码、频繁打印、自检逻辑等)都会挤占lwIP收发包的处理时间,直接拉低实际流量。打流/压测时先用AT+TOP打印各线程CPU占用率(等价于AT+SYSDBG=top,1):

Task Runtime Statistic, interval:1000ms
PID  Name                          %CPU    Stack  Prio            Status
 12   iperf_sta                      xx%    xxxx   xx (xxxxxxxx)    RUNNING
 ...
-------------------------- CPU Loading: 37%  --------------------------------

末行CPU Loading为CPU0总占用率。与网络传输无关的高负载线程会显著拉低实际流量,应先优化(降低执行频率、分片处理、降优先级、减少打印)再评估网络性能。

SDK的iperf打流测试方法:构造一个占空比可配置的负载模拟任务,按设定比例(20%/40%/60%/80%)空转占用CPU,模拟不同业务负载下的真实场景;同时运行iperf打流,并用AT+TOP记录实际CPU占用率(下表括号内为实测打印值)。

屏蔽房环境实测条件:TXW828-E016,固件psram_320M + sysclk_192M + Flash_60M,82X学习板作STA连接路由器(82X端加30dB衰减),TX开聚合、RX不开聚合:

CPU负载(AT+TOP实测)TCP RXTCP TXUDP RXUDP TX
0(空载)28.825.836.335.1
20%(实测15%~19%)25.321.625.132.4
40%(实测30%~39%)19.816.715.725.1
60%(实测45%~60%)14.611.77.316.7
80%(实测75%~80%)9.37.11.28.2
CPU占用率对吞吐量的影响

两点结论:

  1. 流量随CPU占用率近似线性下降:总占用率到80%时TCP吞吐只剩空载的约1/3,UDP RX几乎断流。网络产品调优的第一步是确认打流时CPU Loading余量充足(建议业务预留后<60%)。
  2. 作为对照,同一平台空载下对比PSRAM时钟64~320MHz,吞吐仅小幅波动(数据见5.1节)——PSRAM时钟对吞吐影响相对有限,CPU负载才是主要矛盾。

4. Flash时钟调优(makecode.ini / ll_xip_clock_init)

4.1 原理

CodeType=1(SPI)时,应用代码从SPI Flash XIP就地执行。CPU取指、取中断向量、常量数据都经过SPI Flash总线,Flash时钟过低是"系统时钟已拉满但吞吐仍上不去"的常见根因。

4.2 配置方法一:makecode.ini(启动时生效)

makecode.ini(工程目录下,随固件打包的参数)[SPI]段中的SPI_CLK_MHZ字段决定Flash工作时钟,取值为16进制、单位MHz。以FPV工程(txw82xApp/makecode.ini)为例,默认0x3c即60MHz:

SPI_CLK_MHZ=3c                      ; spi clk : 60Mhz
配置档位取值说明
FPV工程默认3c60MHz,网络类产品推荐基准
外挂FLASH推荐5080MHz,推荐值,根据实际情况调整
内置FLASH的芯片推荐6096MHz,推荐值,根据实际情况调整

4.3 配置方法二:启动后运行时提频(ll_xip_clock_init)

除makecode.ini外,SDK提供运行时调整接口(sdk/include/dev/xspi/hg_xspi_flash.h:69):

int ll_xip_clock_init(int clk_mhz);
  • clk_mhz = 0:使用makecode.ini配置的频率。
  • clk_mhz = 其他值:使用传入频率,单位MHz、10进制,如ll_xip_clock_init(80)即运行时提到80MHz。

返回0成功;非0表示校准失败,Flash保持原频率。

用法示例——makecode.ini保持保守的60MHz兜底,应用初始化时再提频:

if (ll_xip_clock_init(80) != 0) {
    // 校准失败,Flash保持原频率
}

4.4 调优建议

  1. 每次提频后用AT+PING、iperf、长时间老化验证稳定性;出现启动失败或数据异常时回调一档(推荐值需按FLASH型号、PCB走线、高低温表现据实调整)。
  2. 代码量大、中断密集的应用,可将热点函数放入SRAM/PSRAM执行:__ram(SRAM代码段宏,见txw82xApp/sys_config.h:15)。

Flash时钟60MHz→80MHz的实测收益(sysclk=240MHz、PSRAM=320MHz,与3.4节同批对比测试,对比图见3.4节):

配置TCP RXTCP TXUDP RXUDP TX
Flash=60MHz30.6530.3436.5339.14
Flash=80MHz32.2133.4536.8244.95
收益+5.1%+10.3%+0.8%+14.8%

两项提升叠加(sysclk 192MHz+Flash 60MHz → 240MHz+80MHz):TCP RX +11.9%、TCP TX +29.8%、UDP TX +27.9%,UDP RX基本持平——系统时钟与Flash时钟的收益可以叠加,高吞吐场景建议同时提升。

5. PSRAM时钟与内存布局调优

5.1 PSRAM时钟

  • 初始化入口:sdk/chip/txw82x/system0.c:351

    //  240M, 320M, 274M, 160M... 内部只有几个挡位,匹配最接近的配置
    int psram_heap_size = psram_auto_init(0, 320 * 1000000);
    
  • SDK默认初始化320MHz(不同的芯片型号对应的PSRAM最高工作时钟亦有差异),一般无需下调。

  • AT+SYSDBG=cache,1可打印PSRAM访问效率(sys_psram_eff_static),命中率过低说明访问模式不友好。

PSRAM时钟对吞吐量的实测影响(空载,屏蔽房环境,TXW828-E016,82X作STA连接路由器打流,平均流量单位Mbps;sysclk=192MHz、Flash=60MHz,TX开聚合、RX不开聚合):

PSRAM时钟TCP RXTCP TXUDP RXUDP TX
64MHz27.824.932.133.9
128MHz28.524.735.935.1
192MHz28.425.234.135.2
240MHz28.325.136.535.2
320MHz28.825.836.335.1
PSRAM时钟对吞吐量的影响

可见PSRAM时钟从64MHz提到320MHz,TCP吞吐变化不足1.1Mbps,UDP RX提升约4Mbps且主要集中在128MHz以内——时钟低于128MHz时UDP下行略有损失,128MHz以上收益趋平。默认320MHz是合理配置;仅在信号质量/功耗受限时降挡,并尽量不低于128MHz。

5.2 Cache配置(SYS_CACHE_ENABLE)

  • sys_config.h中SYS_CACHE_ENABLE 1(FPV工程默认开启)。
  • 开启PSRAM_HEAP后,system0.c: cache_open_psram()会把PSRAM区映射进DCache(32字节burst),网络大缓冲(SKB池、lwIP内存)放PSRAM必须依赖该Cache才不拖慢CPU。网络类产品保持SYS_CACHE_ENABLE=1。
  • CPU1侧DMA一致性由CONFI_CORE_DCACHE_MAINT_EN 1保证,勿关闭。

5.3 内存布局与网络缓冲

txw82xApp/sys_config.h中定义(CPU1资源从CPU0在system0.c: sys_start_cpu1()中分配传入):

宏默认值作用与建议
PSRAM_HEAPIPC demo开启启用PSRAM堆。网络吞吐场景必须开启,否则lwIP大缓冲配置不生效(见第8章)
CONFIG_CORE_RXBUF_SIZE10KBCPU1 LMAC接收缓冲。≤14KB自动使用链接脚本保留的SRAM2-3空间(system0.c);要开RX聚合建议≥18KB
CONFIG_CORE_SKB_POOL_SIZE200KBCPU1 SKB池(PSRAM)。跨核RX帧与WiFi重排序缓存,吞吐/多STA场景可加大;视频应用注意与CONFIG_PSRAM_AVHEAP_SIZE(demo为7.5MB)争用PSRAM
CONFIG_CORE_HEAP_SIZE40KBCPU1协议栈堆
SYS_HEAP_SIZE / SYS_PSRAM_HEAP_SIZESRAM/PSRAM池剩余全部CPU0侧malloc默认池/os_malloc_psram池

调优建议:

  1. 开RX聚合或AP带多STA时,把CONFIG_CORE_RXBUF_SIZE提到18~34KB。
  2. 吞吐不稳、AT+SYSDBG=heap,1显示skb池水位接近上限时,增大CONFIG_CORE_SKB_POOL_SIZE(每增100KB约消耗PSRAM 100KB)。
  3. 1080P等PSRAM紧张的场景,优先保证视频AV堆,其次SKB池;两者合计不要超过PSRAM实际容量减去AURPC_PSRAM_HEAP_SIZE(30KB)等保留项。

5.4 PSRAM带宽占用对流量的影响

SKB池、视频帧、lwIP缓冲都位于PSRAM,当视频读写、LCD显存刷新、大块memcpy等业务挤占PSRAM总线带宽时,网络收发会受到影响,评估时不能只看CPU占用率。

评估方法:构造一个按目标百分比(间隔20%为一档)m2m dma 占用PSRAM总线的带宽模拟线程,启动后系统出现对应的带宽模拟任务,按目标百分比持续读写PSRAM;打流期间从周期打印的PSRAM请求统计中记录读/写带宽,按下列公式核算实际占用率(带宽、占用稳定后再开始打流):

PSRAM总线带宽上限 ≈ MIN(3 × SYSCLK, PSRAM接口带宽)
示例:TXW828-E016(16线,SYSCLK=192MHz,PSRAM时钟320MHz)≈ 3 × 192M = 576MB/s
总线占用率 = (读速度 + 写速度) / 576MB/s

实测数据(空载CPU,屏蔽房环境实测,TXW828-E016,82X作STA连接路由器打流,平均流量单位Mbps;实测占用为打流期间统计值;sysclk=192MHz、PSRAM=320MHz、Flash=60MHz,TX开聚合、RX不开聚合):

带宽占用设定实测总线占用TCP RXTCP TXUDP RXUDP TX
0%~0%28.925.735.934.1
20%~21%28.925.533.434.1
40%~42%28.425.434.033.3
60%~61%27.824.828.333.4
80%~82%27.824.720.333.3
PSRAM带宽占用对吞吐量的影响

结论与建议:

  1. TCP对PSRAM带宽占用不敏感:占用80%时TCP RX仅下降约4%(28.9→27.8Mbps),TCP的重传与拥塞控制能吸收总线争用带来的波动。
  2. UDP下行在占用超过60%后明显劣化:80%时UDP RX从35.9降至20.3Mbps(约-44%)且波动加大;UDP TX基本不受影响。图传等UDP大流量场景对此要特别留意。
  3. 视频类大流量应用应为网络预留PSRAM带宽:视频码率+录卡写入等PSRAM访问总占用建议控制在60%以内;超出时优先降码率/帧率或降低分辨率。评估业务时,可将带宽模拟与真实业务叠加做iperf验证。

6. WiFi TX/RX聚合调优(重点)

6.1 原理

802.11n聚合(A-MPDU)把多个报文合成一个物理帧发送,一次块确认(Block ACK)确认多个报文,大幅摊薄帧间隔与应答开销。开聚合吞吐显著提升,但聚合等待会增大时延;关聚合则时延小、吞吐低。

6.2 配置方法

在project_config.h/sys_config.h中定义宏,工程初始化代码wifi.c会自动应用(project/demo/fpv/txw82x/txw82xApp/wifi.c:81):

#if WIFI_TX_AGG_EN == 0
    lmac_set_aggcnt(ops, 0);        // 关闭TX聚合
#endif
#if WIFI_RX_AGG_EN == 0
    lmac_set_rx_aggcnt(ops, 0);     // 关闭RX聚合
#endif

SDK默认值与demo实践:

宏sys_config.h默认IPC 720P/1080P demo说明
WIFI_TX_AGG_EN01demo注释:"没时延要求可以开聚合。一般来说连路由就设1,连手机就设0"
WIFI_RX_AGG_EN00(demo未覆盖,保持默认关闭)sys_config.h注释:CONFIG_CORE_RXBUF_SIZE小于18KB都不推荐使能

6.3 相关API(sdk/include/lib/lmac/lmac.h)

API作用
lmac_set_aggcnt(ops, cnt)设置/关闭TX聚合最大包数
lmac_set_rx_aggcnt(ops, cnt)设置/关闭RX聚合
lmac_set_tx_agg_tid_bitmap(ops, bitmap)按TID选择哪些业务流允许聚合(如只聚合大吞吐的数据流,控制面走非聚合降低时延)
lmac_bgn_module_rx_reorder_init(ops)RX重排序模块(WIFI_MODULE_RX_REORDER_EN=1时在CPU1自动初始化)。开RX聚合后建议使能,乱序帧直接在底层重排

6.4 场景建议

场景TX_AGGRX_AGG附加配置
IPC连路由器上传(云存/直播)10(与IPC demo一致)下行压力大且CONFIG_CORE_RXBUF_SIZE≥18KB时,可尝试开RX聚合并使能RX reorder
图传/语音等低时延连手机热点00手机热点对A-MPDU支持差,关闭最稳
大文件下载(OTA/FTP)0或11下行流量为主,RX聚合收益最大
遥控/信令类小包交互00避免聚合等待引入时延抖动

7. WiFi射频与MAC层调优

以下宏均在sys_config.h定义、wifi.c: sys_wifi_parameter_init()统一应用,多数也有对应的运行时API可动态调整:

配置项默认调优指引
RATE_CONTROL_SELECT3(IPC模式)速率自适应算法档位。吞吐异常回落时尝试切换档位定位问题;配合lmac_set_supp_rate(ops, WIFI_TX_SUPP_RATE)限定速率集(默认0x0FFFFF全速率)
WIFI_TX_MAX_RETRY15数据帧最大重传。弱信号环境减小可加速失败切换,但降低成功率
WIFI_RTS_THRESHOLD-1(关闭)密集干扰/隐藏终端场景设为500~1500开RTS/CTS,减少大帧碰撞浪费;正常环境保持关闭(RTS本身有开销)
WIFI_RTS_MAX_RETRY2RTS重传次数
WIFI_BSSBW_DEFAULT20(MHz)20MHz带宽;环境干净且对端支持40MHz时可评估提带宽
WIFI_HWMODE_DEFAULT11N保证11n以获得聚合与高MCS
WIFI_TX_DUTY_CYCLE100%发送占空比。认证/共存需要限流时下调,吞吐调优保持100
WIFI_MULICAST_RETRY0组播重传次数。组播控制量大且要求可靠时可加1~2次
WIFI_PREVENT_PS_MODE_EN0(IPC demo=1)AP模式下尽量阻止STA休眠,降低缓存帧时延;功耗场景关闭
WIFI_PS_NO_FRM_LOSS_EN0(IPC demo=1)使能后可减少休眠丢包情况
DTIM_PERIOD_DEFAULT10DTIM越小STA醒得越勤、下行时延越小,但更耗电
WIFI_HIGH_PRIORITY_TX_MODE_EN0高优先级发送模式:放宽AIFS/TXOP限制、EDCA slot 6us、NAV上限10ms(lmac_set_edca_max/min、lmac_set_tx_edca_slot_time、lmac_set_nav_max)。图传低时延场景可开启
WIFI_RF_PWR_LEVEL0RF功率档位。够用前提下选低档可改善板内干扰
WIFI_FREQ_OFFSET_TRACK_MODE / WIFI_TEMPERATURE_COMPESATE_EN常开频偏跟踪与温补保RF收发质量,保持开启;高低温吞吐劣化先查这两项
WIFI_SSID_FILTER_EN0信道拥挤时过滤无关beacon,降低CPU0软中断负载

运行时观测接口:lmac_get_per(ops, mac)(误包率)、lmac_get_tx_datarate、lmac_get_sta_snr、AT+SYSDBG=umac,1(WiFi协议栈状态周期打印)。

8. lwIP协议栈调优

8.1 配置文件与优先级

  • 主配置:sdk/lib/net/lwip/src/include/lwipopts.h,所有参数均为#ifndef包裹,工程可在sys_config.h/编译选项中直接覆盖,无需改SDK源码。
  • lwipopts.h按是否定义IP_NAT、以及工程sys_config.h中PSRAM_HEAP是否开启,自动切换两套配置。

8.2 SDK默认值 vs PSRAM优化值(FPV工程 txw82xApp/sys_config.h:483)

开启PSRAM_HEAP后自动生效第二列(大缓冲配置):

参数基础默认PSRAM优化(自动)说明
PBUF_POOL_SIZE6(NAT:32)80收包pbuf池,rx突发余量
TCP_SND_BUF4×MSS(5.8KB)40×MSS(58KB)TCP发送窗口
TCP_WND4×MSS40×MSSTCP接收窗口,直接决定下行吞吐
MEMP_NUM_TCP_SEG8320TCP段缓存数
TCPIP_MBOX_SIZE64(NAT:512)128TCPIP线程邮箱深度
DEFAULT_TCP_RECVMBOX_SIZE1064每个TCP socket接收邮箱
DEFAULT_UDP_RECVMBOX_SIZE1064每个UDP socket接收邮箱
DEFAULT_ACCEPTMBOX_SIZE416listen队列
MEMP_NUM_TCP_PCB416并发TCP连接数
MEMP_NUM_UDP_PCB48并发UDP socket数
MEMP_NUM_NETCONN/NETBUF/PBUF6/16/1016/64/40netconn与pbuf元池
MEM_SIZE8KB80KBlwIP内部ram堆(MEM_LIBC_MALLOC=0时用)
TCP_TMR_INTERVAL250ms50msTCP定时节拍,加快重传/窗口探测响应
TCP_MSS14601460以太网标准MSS,勿减小

未开启PSRAM时若要提升吞吐,可在工程配置中手动覆盖(注意SRAM预算,每1个pbuf约1.5KB):

#define PBUF_POOL_SIZE          16
#define TCP_SND_BUF             (8*TCP_MSS)
#define TCP_WND                 (8*TCP_MSS)
#define MEMP_NUM_TCP_SEG        32
#define DEFAULT_TCP_RECVMBOX_SIZE  20
#define TCPIP_MBOX_SIZE         128

8.3 其他关键点

  1. 窗口缩放:基础配置LWIP_WND_SCALE=0(仅NAT时为1、scale=3)。要与高速PC对端传大文件,建议开启:

    #define LWIP_WND_SCALE   1
    #define TCP_RCV_SCALE    2    // 窗口最大 = TCP_WND << 2
    
  2. 线程优先级:TCPIP_THREAD_PRIO默认OS_TASK_PRIORITY_ABOVE_NORMAL。视频编码等CPU密集任务不要高于TCPIP线程,否则收发包被饿死。

  3. 关闭调试:量产关闭LWIP_DEBUG与打印(SYS_DISABLE_PRINT),高流量下打印本身就会造成丢包;CPU余量大时可评估开启LWIP_CHECKSUM_ON_COPY减半校验计算。

  4. UDP大流量(如图传):DEFAULT_UDP_RECVMBOX_SIZE与PBUF_POOL_SIZE决定抗突发能力;应用侧读socket要快于收包速率,否则池耗尽丢包。

9. 调优流程与验证方法

9.1 标准调优流程

基线测试(AT+IPERF2) → SYSDBG定位瓶颈 → 按层调整配置 → 复测对比 → 老化与高低温验证

9.2 测试命令

命令用途
AT+IPERF2=?iperf用法帮助
AT+IPERF2=s,5001设备作TCP服务端,PC端iperf2 -c <dev_ip>推流测下行
AT+IPERF2=c,<ip>,5001,30,0设备作TCP客户端上传30秒,测上行
AT+IPERF2=u,c,<ip>,5001,30,<KB/s>,<len>UDP模式测试(带丢包统计)
AT+PING=<ip>时延/丢包基线
AT+TOP打印各线程CPU占用率与总负载(同AT+SYSDBG=top,1,用法见3.5案例)
AT+SYSDBG=top,1CPU占用率(识别CPU瓶颈)
AT+SYSDBG=heap,1SRAM堆与SKB池水位(识别缓冲不足)
AT+SYSDBG=umac,1WiFi协议栈统计(重传、聚合、速率)
AT+SYSDBG=cache,1Cache命中率与PSRAM效率
AT+ICMP_MNTR=<dev>,1ICMP链路监测

9.3 症状→对策速查

症状优先检查对策
上/下行吞吐都远低于预期(<实际RF能力一半)AT+SYSDBG=top,1:CPU占用1) AT+TOP排查并优化高负载线程(见3.5案例);2) DEFAULT_SYS_CLK提到192MHz;3) makecode.ini的SPI_CLK_MHZ提频(参照第4章);4) 确认PSRAM_HEAP开启
下行快、上行慢TX聚合WIFI_TX_AGG_EN 1;检查WIFI_TX_DUTY_CYCLE=100
上行快、下行慢RX缓冲WIFI_RX_AGG_EN 1 + CONFIG_CORE_RXBUF_SIZE≥18KB;加大TCP_WND、PBUF_POOL_SIZE
吞吐波动大、掉速不恢复速率控制/射频AT+SYSDBG=umac,1看重传率;检查温补/频偏跟踪开启;调整RATE_CONTROL_SELECT
ping时延大但吞吐正常聚合与DTIM关聚合(连手机场景);减小DTIM;WIFI_PREVENT_PS_MODE_EN
长时间运行后丢包SKB池水位AT+SYSDBG=heap,1观察,加大CONFIG_CORE_SKB_POOL_SIZE与PBUF_POOL_SIZE
CPU占用不高但UDP下行波动大PSRAM带宽占用按5.4节方法做带宽占用叠加验证;控制视频等PSRAM访问总占用<60%
高温后吞吐下降PSRAM/Flash时序PSRAM降挡(如240MHz)、SPI_CLK_MHZ适当下调;检查温补

10. 场景化推荐配置

10.1 IPC摄像头连路由器(云存储/预览,吞吐优先)

// project_config.h
#define DEFAULT_SYS_CLK            (192*1000000)
#define PSRAM_HEAP                              // 必开
#define WIFI_TX_AGG_EN             1
// WIFI_RX_AGG_EN保持默认0(IPC demo亦未开启);需提升下行且RXBUF≥18KB时再打开
#define CONFIG_CORE_RXBUF_SIZE     (18*1024)    // 可选,开RX聚合的前提
#define CONFIG_CORE_SKB_POOL_SIZE  (200*1024)
#define WIFI_PREVENT_PS_MODE_EN    1
#define WIFI_PS_NO_FRM_LOSS_EN     1
// makecode.ini: SPI_CLK_MHZ=0x3c(参照FPV工程)

lwIP用PSRAM_HEAP自动优化配置(第8.2节第二列),可再叠加窗口缩放。

10.2 FPV图传连手机热点(时延优先)

#define DEFAULT_SYS_CLK            (192*1000000)
#define WIFI_TX_AGG_EN             0
#define WIFI_RX_AGG_EN             0
#define WIFI_HIGH_PRIORITY_TX_MODE_EN  1     // EDCA高优先级
#define RATE_CONTROL_SELECT        3
// lwIP: 缓冲取基础默认即可,UDP图传加大 DEFAULT_UDP_RECVMBOX_SIZE=32

10.3 电池类低功耗设备(小流量上报)

#define DEFAULT_SYS_CLK            (120*1000000)   // 或按功耗实测选更低
#define WIFI_TX_AGG_EN             0
#define WIFI_RX_AGG_EN             0
// 不开PSRAM_HEAP,lwIP基础默认;上报瞬时数据可临时调大TCP_SND_BUF=4*MSS保持

11. 附录:参数速查表

参数位置默认值范围/挡位
DEFAULT_SYS_CLKsys_config.hFPV:60M / IPC:192M最高240MHz
CONFIG_CORE_CPU_CLKsys_config.h=DEFAULT_SYS_CLK同上
SPI_CLK_MHZmakecode.iniFPV工程0x3C(60MHz)16进制;外挂FLASH推荐0x50(80MHz)、内置FLASH推荐0x60(96MHz),据实调整
ll_xip_clock_init(clk_mhz)应用代码(hg_xspi_flash.h)启动时=makecode.ini配置运行时Flash时钟,单位MHz(10进制);返回非0为校准失败,保持原频
PSRAM时钟system0.c:351320MHz160/240/274/320MHz挡位
SYS_CACHE_ENABLEsys_config.hFPV:10/1
PSRAM_HEAPproject_config.hIPC demo开宏开关
WIFI_TX_AGG_ENsys_config.h0(IPC demo为1)0/1
WIFI_RX_AGG_ENsys_config.h0(IPC demo亦为0)0/1(RXBUF≥18KB才建议1)
CONFIG_CORE_RXBUF_SIZEsys_config.h10KB≤14KB用SRAM保留区
CONFIG_CORE_SKB_POOL_SIZEsys_config.h200KB按PSRAM余量
PBUF_POOL_SIZElwipopts.h6/NAT:32/PSRAM:80按RAM预算
TCP_WND/TCP_SND_BUFlwipopts.h4×MSS/PSRAM:40×MSS按RAM预算
LWIP_WND_SCALElwipopts.h0(NAT:1)0/1,TCP_RCV_SCALE 0~14
TCP_TMR_INTERVALlwipopts.h覆盖tcp_priv.h250ms/PSRAM:50ms50~250ms
TCPIP_MBOX_SIZElwipopts.h64/PSRAM:12832~512
RATE_CONTROL_SELECTsys_config.h3算法档位

以上默认值采集自TXW82x_V2.7.1 SDK源码(sdk/lib/net/lwip/src/include/lwipopts.h、project/demo/fpv/txw82x/txw82xApp/sys_config.h、project/demo/fpv/txw82x/txw82xApp/makecode.ini、sdk/demo/ipc_720p_demo/ipc_720p_config.h、sdk/chip/txw82x/system0.c等),如与最新SDK有出入,以代码为准。

本文档由SDK源码扫描生成,配置示例均标注来源文件,修改前请阅读对应文件内的原始注释。