RK3399-WIFI&BT模块
背景
- Platform: RK3399
- OS: Android7.1.2
- Kernel: v4.4.103
这里主要调试的是AP6236
、AP6256
,SDIO接口
检查硬件:
电源: VDDIO,VBAT
时钟:LPO(32.768K) , AXTAL(26M)
检查WL_REG_ON
引脚,不能下拉到地
检查WIFI_WAKE_HOST
引脚,信号与电平
- 检查SDIO相关信号
sdio3.0 VDDIO->1.8V
检查SDIO SDIO_CLK、 SDIO_CMD电平及波形
测量 VDDIO sdio_clk、 sdio_cmd、 sdio_data0~sdio_data3 的电压;正常情况下 sdio_clk 为 0V,sdio其他五根线与vddio电压一致
sdio_clk clk绝对不要加外部上拉,它内部为开漏
硬件OK就能够扫描到模块硬件, 在sys/bus/sdio/devices
查看到相应设备,VID和PID也可以在这里找到
添加固件
- WIFI
路径:./external/wlan_loader/firmware/
添加配置nvram_ap6236.txt
添加固件firmware:fw_bcm43436b0.bin
,fw_bcm43436b0_apsta.bin
- 蓝牙
路径:./vendor/rockchip/common/bluetooth/lib/firmware/
DTS配置:
SDIO的速率等设置:
&sdio0 {
clock-frequency = </*208000000*/150000000>;
clock-freq-min-max = <200000 /*208000000*/150000000>;
supports-sdio;
bus-width = <4>;
disable-wp;
cap-sd-highspeed;
/*cap-sdio-irq;*/
keep-power-in-suspend;
mmc-pwrseq = <&sdio_pwrseq>;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
sd-uhs-sdr104;
status = "okay";
};
添加对应的VID,PID:
路径:souce_code/hardware/libhardware_legacy/wifi/
rk_wifi_ctrl.c
wifi.c
内核驱动:
kernel/net/rfkill/rfkill-wlan.c
kernel/drivers/net/wireless/rockchip_wlan/
#/sys/class/rkwifi/
echo 1 > /sys/class/rkwifi/driver
echo 1 > /sys/class/rkwifi/power
DTS中SDIO的配置
cap-sdio-irq;
此配置标识该 SDIO 外设(通常是 Wifi)是否支持 sdio 中断,如果你的外设是 OOB(out-of-band)中断,请不要加入此项添加固件名称等
kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.cdhd_conf_set_fw_name_by_chip
函数
确保CHIP_ID及配置文件名都有对应的,没有则需要添加
FW_PATH_AUTO_SELECT
根据CHIP_ID自动获取固件名称等注意修改内核后需重新编译KO
if [ -f "device/rockchip/common/build_wifi_ko.sh" ]; then echo "start build wifi driver ko" source device/rockchip/common/build_wifi_ko.sh fi
问题
dhdsdio_htclk: HT Avail timeout
dhd_bus_init: clock state is wrong时钟问题,检查LPO(32768)时钟
dhd_bus_rxctl: resumed on timeout, INT status=0x208000C0
检查WIFI_WAKE_HOST引脚
扩展
Firmware:
WiFi芯片内部有一个小系统,用来运行802.11协议,此部分代码就叫Firmware。有些芯片(例如 broadcom)的Firmware是以文件的形式存放的,有些芯片(例如 realteck)的Firmware是做到驱动代码中的。Nvram:
WiFi芯片需要作相应的RF参数校准,校准值等信息一般放到到Nvram中。例如,同一个芯片bcm4330,做成不同的模块时,需要不同的Nvram。另外,有些芯片(例如realtek)将RF参数校准等信息写到芯片的EEPROM中,这部分工作在模块出厂时完成。
WiFi芯片工作前,需要host先下载Firmware文件到WiFi芯片中,此部分工作在WiFi驱动中完成。