乐鑫技术交流
直播中

硬件工程师1

9年用户 1515经验值
擅长:可编程逻辑
私信 关注
[问答]

是否可以针对WiFi调整PHY的动态速率缩放算法呢?

基于 ESP32-WROVER-32E 的数据记录器在白天收集数据并在夜间通过 WiFi 上传。
奇怪的是,批量传输速度开始时很快,但几分钟后就会大大降低(有时 1 分钟,有时 5 分钟,通常为 2 分钟)。
Sample1:
Sample2:
情况:
- 记录器和AP天线相距很远,大约90米;
- 这是在一个开放的领域,直接视线,非常安静(无线电方面)的环境中;
- 如您所见,RSSI 没有变化,约为 -74 dBm
- 具有相同代码的同一设备在靠近 AP 时可达到 10 Mbps 以上
我不确定是什么原因导致传输速度突然下降,但闻起来像是 PHY 问题,我怀疑这是 WiFi动态速率缩放功能。可能 ESP32 PHY 开始以更高的比特率发送数据包,发现一些丢失的数据包,调整速度,因此我们在前几分钟观察到 2-4 不同的 Mbps。然后它突然放弃并固定在 0.64 Mbps 上,这可能不会导致数据包丢失。
发生的另一件事是 ESP32 在 0.64 Mbps 模式下消耗更多功率。根据电池电压的下降(内阻和 co)粗略计算,我认为 ESP32 的总消耗从 ~150mA 跃升至约 ~350mA。
一般来说,卡在 0.64 Mbps 模式很糟糕,因为它在速度和功率方面都更糟。而且它不会自行解脱:除非设备被物理移动,否则它几乎永远不会提高到 0.6-0.8 Mbps 以上。但是如果你重新启动它,它又会以更快的速度开始,然后在几分钟后同样崩溃。
问题
是否可以针对 WiFi 调整 PHY 的动态速率缩放算法?我想指示它以更高的数据包丢失和重试为代价来优先考虑吞吐量。即“请,只有在丢包非常严重的情况下才降低比特率”。

回帖(2)

颜婷

2023-3-1 16:34:45
你有没有试过 esp_wifi_internal_set_fix_rate
举报

徐依妮

2023-3-1 16:35:24
esp_wifi_internal_set_fix_rate 是一个内部调试 API。
使用 esp_err_t esp_wifi_config_11b_rate(wifi_interface_t ifx, bool disable); 会更容易。
ESP32 的动态速率缩放基于 PER(数据包错误率)和 RSSI。该算法使将速率调低比调高更容易。当设备使用 1Mbps 速率时,会引入一些恶性循环:
1. 1Mbps 数据包具有较长的 TX 时间(1500 字节,12ms),在户外更容易受到干扰
2. 不好的 PER 很难接收使用更高的速率
为了摆脱恶性循环,我们还使用 RSSI 来调整速率。但是,RSSI 不是一个反馈信息,也不是那么稳定。所以我们在使用 RSSI 时是保守的。
如果你能在这里提供版本,我们可能会帮助调试这个。由于在某些版本中,我们尽量避免在某些情况下使用 1Mbps。
举报

更多回帖

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