WHC Wi-Fi 介绍
支持的芯片[ RTL8721Dx ][ RTL8721F ]
WHC Wi-Fi 架构
WHC Wi-Fi Fat Host 与 Slim Host
根据 Host 端是否运行 WPA_SUPPLICANT, WHC 分为 Fat Host 与 Slim Host 两种架构(其中 Linux Host 跑 cfg80211 属于 Fat Host 架构):
API_PATH
定义:Device 端驱动与 Host 端 WPA_SUPPLICANT 的标准化通信接口。
用途:仅当使用 Fat Host 模式时使用,供 SDK 内部调用。
配置:需通过 Menuconfig 按指导手动启用。
CMD_PATH
定义:Host 与 Device 间的非标准 API 数据传输通道(基于私有协议)。
用途:CMD_PATH 多数 API 为 SDK 内部使用。
配置:所有模式默认开启,无额外配置。
CUST_PATH
定义:基于 CMD_PATH ,我们为客户提供了专门的 API,用于客户定制化的任意数据传输,我们称为 CUST_PATH。
功能 1:通用数据传输,支持 Host 与 Device 间任意数据交互。
功能 2:Slim Host 模式下,标准 Wi-Fi API 不可用,所有的 Wi-Fi 控制都通过 CUST_PATH 实现。
配置:所有模式默认开启,无额外配置。
参考: CUST_PATH
WHC Wi-Fi 配置选项及典型模式
Fat Host 和 Slim Host:
Slim Host: WPA_SUPPLICANT 跑在 Device 端,对于非标准的 Linux 系统可以省去移植 WPA_SUPPLICANT 到 host 平台的烦恼, 缩短项目周期
Fat Host: WPA_SUPPLIAN 跑在 Host 端,在 Linux 环境下可以使用 WPA_SUPPLICANT 提供的 NAN/P2P 等功能
Slim Host 和 Fat Host 的选择受 Support WHC SUPPLICANT OFFLOAD 的控制
可选择的 Dual TCPIP
Device 端 LWIP 和 host 端 TCPIP stack 并行运行, Device 端 LWIP 用于提供必要的保活机制, 减少 Host 唤醒次数(IP Camera 场景下续航大幅提升)
Device 端的 LWIP 协议栈可以预处理部分数据包,实现 Host 流量预过滤
Slim Host |
Fat Host(cfg80211) |
|||
---|---|---|---|---|
Abbreviation |
S1D |
S1D-T |
S2H |
S2H-T |
WPA_SUPPLICANT OFFLOAD |
Y |
Y |
N |
N |
Dual TCPIP(T) |
N |
Y |
N |
Y |
API PATH |
N |
N |
Y |
Y |
CMD PATH |
Y |
Y |
Y |
Y |
Status |
Ready |
Ready |
Ready |
Ready |
Slim Host |
Fat Host |
|||
---|---|---|---|---|
Abbreviation |
S1D |
S1D-T |
S1H |
S1H-T |
WPA_SUPPLICANT OFFLOAD |
Y |
Y |
N |
N |
Dual TCPIP(T) |
N |
Y |
N |
Y |
API PATH |
N |
N |
Y |
Y |
CMD PATH |
Y |
Y |
Y |
Y |
Status |
Ready |
Ready |
Ready |
Ready |
Slim Host |
Fat Host |
|||
---|---|---|---|---|
Abbreviation |
S1D |
S1D-T |
S2H |
S2H-T |
WPA_SUPPLICANT OFFLOAD |
Y |
Y |
N |
N |
Dual TCPIP(T) |
N |
Y |
N |
Y |
API PATH |
N |
N |
Y |
Y |
CMD PATH |
Y |
Y |
Y |
Y |
Status |
TODO |
Ready |
TODO |
TODO |
备注
名词介绍
WPA_LITE: 专为 Realtek 芯片优化的轻量级 WPA_SUPPLICANT 实现, 通过更小的 code size 和内存占用, 实现最基本的连线功能
WPA_STD: 标准的 Linux WPA_SUPPLICANT, 支持完整功能集, 可以提供 P2P/NAN/SME 等高级功能
S1 代表 WPA_LITE
S1D 代表: WPA_SUPPLICANT 使用 WPA_LITE, 并且跑在 Device 端
S2 代表 WPA_STD
S2H 代表: WPA_SUPPLICANT 使用 WPA_STD, 并且跑在 Host 端
T 代表运行 Dual TCPIP 协议栈模式,Host 端和 Device 端都运行 TCPIP 协议栈
备注
MENU CONFIG
以上配置选项对应 Menuconfig 路径
:(Top) -> CONFIG WHC INTF -> FULLMAC config
----Configuration----
(X) Support WHC CMD PATH
(X) Support WHC WIFI API PATH
( ) Support WHC SUPPLICANT OFFLOAD
( ) Support WHC DUAL TCPIP
WHC Wi-Fi 文件目录
├─ whc
│ ├─ README.md
│ ├─ CMakeLists.txt
│ ├─ whc_def.h
│ ├─ whc_dev
│ │ ├─ ipc
│ │ │ ├─ whc_ipc_dev_api.c
│ │ │ ├─ whc_ipc_dev_trx.c
│ │ │ ├─ whc_ipc_dev_trx.h
│ │ │ └─ whc_ipc_device.c
│ │ ├─ sdio
│ │ │ ├─ whc_sdio_dev.c
│ │ │ ├─ whc_sdio_dev.h
│ │ │ ├─ whc_sdio_drv.c
│ │ │ └─ whc_sdio_drv.h
│ │ ├─ spi
│ │ │ ├─ whc_spi_dev.c
│ │ │ ├─ whc_spi_dev.h
│ │ │ ├─ whc_spi_drv.c
│ │ │ └─ whc_spi_drv.h
│ │ ├─ usb
│ │ │ ├─ whc_usb_dev.c
│ │ │ └─ whc_usb_dev.h
│ │ ├─ whc_dev.h
│ │ ├─ whc_dev_api.c
│ │ ├─ whc_dev_api.h
│ │ ├─ whc_dev_api_path.c
│ │ ├─ whc_dev_api_path.h
│ │ ├─ whc_dev_app.c
│ │ ├─ whc_dev_cust_evt.c
│ │ ├─ whc_dev_cust_evt.h
│ │ ├─ whc_dev_msg_queue.c
│ │ ├─ whc_dev_msg_queue.h
│ │ ├─ whc_dev_protocal_offload.c
│ │ ├─ whc_dev_protocal_offload.h
│ │ ├─ whc_dev_tcpip.c
│ │ ├─ whc_dev_tcpip.h
│ │ ├─ whc_dev_trx.c
│ │ └─ whc_dev_trx.h
│ ├─ whc_host_rtos
│ │ ├─ ipc
│ │ │ ├─ whc_ipc_host.c
│ │ │ ├─ whc_ipc_host_api.c
│ │ │ ├─ whc_ipc_host_api.h
│ │ │ ├─ whc_ipc_host_api_basic.c
│ │ │ ├─ whc_ipc_host_api_ext.c
│ │ │ ├─ whc_ipc_host_trx.c
│ │ │ ├─ whc_ipc_host_trx.h
│ │ │ └─ whc_ipc_host_zephyr.c
│ │ ├─ spi
│ │ │ ├─ whc_spi_host.c
│ │ │ ├─ whc_spi_host.h
│ │ │ ├─ whc_spi_host_trx.c
│ │ │ └─ whc_spi_host_trx.h
│ │ ├─ sdio
│ │ │ ├─ rtw_sdio_drvio.c
│ │ │ ├─ rtw_sdio_drvio.h
│ │ │ ├─ whc_sdio_host.c
│ │ │ ├─ whc_sdio_host.h
│ │ │ ├─ whc_sdio_init.c
│ │ │ ├─ whc_sdio_host_trx.c
│ │ │ └─ whc_sdio_host_trx.h
│ │ ├─ whc_host.h
│ │ ├─ whc_host_api.c
│ │ ├─ whc_host_api.h
│ │ ├─ whc_host_api_basic.c
│ │ ├─ whc_host_api_ext.c
│ │ ├─ whc_host_app.c
│ │ ├─ whc_host_app.h
│ │ ├─ whc_host_init.c
│ │ ├─ whc_host_cust_evt.c
│ │ ├─ whc_host_cust_evt.h
│ │ └─ whc_rtos
│ │ ├─ os_wrapper_memory.c
│ │ ├─ os_wrapper_mutex.c
│ │ └─ os_wrapper_semaphore.c
│ ├─ whc_ipc.h
│ ├─ whc_ipc_cfg.h
│ ├─ whc_ipc_msg_queue.c
│ └─ whc_ipc_msg_queue.h
├─ whc_host_linux
│ ├─ Kconfig
│ ├─ Makefile
│ ├─ fullmac_setup.sh
│ ├─ app
│ │ ├─ Makefile
│ │ ├─ whc_host_app_api.c
│ │ ├─ whc_host_app_api.h
│ │ └─ whc_host_app.c
│ ├─ fullmac
│ │ ├─ whc_fullmac_host_wiphy.c
│ │ ├─ whc_fullmac_host_regd.c
│ │ ├─ whc_fullmac_host_regd.h
│ │ ├─ whc_fullmac_host_protocal_offload.c
│ │ ├─ whc_fullmac_host_promisc.c
│ │ ├─ whc_fullmac_host_promisc.h
│ │ ├─ whc_fullmac_host_proc.c
│ │ ├─ whc_fullmac_host_proc.h
│ │ ├─ whc_fullmac_host_pkt_rx.c
│ │ ├─ whc_fullmac_host_ops_p2p.c
│ │ ├─ whc_fullmac_host_ops_nan.c
│ │ ├─ whc_fullmac_host_ops_key.c
│ │ ├─ whc_fullmac_host_ops_ap.c
│ │ ├─ whc_fullmac_host_ops.c
│ │ ├─ whc_fullmac_host_netdev_ops_p2p.c
│ │ ├─ whc_fullmac_host_ioctl.c
│ │ ├─ whc_fullmac_host_ioctl.h
│ │ ├─ whc_fullmac_host_event_tx.c
│ │ ├─ whc_fullmac_host_event_rx.c
│ │ ├─ whc_fullmac_host_cust_evt.c
│ │ ├─ whc_fullmac_host_cust_evt.h
│ │ ├─ whc_fullmac_host_cfgvendor.c
│ │ ├─ whc_fullmac_host_cfgvendor.h
│ │ ├─ whc_fullmac_host_acs.c
│ │ ├─ whc_fullmac_host_acs.h
│ │ ├─ usb
│ │ │ └─ Kbuild
│ │ ├─ spi
│ │ │ └─ Kbuild
│ │ ├─ sdio
│ │ │ └─ Kbuild
│ ├─ common
│ │ ├─ autoconf.h
│ │ ├─ whc_host_cmd_path_api.h
│ │ ├─ whc_host_cmd_path_tx.c
│ │ ├─ whc_host_event.h
│ │ ├─ whc_host_hci.c
│ │ ├─ whc_host_hci.h
│ │ ├─ whc_host_memory.c
│ │ ├─ whc_host_netlink.c
│ │ ├─ whc_host_netlink.h
│ │ ├─ whc_host_ops.c
│ │ ├─ whc_host_pkt_rx.c
│ │ ├─ whc_host_pkt_tx.c
│ │ ├─ whc_host_trx.h
│ │ ├─ netdev
│ │ │ ├─ whc_host_drv_probe.c
│ │ │ ├─ whc_host_drv_probe.h
│ │ │ ├─ whc_host_ethtool_ops.c
│ │ │ ├─ whc_host_ethtool_ops.h
│ │ │ ├─ whc_host_function.h
│ │ │ ├─ whc_host_linux.h
│ │ │ ├─ whc_host_netdev_ops.c
│ │ │ ├─ whc_host_netdev_ops.h
│ │ │ └─ whc_host_wiphy.h
│ │ ├─ sdio
│ │ │ ├─ whc_sdio_host.h
│ │ │ ├─ whc_sdio_host_drvio.c
│ │ │ ├─ whc_sdio_host_drvio.h
│ │ │ ├─ whc_sdio_host_fwdl.c
│ │ │ ├─ whc_sdio_host_init.c
│ │ │ ├─ whc_sdio_host_ops.c
│ │ │ ├─ whc_sdio_host_ops.h
│ │ │ ├─ whc_sdio_host_probe.c
│ │ │ └─ whc_sdio_host_reg.h
│ │ ├─ spi
│ │ │ ├─ whc_spi_host.h
│ │ │ ├─ whc_spi_host_ops.c
│ │ │ ├─ whc_spi_host_probe.c
│ │ │ └─ spidev-overlay.dts
│ │ └─ usb
│ │ ├─ whc_usb_host.h
│ │ ├─ whc_usb_host_ops.c
│ │ └─ whc_usb_host_probe.c
WHC Wi-Fi 驱动组成与移植
Device 驱动
参考: 设备驱动移植
Host 驱动
参考: Slim Host 驱动移植 / Fat Host 驱动移植
CUST_PATH
Fat Host 模式:若除了标准的 Wi-Fi/BT/Socket 编程之外,客户还有 Host 与 Device 之间客制化的通信需求,可以使用 CUST_PATH 。
Slim Host 模式:Wi-Fi 无法使用标准的 Wi-Fi API,此时一定会使用 CUST_PATH。
请参考: CUST_PATH 。
WHC Wi-Fi 吞吐量
Interface |
Wi-Fi driver location |
Item |
Slim Host |
Fat Host |
---|---|---|---|---|
SDIO [1] |
KM4 (334MHz) |
TCP RX |
49.7 |
53.5 |
TCP TX |
50.1 |
51.2 |
||
UDP RX |
58.9 |
59.6 |
||
UDP TX |
56.5 |
56.6 |
||
SPI [2] |
KM4 (334MHz) |
TCP RX |
16.8 |
17.1 |
TCP TX |
17.4 |
17.7 |
||
UDP RX |
19.1 |
18.6 |
||
UDP TX |
18.9 |
18.4 |
||
USB [3] |
TCP RX |
|||
TCP TX |
||||
UDP RX |
||||
UDP TX |
[1] Device 代码运行在 Flash 中,主机:Raspberry Pi 5 Model B Rev 1.1,root: Linux raspberrypi 6.6.31+rpt-rpi-2712
[2] Device 代码运行在 Flash 中,主机:Raspberry Pi 5 Model B Rev 1.0,root: Linux raspberrypi 6.6.31+rpt-rpi-2712
Interface |
Wi-Fi driver location |
Item |
Slim Host |
Fat Host |
---|---|---|---|---|
SPI [1] |
KM4 (334MHz) |
TCP RX |
10.9 |
11 |
TCP TX |
10.4 |
10.6 |
||
UDP RX |
16.3 |
15.5 |
||
UDP TX |
17.1 |
17.4 |
[1] Device 代码运行在 Flash 中,主机:Ameba RTL8721Dx, SPI Clk 25M
Interface |
Wi-Fi driver location |
Item |
Slim Host |
Fat Host |
---|---|---|---|---|
SDIO [1] |
KM4 (320MHz) |
TCP RX |
65 |
65.5 |
TCP TX |
73.1 |
74.3 |
||
UDP RX |
81.9 |
83.8 |
||
UDP TX |
86.3 |
88 |
||
SPI [2] |
KM4 (333MHz) |
TCP RX |
17.8 |
17.8 |
TCP TX |
18.4 |
18.2 |
||
UDP RX |
19.1 |
19.0 |
||
UDP TX |
19.5 |
19.3 |
||
USB [3] |
TCP RX |
|||
TCP TX |
||||
UDP RX |
||||
UDP TX |
[1] Device 代码运行在 Flash 中,主机:Raspberry Pi 5 Model B Rev 1.1,root: Linux raspberrypi 6.6.31+rpt-rpi-2712
[2] Device 代码运行在 Flash 中,主机:Raspberry Pi 5 Model B Rev 1.0,root: Linux raspberrypi 6.6.31+rpt-rpi-2712
Interface |
Wi-Fi driver location |
Item |
Slim Host |
Fat Host |
---|---|---|---|---|
SPI [1] |
KM4 (333MHz) |
TCP RX |
13.1 |
13.1 |
TCP TX |
14 |
14.4 |
||
UDP RX |
19.2 |
20.1 |
||
UDP TX |
21.9 |
22.7 |
[1] Device 代码运行在 Flash 中,主机:Ameba RTL8721F, SPI Clk 25M