RK3568 AP6256\AP6181 wifi驱动以及要点和资料包

接口

wifi 驱动失败的可能性原因

  • WL_REG_ON WL_HOST_WAKE 脚位配错
  • sdio的电压与VCC电压不一致
    • 3.3V低速,25mhz
    • 1.8v高速,150mhz,具体应该查看芯片手册
  • sdio驱动没使能
    • sdmmc2: dwmmc@fe000000
  • 驱动没加载
    • insmod bcmdhd.ko
  • frameware 的路径 和 固件没有准备好
    • 这个可以从dmesg看见打开失败字样

能够驱动起 ap6181 / 6256 模块的对应配置


wireless_wlan: wireless-wlan {
        compatible = "wlan-platdata";
        rockchip,grf = <&grf>;
        pinctrl-names = "default";
	    wifi_chip_type = "ap6256";  //这个名字影响不大,驱动会去目录找芯片对应的bin文件
        pinctrl-0 = <&wifi_host_wake_irq>;
        WIFI,host_wake_irq = <&gpio3 RK_PD4 GPIO_ACTIVE_HIGH>;  //对一下芯片脚位
        status = "okay";
	};

  &sdmmc2 {
	max-frequency = <25000000>;  //根据电路电压和芯片手册确定这个频率
	supports-sdio;
	bus-width = <4>;
	disable-wp;
	cap-sd-highspeed;
	cap-sdio-irq;
	keep-power-in-suspend;
	mmc-pwrseq = <&sdio_pwrseq>;
	non-removable;
	pinctrl-names = "default";
	pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_cmd &sdmmc2m0_clk>;
	//sd-uhs-sdr104;    //如果是3.3v这个加速就别打开
	status = "okay";
};

sdmmc2: dwmmc@fe000000 {
		compatible = "rockchip,rk3568-dw-mshc",
			     "rockchip,rk3288-dw-mshc";
		reg = <0x0 0xfe000000 0x0 0x4000>;
		interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
		max-frequency = <150000000>;
		clocks = <&cru HCLK_SDMMC2>, <&cru CLK_SDMMC2>,
			 <&cru SCLK_SDMMC2_DRV>, <&cru SCLK_SDMMC2_SAMPLE>;
		clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
		fifo-depth = <0x100>;
		resets = <&cru SRST_SDMMC2>;
		reset-names = "reset";
		status = "okay";  //注意这个驱动的使能
	};


sdio_pwrseq: sdio-pwrseq {
  compatible = "mmc-pwrseq-simple";
  clocks = <&rk809 1>;
  clock-names = "ext_clock";
  pinctrl-names = "default";
  pinctrl-0 = <&wifi_enable_h>;

  /*
   * On the module itself this is one of these (depending
   * on the actual card populated):
   * - SDIO_RESET_L_WL_REG_ON
   * - PDN (power down when low)
   */
  post-power-on-delay-ms = <200>;
  reset-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_LOW>;
};


&pinctrl {

	wireless-wlan {
		wifi_host_wake_irq: wifi-host-wake-irq {
			rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down>;
		};
	};

	wireless-bluetooth {
		uart8_gpios: uart8-gpios {
			rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
};

加载驱动正常的报文



root@ipbox:~# insmod bcmdhd.ko
[   27.173644] [dhd] dhd_conf_set_chiprev : chip=0x4345, chiprev=9
root@ipbox:~# [   27.294374] [dhd-wlan0] wl_android_wifi_on : in g_wifi_on=0
[   27.958194] [dhd] dhd_conf_read_config : Ignore config file /vendor/etc/firmware/config.txt
[   27.958333] [dhd] dhd_conf_set_path_params : Final fw_path=/vendor/etc/firmware/fw_bcm43456c5_ag.bin
[   27.958366] [dhd] dhd_conf_set_path_params : Final nv_path=/vendor/etc/firmware/nvram_ap6256.txt
[   27.958393] [dhd] dhd_conf_set_path_params : Final clm_path=/vendor/etc/firmware/clm_bcm43456c5_ag.blob
[   27.958418] [dhd] dhd_conf_set_path_params : Final conf_path=/vendor/etc/firmware/config.txt
[   28.307391] [dhd] dhd_conf_set_txglom_params : txglom_mode=copy
[   28.307456] [dhd] dhd_conf_set_txglom_params : txglomsize=36, deferred_tx_len=0
[   28.307476] [dhd] dhd_conf_set_txglom_params : txinrx_thres=128, dhd_txminmax=-1
[   28.307493] [dhd] dhd_conf_set_txglom_params : tx_max_offset=0, txctl_tmo_fix=300
[   28.307524] [dhd] dhd_conf_get_disable_proptx : fw_proptx=1, disable_proptx=-1
[   28.335934] [dhd] dhd_conf_map_country_list : CN/38
[   28.335974] [dhd] dhd_conf_set_country : set country CN, revision 38
[   28.338742] [dhd] dhd_conf_set_country : Country code: CN (CN/38)
[   28.343789] [dhd-wlan0] wl_android_wifi_on : Success
[   28.549089] [dhd-wlan0] wl_run_escan : LEGACY_SCAN sync ID: 0, bssidx: 0
[   32.189272] [dhd-wlan0] wl_run_escan : LEGACY_SCAN sync ID: 1, bssidx: 0

测试方式

1.STA模式
1.1 启动WiFi节点

启动WiFi节点的命令如下所示。
[root@RK356X:/]#  ifconfig wlan0 up
注:默认已经开启。
执行WiFi模块的配置命令
[root@RK356X:/]#  wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf &

1.2 搜索WiFi热点

搜索周边的WiFi热点命令如下所示。
[root@RK356X:/]#  wpa_cli -i wlan0 scan_result
搜索结果如下所示,每行后的为WiFi热点名,如TP-LINK_。

1.3 生成WiFi网络配置

可以使用wpa_passphrase程序生成wifi网络的配置(包含SSID和加密后的密码)。wpa_passphrase程序的命令格式如下:
wpa_passphrase 网络SSID密码
其中密码长度为8~63个字符。例如要生成SSID为vanxoak_2.4G,密码为vanxoak8888的配置项,执行如下命令后,会在控制台上输出包含ssid和psk网络信息的配置项,如下所示。
[root@RK356X:/]# wpa_passphrase wifi_2.4G wifi8888 
network={
        ssid="wifi_2.4G"
        #psk="wifi8888"
        psk=5a8beb3472b52a52f9138eef0959a500207751b34ce00cf663ee309ead77c3db
}
使用以下命令将wpa_passphrase程序生成的配置项拷贝到wpa_sup.conf文件,并删除该文件中原有的关于ssid和psk的配置项,即可完成对WIFI网络的配置,也可以用重定向来一次完成配置文件的生成:
[root@RK356X:/]#  wpa_passphrase wifi_2.4G wifi8888 > wpa_sup.conf

1.4 连接WiFi热点

在完成对wpa_sup.conf文件的修改后,可以在命令行下用wpa_supplicant工具应用该配置文件来与WiFi驱动完成WPA的密钥协商,使WiFi网络能够建立连接,并可在连接建立后用udhcpc命令分配IP地址如下所示:
[root@RK356X:/]# killall wpa_supplicant
[root@RK356X:/]# wpa_supplicant -B -Dwext -iwlan0 -c ./wpa_sup.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device

[root@RK356X:/]# udhcpc -i wlan0
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending select for 192.168.20.38
udhcpc: lease of 192.168.20.38 obtained, lease time 7200

在wpa_supplicant建立连接命令中:
● -B用于使工具以daemon方式工作;
● -D选择驱动类型;
● -i指定Wifi接口名称;
● -c用来指定配置文件。
可用上一步骤中建立的配置文件。因为wpa_supplicant通常以daemon方式在后台工作,若系统已经存在wpa_supplicant实例,则需在用新的配置运行前用killall命令杀掉原进程实例。

1.5 测试WIFI网络配置

当WIFI网络连接成功后,使用ifconfig命令可以看到wlan0网络接口已经自动获取了IP地址,如下图所示:

[root@RK356X:/]# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr  94:A4:08:0E:74:D8  
 inet addr:192.168.20.38  Bcast:192.168.20.255  Mask:255.255.255.0 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:430 errors:0 dropped:32 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:76553 (74.7 KiB)  TX bytes:6613 (6.4 KiB)
如果WIFI网络可以连接互联网,也可以直接在命令行下使用ping命令,ping某个公网网址,测试网络是否连通。例如ping百度公司的网址,可在命令行下执行如下命令:

[root@RK356X:/]# ping www.baidu.com
如果可以ping通表明WIFI网络连接成功。
由于网络信号等问题,开发板有可能在启动过程中,无法使用dhcp从路由器自动获取IP,此时可以在命令行下执行udhcpc命令尝试从路由器再次获取IP地址:

[root@RK356X:/]# udhcpc -i wlan0

2.AP模式

2.1 配置hostapd
hostapd使用/etc/hostapd.conf作为默认配置文件,如下所示:
interface=wlan0
driver=nl80211
ssid=HD-RK3568-WIFI
channel=9
hw_mode=g
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
如需修改热点的SSID和密码,可以备份后再修改该配置文件:
mv /etc/hostapd.conf /etc/hostapd.conf.bak 
vi /etc/hostapd.conf

2.2 DHCP地址配置
	文件系统预装dnsmasq来进行ip地址分配,DNSmasq所提供的DHCP服务是Linux系统中常见的给从机分配IP的服务,/etc/dnsmasq.conf文件作为默认配置文件,其中listen-address为wlan0的ip地址,dhcp-range代表WiFi从机的开始地址到结束地址的范围:
代码清单3.2  DHCP地址模式
目录:/etc/dnsmasq.conf
user=root
listen-address=10.201.126.1
dhcp-range=10.201.126.50,10.201.126.150
server=/google/8.8.8.8
如需修改ip分配地址,可以备份后再修改该配置文件:
mv /etc/dnsmasq.conf  /etc/dnsmasq.conf.bak 
vi /etc/dnsmasq.conf

2.3 测试WIFI AP网络配置

在完成对dnsmasq.conf文件以及hostapd.conf的修改后,可以在命令行下使能dhcpd和hostapd功能,在使能hostapd功能前需确保wifi接口(此处为wlan0)可用,若之前wlan0工作在station模式则需将wpa_supplicant进程关闭,若之前wlan0处于down模式,则需更改为up,可以使用如下命令来完成hostapd功能的开启:
killall wpa_supplicant                             
killall hostapd 
ifconfig wlan0 up 10.201.126.1 		     #与dhcpd.conf文件指定的相同
hostapd -B /etc/hostapd.conf			     #启动AP服务

然后通过其它wifi station连接该ssid(例中为“HD-RK3568-WIFI”),并输入密码(例中为“12345678”),在获得IP后可以与wlan0接口进行数据连接验证。

资料包

见标题下方

参考

https://blog.csdn.net/weixin_44710103/article/details/130614423?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-130614423-blog-127049775.235%5Ev39%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-130614423-blog-127049775.235%5Ev39%5Epc_relevant_anti_t3&utm_relevant_index=5

https://www.jianshu.com/p/26ae7bbc91d7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交叉编译之王 hahaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值