WHC 概述

支持的芯片[ RTL8721Dx ][...]

WHC 传输接口

Wi-Fi

BT

SDIO

Y

Y

SPI

Y

Y

USB

Y

Y

UART

X

Y

Mix Mode

SDIO/SPI/USB

SDIO/SPI/UART

WHC 介绍

WHC 架构

在 WHC(Wi-Fi Host Control) 方案中,Ameba 作为网卡通过 UART/SPI/SDIO/USB 与主机 MCU 连接,为 Host 提供网络接入能力, WHC 的架构图如下所示:

../../_images/fullmac_architecture_diagram.svg

WHC 架构优势

  • 多协议硬件接口支持:支持 UART、SPI、SDIO、USB 等多种物理层接口,满足不同场景的带宽与实时性需求。

  • 跨平台开发兼容性:支持 Linux、FreeRTOS、Zephyr 作为 Host 开发平台,降低移植成本。

  • Linux 平台深度适配,原生兼容 Linux 标准 wpa_supplicant(WPA_STD) 和 cfg80211 无线框架,并支持如下增强功能:

    • SME(由 wpa_supplicant 实现 MLME) 或非 SME 模式

    • 支持 P2P/NAN

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

备注

名词介绍

  • 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 路径 CONFIG WHC ITNF > FULLMAC CONFIG :

(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 Wi-Fi 驱动组成与移植

Device 驱动

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