TXW82x SDK 网络流量调优指南
| 项目 | 内容 |
|---|---|
| 修订日期 | 2026-10-21 |
| 适用SDK | TXW82x_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(调优上限配置)
调优路线
按以下顺序逐层检查,每完成一层做一次基线压测对比(点击章节号跳转):
| 顺序 | 调优项 | 章节 | 关键动作 |
|---|---|---|---|
| 1 | CPU主频 | 第3章 | DEFAULT_SYS_CLK提至192MHz(最高240MHz),保证CPU占用率有足够余量 |
| 2 | Flash速率 | 第4章 | SPI_CLK_MHZ以FPV基准0x3c(60MHz)起步,外挂FLASH可提至0x50(80MHz);也可启动后用ll_xip_clock_init()运行时提频 |
| 3 | PSRAM及内存布局 | 第5章 | 开PSRAM_HEAP,保证SKB池/RXBUF容量与PSRAM带宽余量 |
| 4 | WiFi参数 | 第6章 | TX/RX聚合按场景开关;速率控制、重传、功耗策略见第7章 |
| 5 | LWIP参数 | 第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 调优建议
- 网络吞吐类产品建议直接使用192MHz;功耗敏感且流量小的场景可酌情下调。
- 系统时钟最高240MHz;频率越高功耗越高,接近上限的频率量产前必须做高低温与长时间老化验证。
- CPU1时钟:
CONFIG_CORE_CPU_CLK默认取DEFAULT_SYS_CLK(txw82xApp/sys_config.h:25),一般与CPU0同频即可,不要低于CPU0。 - 网络忙时CPU0占用率长期>90%(
AT+SYSDBG=top,1观察)时优先升频,其次再优化协议栈参数。
系统时钟192MHz→240MHz的实测收益(屏蔽房环境,TXW828-E016,PSRAM=320MHz、Flash=60MHz,打流条件同3.5案例):
| 配置 | TCP RX | TCP TX | UDP RX | UDP TX |
|---|---|---|---|---|
| sysclk=192MHz | 28.78 | 25.77 | 36.31 | 35.15 |
| sysclk=240MHz | 30.65 | 30.34 | 36.53 | 39.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 RX | TCP TX | UDP RX | UDP TX |
|---|---|---|---|---|
| 0(空载) | 28.8 | 25.8 | 36.3 | 35.1 |
| 20%(实测15%~19%) | 25.3 | 21.6 | 25.1 | 32.4 |
| 40%(实测30%~39%) | 19.8 | 16.7 | 15.7 | 25.1 |
| 60%(实测45%~60%) | 14.6 | 11.7 | 7.3 | 16.7 |
| 80%(实测75%~80%) | 9.3 | 7.1 | 1.2 | 8.2 |
两点结论:
- 流量随CPU占用率近似线性下降:总占用率到80%时TCP吞吐只剩空载的约1/3,UDP RX几乎断流。网络产品调优的第一步是确认打流时
CPU Loading余量充足(建议业务预留后<60%)。 - 作为对照,同一平台空载下对比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工程默认 | 3c | 60MHz,网络类产品推荐基准 |
| 外挂FLASH | 推荐50 | 80MHz,推荐值,根据实际情况调整 |
| 内置FLASH的芯片 | 推荐60 | 96MHz,推荐值,根据实际情况调整 |
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 调优建议
- 每次提频后用
AT+PING、iperf、长时间老化验证稳定性;出现启动失败或数据异常时回调一档(推荐值需按FLASH型号、PCB走线、高低温表现据实调整)。 - 代码量大、中断密集的应用,可将热点函数放入SRAM/PSRAM执行:
__ram(SRAM代码段宏,见txw82xApp/sys_config.h:15)。
Flash时钟60MHz→80MHz的实测收益(sysclk=240MHz、PSRAM=320MHz,与3.4节同批对比测试,对比图见3.4节):
| 配置 | TCP RX | TCP TX | UDP RX | UDP TX |
|---|---|---|---|---|
| Flash=60MHz | 30.65 | 30.34 | 36.53 | 39.14 |
| Flash=80MHz | 32.21 | 33.45 | 36.82 | 44.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 RX | TCP TX | UDP RX | UDP TX |
|---|---|---|---|---|
| 64MHz | 27.8 | 24.9 | 32.1 | 33.9 |
| 128MHz | 28.5 | 24.7 | 35.9 | 35.1 |
| 192MHz | 28.4 | 25.2 | 34.1 | 35.2 |
| 240MHz | 28.3 | 25.1 | 36.5 | 35.2 |
| 320MHz | 28.8 | 25.8 | 36.3 | 35.1 |
可见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_HEAP | IPC demo开启 | 启用PSRAM堆。网络吞吐场景必须开启,否则lwIP大缓冲配置不生效(见第8章) |
CONFIG_CORE_RXBUF_SIZE | 10KB | CPU1 LMAC接收缓冲。≤14KB自动使用链接脚本保留的SRAM2-3空间(system0.c);要开RX聚合建议≥18KB |
CONFIG_CORE_SKB_POOL_SIZE | 200KB | CPU1 SKB池(PSRAM)。跨核RX帧与WiFi重排序缓存,吞吐/多STA场景可加大;视频应用注意与CONFIG_PSRAM_AVHEAP_SIZE(demo为7.5MB)争用PSRAM |
CONFIG_CORE_HEAP_SIZE | 40KB | CPU1协议栈堆 |
SYS_HEAP_SIZE / SYS_PSRAM_HEAP_SIZE | SRAM/PSRAM池剩余全部 | CPU0侧malloc默认池/os_malloc_psram池 |
调优建议:
- 开RX聚合或AP带多STA时,把
CONFIG_CORE_RXBUF_SIZE提到18~34KB。 - 吞吐不稳、
AT+SYSDBG=heap,1显示skb池水位接近上限时,增大CONFIG_CORE_SKB_POOL_SIZE(每增100KB约消耗PSRAM 100KB)。 - 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 RX | TCP TX | UDP RX | UDP TX |
|---|---|---|---|---|---|
| 0% | ~0% | 28.9 | 25.7 | 35.9 | 34.1 |
| 20% | ~21% | 28.9 | 25.5 | 33.4 | 34.1 |
| 40% | ~42% | 28.4 | 25.4 | 34.0 | 33.3 |
| 60% | ~61% | 27.8 | 24.8 | 28.3 | 33.4 |
| 80% | ~82% | 27.8 | 24.7 | 20.3 | 33.3 |
结论与建议:
- TCP对PSRAM带宽占用不敏感:占用80%时TCP RX仅下降约4%(28.9→27.8Mbps),TCP的重传与拥塞控制能吸收总线争用带来的波动。
- UDP下行在占用超过60%后明显劣化:80%时UDP RX从35.9降至20.3Mbps(约-44%)且波动加大;UDP TX基本不受影响。图传等UDP大流量场景对此要特别留意。
- 视频类大流量应用应为网络预留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_EN | 0 | 1 | demo注释:"没时延要求可以开聚合。一般来说连路由就设1,连手机就设0" |
WIFI_RX_AGG_EN | 0 | 0(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_AGG | RX_AGG | 附加配置 |
|---|---|---|---|
| IPC连路由器上传(云存/直播) | 1 | 0(与IPC demo一致) | 下行压力大且CONFIG_CORE_RXBUF_SIZE≥18KB时,可尝试开RX聚合并使能RX reorder |
| 图传/语音等低时延连手机热点 | 0 | 0 | 手机热点对A-MPDU支持差,关闭最稳 |
| 大文件下载(OTA/FTP) | 0或1 | 1 | 下行流量为主,RX聚合收益最大 |
| 遥控/信令类小包交互 | 0 | 0 | 避免聚合等待引入时延抖动 |
7. WiFi射频与MAC层调优
以下宏均在sys_config.h定义、wifi.c: sys_wifi_parameter_init()统一应用,多数也有对应的运行时API可动态调整:
| 配置项 | 默认 | 调优指引 |
|---|---|---|
RATE_CONTROL_SELECT | 3(IPC模式) | 速率自适应算法档位。吞吐异常回落时尝试切换档位定位问题;配合lmac_set_supp_rate(ops, WIFI_TX_SUPP_RATE)限定速率集(默认0x0FFFFF全速率) |
WIFI_TX_MAX_RETRY | 15 | 数据帧最大重传。弱信号环境减小可加速失败切换,但降低成功率 |
WIFI_RTS_THRESHOLD | -1(关闭) | 密集干扰/隐藏终端场景设为500~1500开RTS/CTS,减少大帧碰撞浪费;正常环境保持关闭(RTS本身有开销) |
WIFI_RTS_MAX_RETRY | 2 | RTS重传次数 |
WIFI_BSSBW_DEFAULT | 20(MHz) | 20MHz带宽;环境干净且对端支持40MHz时可评估提带宽 |
WIFI_HWMODE_DEFAULT | 11N | 保证11n以获得聚合与高MCS |
WIFI_TX_DUTY_CYCLE | 100% | 发送占空比。认证/共存需要限流时下调,吞吐调优保持100 |
WIFI_MULICAST_RETRY | 0 | 组播重传次数。组播控制量大且要求可靠时可加1~2次 |
WIFI_PREVENT_PS_MODE_EN | 0(IPC demo=1) | AP模式下尽量阻止STA休眠,降低缓存帧时延;功耗场景关闭 |
WIFI_PS_NO_FRM_LOSS_EN | 0(IPC demo=1) | 使能后可减少休眠丢包情况 |
DTIM_PERIOD_DEFAULT | 10 | DTIM越小STA醒得越勤、下行时延越小,但更耗电 |
WIFI_HIGH_PRIORITY_TX_MODE_EN | 0 | 高优先级发送模式:放宽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_LEVEL | 0 | RF功率档位。够用前提下选低档可改善板内干扰 |
WIFI_FREQ_OFFSET_TRACK_MODE / WIFI_TEMPERATURE_COMPESATE_EN | 常开 | 频偏跟踪与温补保RF收发质量,保持开启;高低温吞吐劣化先查这两项 |
WIFI_SSID_FILTER_EN | 0 | 信道拥挤时过滤无关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_SIZE | 6(NAT:32) | 80 | 收包pbuf池,rx突发余量 |
TCP_SND_BUF | 4×MSS(5.8KB) | 40×MSS(58KB) | TCP发送窗口 |
TCP_WND | 4×MSS | 40×MSS | TCP接收窗口,直接决定下行吞吐 |
MEMP_NUM_TCP_SEG | 8 | 320 | TCP段缓存数 |
TCPIP_MBOX_SIZE | 64(NAT:512) | 128 | TCPIP线程邮箱深度 |
DEFAULT_TCP_RECVMBOX_SIZE | 10 | 64 | 每个TCP socket接收邮箱 |
DEFAULT_UDP_RECVMBOX_SIZE | 10 | 64 | 每个UDP socket接收邮箱 |
DEFAULT_ACCEPTMBOX_SIZE | 4 | 16 | listen队列 |
MEMP_NUM_TCP_PCB | 4 | 16 | 并发TCP连接数 |
MEMP_NUM_UDP_PCB | 4 | 8 | 并发UDP socket数 |
MEMP_NUM_NETCONN/NETBUF/PBUF | 6/16/10 | 16/64/40 | netconn与pbuf元池 |
MEM_SIZE | 8KB | 80KB | lwIP内部ram堆(MEM_LIBC_MALLOC=0时用) |
TCP_TMR_INTERVAL | 250ms | 50ms | TCP定时节拍,加快重传/窗口探测响应 |
TCP_MSS | 1460 | 1460 | 以太网标准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 其他关键点
-
窗口缩放:基础配置
LWIP_WND_SCALE=0(仅NAT时为1、scale=3)。要与高速PC对端传大文件,建议开启:#define LWIP_WND_SCALE 1 #define TCP_RCV_SCALE 2 // 窗口最大 = TCP_WND << 2 -
线程优先级:
TCPIP_THREAD_PRIO默认OS_TASK_PRIORITY_ABOVE_NORMAL。视频编码等CPU密集任务不要高于TCPIP线程,否则收发包被饿死。 -
关闭调试:量产关闭
LWIP_DEBUG与打印(SYS_DISABLE_PRINT),高流量下打印本身就会造成丢包;CPU余量大时可评估开启LWIP_CHECKSUM_ON_COPY减半校验计算。 -
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,1 | CPU占用率(识别CPU瓶颈) |
AT+SYSDBG=heap,1 | SRAM堆与SKB池水位(识别缓冲不足) |
AT+SYSDBG=umac,1 | WiFi协议栈统计(重传、聚合、速率) |
AT+SYSDBG=cache,1 | Cache命中率与PSRAM效率 |
AT+ICMP_MNTR=<dev>,1 | ICMP链路监测 |
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_CLK | sys_config.h | FPV:60M / IPC:192M | 最高240MHz |
CONFIG_CORE_CPU_CLK | sys_config.h | =DEFAULT_SYS_CLK | 同上 |
SPI_CLK_MHZ | makecode.ini | FPV工程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:351 | 320MHz | 160/240/274/320MHz挡位 |
SYS_CACHE_ENABLE | sys_config.h | FPV:1 | 0/1 |
PSRAM_HEAP | project_config.h | IPC demo开 | 宏开关 |
WIFI_TX_AGG_EN | sys_config.h | 0(IPC demo为1) | 0/1 |
WIFI_RX_AGG_EN | sys_config.h | 0(IPC demo亦为0) | 0/1(RXBUF≥18KB才建议1) |
CONFIG_CORE_RXBUF_SIZE | sys_config.h | 10KB | ≤14KB用SRAM保留区 |
CONFIG_CORE_SKB_POOL_SIZE | sys_config.h | 200KB | 按PSRAM余量 |
PBUF_POOL_SIZE | lwipopts.h | 6/NAT:32/PSRAM:80 | 按RAM预算 |
TCP_WND/TCP_SND_BUF | lwipopts.h | 4×MSS/PSRAM:40×MSS | 按RAM预算 |
LWIP_WND_SCALE | lwipopts.h | 0(NAT:1) | 0/1,TCP_RCV_SCALE 0~14 |
TCP_TMR_INTERVAL | lwipopts.h覆盖tcp_priv.h | 250ms/PSRAM:50ms | 50~250ms |
TCPIP_MBOX_SIZE | lwipopts.h | 64/PSRAM:128 | 32~512 |
RATE_CONTROL_SELECT | sys_config.h | 3 | 算法档位 |
以上默认值采集自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源码扫描生成,配置示例均标注来源文件,修改前请阅读对应文件内的原始注释。