3. 配置说明

本节说明内核 defconfig、设备树与 SDK menuconfig 中与 WiFi(含 RTL8189FS SDIO)相关的通用配置;板级工具打包与 STA/AP 操作命令见 CV184x RTL8189FS WiFi 连接流程说明

3.1. 内核配置

在对应板级的 defconfig 中增加或确认下列选项,使内核支持 WiFi 引脚驱动、外置无线模块及 Realtek RTL8189FS(选项随芯片与方案略有差异,以实际 Kconfig 为准)。

示例路径(按板型替换):

  • build/boards/cv184x/cv1842hp_wevb_0014a_spinor/linux/cvitek_cv1842hp_wevb_0014a_spinor_defconfig

  • build/boards/cv184x/cv1842hp_wevb_0014a_emmc/linux/cvitek_cv1842hp_wevb_0014a_emmc_defconfig

CONFIG_CVI_WIFI_PIN=y
CONFIG_CP_EXT_WIRELESS=y
CONFIG_WIRELESS=y
CONFIG_WLAN_VENDOR_REALTEK=y
CONFIG_RTL8189FS=m
CONFIG_WLAN=y
CONFIG_CFG80211=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_CRDA_SUPPORT=y

CONFIG_RTL8189FS=m 表示以模块方式编译,生成 8189fs.ko,由用户态 insmod 加载(亦可通过 SDK 选项自动安装到 rootfs,见下文 menuconfig)。

由于 Wi-Fi 接口为 SDIO,需在板级 DTS 与 asic dtsi 中正确使能 wifisd 与 wifi_pin 节点(见下文)。

3.2. 设备树:wifisd 节点(SDIO WiFi)

板级 DTS 位于各板型目录的 dts_arm 下,通常已包含 cv184x_base_arm.dtsi、对应 asic 的 cv184x_asic 系列 dtsi;WiFi SDIO 控制器节点定义在 default dtsi 的 cv184x_base.dtsi 中(节点名 wifisd,reg 为 wifi-sd@4320000)。请确认节点 status 为 okay(若已 okay 则无需修改)。

SPI NOR 板型参考(字段以 SDK 实际为准):

wifisd:wifi-sd@4320000 {
   compatible = "cvitek,cv184x-sdio";
   bus-width = <4>;
   reg = <0x0 0x4320000 0x0 0x1000>;
   reg_names = "core_mem";
   src-frequency = <375000000>;
   min-frequency = <400000>;
   max-frequency = <50000000>;
   64_addressing;
   reset_tx_rx_phy;
   non-removable;
   pll_index = <0x7>;
   pll_reg = <0x300207C>;
   no-mmc;
   no-sd;
   status = "okay";
};

eMMC 板型参考(cv1842hp_wevb_0014a_emmc 等):

wifisd:wifi-sd@4320000 {
    compatible = "cvitek,cv184x-sdio";
    bus-width = <4>;
    reg = <0x0 0x4320000 0x0 0x1000>;
    reg_names = "core_mem";
    src-frequency = <400000000>;
    min-frequency = <400000>;
    max-frequency = <50000000>;
    64_addressing;
    reset_tx_rx_phy;
    non-removable;
    pll_index = <0x60>;
    pll_reg = <0x300209C>;
    clocks = <&clk CV184X_CLK_SD1>, <&clk CV184X_CLK_AXI4_SD1>;
    clock-names = "clk_wifisd", "clk_axi";
    no-mmc;
    no-sd;
    status = "okay";
};

3.3. 设备树:勿删除 wifi-sd 节点

编辑 build/boards/default/dts/cv184x/cv184x_asic_bga.dtsicv184x_asic_qfn.dtsi 等当前板型使用的 asic dtsi。若存在 /delete-node/ wifi-sd@4320000;,请删除或注释该行,否则 WiFi SDIO 节点会被移除。示例如下:

/* /delete-node/ wifi-sd@4320000; */

/delete-node/ i2c@04010000;
/delete-node/ i2c@04020000;
/delete-node/ ethernet@04520000;
/delete-node/ i2s@04120000;
…

3.4. 配置SDIO

请参考《CVITEK外围设备驱动操作指南》中与SDIO相关章节。SDIO IO电压为3.3V,需确认Wi-Fi模块IO电压和 SDIO电压一致。

3.5. 配置Pinmux

若Wi-Fi模块使用的接口为SDIO时, 需配置SDIO的管脚复用。CV184X可以通过在build/boards/{chip_name}/{board_name}/u-boot/cvi_board_init.c文件中添加以下pinmux设置来配置SDIO的pinmux(这里是cv1843h的evb配置,具体配置哪根引脚需要查看电路图中soc到wifi模组processor_en的引脚是哪根):

int cvi_board_init(void)
{
    …
    //#########WIFI
    pinmux_config(PINMUX_SDIO1);
    PINMUX_CONFIG(JTAG_CPU_TCK, XGPIOA_18);
    …
    return 0;
}

相关管脚配置细节,请参考u-boot-2021.10/board/cvitek/cv184x/board.c

3.6. 配置WIFI GPIO

由于Wi-Fi模块的processor_en引脚是由SOC上的一根GPIO控制,为了操作这只GPIO,我们专门做了一个简单的模块,在wifi驱动中使用该模块提供的接口对wifi进行上下电。可以通过设备树指定wifi使用的gpio: (其中wakeup的功能没有使用,可以去除;poweron引脚和上一小节设置的pinmux对应)

wifi_pin {
    compatible = "cvitek,wifi-pin";
    poweron-gpio = <&porta 18 GPIO_ACTIVE_HIGH>;
    wakeup-gpio = <&porte 7 GPIO_ACTIVE_HIGH>;
};

若板级在 asic dtsi 中以 label 引用节点,可采用如下形式(GPIO 以实际原理图为准):

&wifi_pin {
    compatible = "cvitek,wifi-pin";
    poweron-gpio = <&porte 2 GPIO_ACTIVE_HIGH>;
    wakeup-gpio = <&porte 6 GPIO_ACTIVE_HIGH>;
};

该配置位于 build/boards/default/dts 下各芯片目录的 base dtsi(如 cv184x_base.dtsi)或板型所使用的 asic dtsi 中;cvi_wifi_pin 驱动从 poweron-gpio 读取 WiFi 模组上电 GPIO,未配置则需在对应 dts/dtsi 中补齐。