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_defconfigbuild/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.dtsi 或 cv184x_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 中补齐。