NXP MCU 技术论坛
直播中

王桂兰

7年用户 1171经验值
私信 关注
[问答]

请问如何在***器应用程序中获取wifi数据包速率?

我想构建一个应用程序来测量 WiFi 信道负载。这需要计算接收到的数据包的空中时间。我的做法是:

1. 将ESP32配置为混杂模式,开启接收各种数据包。

2. 在rx回调中,获取包速率和包长度。

3. 使用速率和长度,计算 tx 时间,并添加前导码:air_time = length * 8 / rate + 192 us。

例如,如果我以 1 Mbps 的速度接收到一个 1000 字节的数据包,则传输时间为:

air_time = 1000 * 8 / 1e6 + 192e-6 = 8192 us。

我的问题是我不知道如何获得数据包速率。目前我检查wifi_pkt_rx_ctrl_t数据并执行以下操作:
1. 如果数据包是 802.11n (sig_mode == 1),获取带宽(20 或 40 MHz)、SGI 和 MCS,使用此表进行解码。

2. 如果数据包是 802.11bg (sig_mode == 0),则使用速率字段。

问题出在第 2 步。我在速率字段上遇到两个问题: 1. wifi_pkt_rx_ctrl_t::rate

是如何解释的?它是以 500 kbps 为单位的比特率吗(例如,速率 22 表示 11 Mbps)?或者我应该使用wifi_phy_rate_t枚举来解释它(例如速率 3 是 11 Mbps)?

2. 独立于我如何解释这个字段,我在我所做的捕获中有不一致的值。例如,我没有看到以 1 Mbps 传输的帧,应该有很多,因为当我使用运行 Wireshark 的 PC 进行捕获时,我看到的主要是信标帧。

更多回帖

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