WiFi接口(1)——模块适配(AW-CM358)

39 篇文章 13 订阅
8 篇文章 0 订阅

RK3399适配海华的AW-CM358SM模块(2.4G/5G WiFi,蓝牙5.0)以替代AP6256。
该模块的部分特性:

WIFI:
Backward compatibility with legacy 802.11 ac/ n/a/g/b technology.
Bluetooth:
Fully qualified Bluetooth BT4.2 and support Bluetooth 5.

内核配置

kernel/arch/arm64/boot/dts/rockchip/OK3399-C.dts
kernel/arch/arm64/configs/rockchip_linux_defconfig
kernel/drivers/net/wireless/rockchip_wlan/Kconfig
kernel/drivers/net/wireless/rockchip_wlan/Makefile

kernel/drivers/net/wireless/rockchip_wlan/wlan_src/
kernel/drivers/net/wireless/rockchip_wlan/muart_src/

设备树sdio总线的配置:

        sdio_pwrseq: sdio-pwrseq {
                compatible = "mmc-pwrseq-simple";
                clocks = <&ap6256_lpo_clk>;
                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)
                 */
                reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>;
        };

&sdio0 {
        clock-frequency = <50000000>;
        clock-freq-min-max = <200000 50000000>;
        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";
};

查看sdio总线下WiFi网卡挂载的设备节点

[root@rk3399:/]# ls /sys/bus/sdio/devices/ 
mmc0:0001:1
[root@rk3399:/]# ls /sys/bus/sdio/devices/mmc0\:0001\:1/
class  device  modalias  power  subsystem  uevent  vendor

sdio总线设备挂载需要注意的事项:
1、模块的上电时序
在这里插入图片描述
VDDIO/PDn
在这里插入图片描述

上电时序不对会导致sdio总线不能识别到WiFi模块,反过来如果sdio总线上没有设备生成,就可以推断是模块上电逻辑有问题,就可以针对性的去测量对应引脚的状态是否与手册要求的一致,比如pin12是否被上拉,VBAT、VDDIO引脚是否有对应的电平。

驱动模块加载

以单独编译驱动模块加载的方式进行测试,便于驱动的调试。模块加载的过程,通过查看打印信息判断模块加载是否成功,有无报错。加载完成以后通过判断网络接口功能是否正常判断模块驱动是否运行正常。

加载wifi驱动、固件
[root@rk3399:/]# insmod /data/mlan.ko
[root@rk3399:/]# insmod /data/sd8xxx.ko  cal_data_cfg=none fw_name=nxp/sduart8987_combo.bin sta_name=wlan cfg80211_wext=12
[ 1464.837431] wlan: Enable TX SG mode
[ 1464.837862] wlan: Enable RX SG mode
[ 1465.293412] Wlan: FW download over, firmwarelen=589648 downloaded 589648
[ 1466.225214] fw_cap_info=0x181cbf03, dev_cap_mask=0xffffffff
[ 1466.225733] max_p2p_conn = 8, max_sta_conn = 8
[ 1466.280973] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 1466.301868] IPv6: ADDRCONF(NETDEV_UP): uap0: link is not ready
[ 1466.319623] IPv6: ADDRCONF(NETDEV_UP): wfd0: link is not ready

[root@rk3399:/]# ifconfig
dummy0    Link encap:Ethernet  HWaddr EE:EF:0E:B6:E4:45  
          inet6 addr: fe80::e949:3625:a397:3cf2/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:9172 (8.9 KiB)

eth0      Link encap:Ethernet  HWaddr 8E:81:A9:A9:BB:99  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:852 (852.0 B)
          Interrupt:24 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1019 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1019 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:67677 (66.0 KiB)  TX bytes:67677 (66.0 KiB)

uap0      Link encap:Ethernet  HWaddr EC:2E:98:B4:E5:07  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wfd0      Link encap:Ethernet  HWaddr EE:2E:98:B4:E4:07  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr EC:2E:98:B4:E4:07  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

加载蓝牙驱动
[root@rk3399:/]# insmod /system/lib/modules/hci_uart.ko 
[ 1794.962487] HCI UART driver ver 2.2-M2614100
[ 1794.962918] HCI H4 protocol initialized
[ 1794.963329] HCILL protocol initialized

功能验证

WiFi STA功能

WiFi STA功能使用wpa_supplicant工具配置wlan0接口进行验证。

[root@rk3399:/]# wifi.sh -i wlan0 -s "forlinx" -p fl03123102650

WiFi AP功能

AP功能对应的接口为uap0,使用hostapd创建热点。

vi /etc/hostapd.conf

interface=uap0
vi /etc/dnsmasq.conf

user=root
interface=uap0
dhcp-range=192.168.2.100,192.168.2.150,12h
vi /usr/bin/hostapd.sh

#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ifconfig uap0 up
ifconfig uap0 192.168.2.1
hostapd /etc/hostapd1.conf &

该模块有独立的wlan0、uap0两个节点,所以可以实现使用wlan0节点作为路由转发,uap0设置热点的方式来使用:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

蓝牙

使用hci工具进行配置,使用bluetoothctl、obexctl工具进行测试

hciattach /dev/ttyS0 any 115200 flow
hciconfig hci0 up
hciconfig -a
hcitool scan

bluetoothctl

obexctl.sh

相关内容

1、WFD
WiFI Display(WFD)是WiFI Alliance 开发出的一种规范,使多媒体设备之间建立和维持一个基于WiFi的连接,并且利用这个连接推进视频/音频的在目标设备的呈现播放。

参考链接:
WFD简介和连接过程
https://www.cnblogs.com/daxingege/p/7137004.html

2、hci_uart

参考链接:
HCI和UART的结构与原理概述及计HCI-UART的设计实现方法
http://www.elecfans.com/tongxin/rf/20171211600434_a.html
蓝牙调试工具hcitool的使用实例
https://blog.csdn.net/kangear/article/details/37961769

HCI,即主机控制接口,属于蓝牙协议栈的一部分。
蓝牙规范包含了一个符合标准的接口定义(主机控制器接口),它适用于蓝牙通讯模块的硬件部分。此定义描述了位于HCI驱动程序(主机的一部分,也即蓝牙通讯模块的使用者)和主机控制器固件(蓝牙通讯模块本身的一部分)之间的接口。
HCI三种类型接口:USB、RS-232和UART。

HCI 传输层的比较

HCI 层位于蓝牙高层协议和低层协议之间,其目的是实现主机设备与蓝牙模块之间的互操作,即HCI 是蓝牙主机与主机控制器间软硬件接口。HCI 为蓝牙硬件中基带控制器和链接管理器提供了命令接口,从 而实现对硬件状态注册器和控制寄存器的访问,提供了对蓝牙基带的统一访问模式。 目前,HCI 的传输层主要有三种:USB,RS-232,UART。此外,还有一种PC 卡传输层,其没有定义在 蓝牙标准中,而是在蓝牙SIG 于1999 年8 月发表的蓝牙PC 卡传输层1.0 版白皮书中描述的。蓝牙没有规 定PC 卡传输层实现的具体细节,而是要求制造商提供传输驱动程序,以配合主机上的HCI 驱动程序[5]。不 同传输层对HCI 事件处理没有影响。

(1)USB 传输层在蓝牙硬件上使用USB 硬件接口(该硬件接口有两种嵌入方式:一种是作为USB 加/ 解密芯片,另一种是集成到PC 机主板上)[6]。这一种类编码要求不管使用哪一厂商生产的设备,都能加载 合适的驱动程序栈;同时它还保证了通过控制终端的HCI 指令和USB 指令有所区别。其缺点是软件协议复 杂,软件开销巨大。

(2)RS-232 传输层:通过位于主机和主控制器之间的物理RS-232 接口实现。事件包和数据包通过该 层,但该层并不对它们进行解码。该传输层支持的是主机控制器和不同实体中的主机的通信情况,通信距 离较远,传输层特别规定了电气特性,并采用了更为精细的链路协议以应对较高的线路误码率,但在硬件 上需要增加电平转换电路。

(3)UART 传输层跟RS-232 传输层类似,也是采用一个UART 的串行通信方式在主控制器与主机之间 进行数据传输。应用环境主要是针对主控制器和主机位于同一个电路板上,传输层假定UART 通信无线性 错误。与其它的相比,UART 传输层方式比较灵活,其应用环境决定其连接错误相对较少,可以采用简单的 复位恢复机制实现失步时的复步。由于主机和主控制器都处于同一块电路板上,因而传输层不需要规定电 气信号,可以直接采用TTL、LV-CMOS 等IC 端电压,应用较多。同时,UART 传输层避开了RS-232 传输层 所要求的较繁琐的协商和同步机制。UART 性能和数据吞吐率水平与USB 接口相当,而传输协议却较为简单, 减少了软件开销,是一种更为经济高效的全硬件解决方案。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值