安信可M62-CBS模组(BL616 芯片)用作 SDIO / USB 无线网卡和 BLE 适配器

一、概述

安信可 M62-CBS 无线网卡模组采用博流 BL616 芯片方案,提供 SDIO / USB 接口,同时可以通过 UART / USB 接口作为 BLE HCI 适配器使用。本文以树莓派为例,介绍 M62-CBS 驱动移植及联网的过程。

二、软硬件要求

1. 目标板硬件要求

1.1. 通过 USB 接口连接

  • USB接口

1.2. 通过 SDIO 接口连接

  • SDIO
  • UART(若需要使用 BLE 功能)

2. 目标板软件要求

  • Linux Kernel 3.10 ~ 5.15.79(需要启用 mac80211 相关配置选项)
  • wpa_supplicant / hostapd 2.9+ (需要启用 nl80211 选项后编译)
  • BlueZ 5 (若需要使用 BLE 功能)

3. 开发机软件要求

  • 目标板 Linux 内核源码
  • 目标板交叉编译工具链

三、硬件连接

您的 Linux 开发板可以通过 USB 接口或者 SDIO + UART 接口连接到 M62-CBS 模组。为了方便用户调试使用,我们已经预先设计好了下图所示的转接板,插上即可完成连接。对应嘉立创工程文件放在文章末尾的附件内了,打样时注意板厚设置为 0.8mm,不然插不进 SD 卡槽中。

在这里插入图片描述

四、驱动编译

驱动编译的方法见末尾文档《BL616 Linux 驱动移植及使用说明》以及驱动源码下的 README 文档,这边着重说明 2 点。

  1. 驱动 Makefile 默认使用 Native 工具链编译,也就是驱动运行于本机的情况(如下图)。

在这里插入图片描述
若交叉编译,需要修改KERNELDIR 变量,取消 ARCHCROSS_COMPILE 的注释并修改为实际值。另外还需要交换注释 make 那一行。

在这里插入图片描述

  1. 若编译出现报错,请仔细对照错误信息和文档检查是否启用了内核相关配置选项,例如 bl_get_wireless_stats() 函数报错是因为没有启用 CONFIG_WIRELESS_EXT 选项。

五、安装驱动到目标板

驱动支持 STA / AP、STA + AP 和 Repeater 三种模式,我们以 STA + AP 共存模式为例子讲解过程,其他两种模式的配置参数可参考源码下的 README 文档。

  1. 将内核模块(bl_sdio_drv.kobl_usb_drv.ko)和对应模组固件拷贝到目标板文件系统中,将对应模组固件(bl616_sd_combo.binbl616_usb_combo.bin)放在 /lib/firmware 文件夹下。
  2. 执行insmod bl616_sd_combo.bin opmode=2 或者 insmod bl616_usb_combo.bin opmode=2 加载内核模组。
  3. 使用 ip addr 命令查看是否新增了 2 块无线网卡,wlan0ap0,若没有检测到无线网卡,检查接线或者使用 dmesg 命令查看内核日志诊断原因
  4. 若启用了 rfkill ,需要使用 rfkill unblock all 启用无线网卡。

六、使用 wpa_supplicant 连接 Wi-Fi 热点

  1. 使用 ps -eF | grep wpa_supplicant 命令检查当前是否运行了其他的 wpa_supplicant,若存在需要先 kill 掉,否则会失败。
  2. 使用下面指令设置 Wi-Fi 网络
wpa_passphrase ABC 12345678 > bf.conf  # 把 ABC 和 12345678 替换为你实际WiFi的ssid和password,
wpa_supplicant -D nl80211 -i wlan0 -c bf.conf -B # 启动 wpa_supplicant 连接网络,wlan0换成实际无线网卡接口
udhcpc -i wlan0  # 通过 DHCP 获取 IP 地址
  1. 连接完成后,使用 ip addr 检查是否获取到 IP 地址

  2. 连接 WPA3 加密的 WiFi 热点

cat <<'EOF' > bf.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1

network={
    ssid="ASUS_2.4"
    scan_ssid=1
    key_mgmt=SAE
    psk="88888888"
    ieee80211w=1
}
EOF

七、使用 hostapd 开启 Wi-Fi 热点

  1. 查看是否存在名称为 ap0 的网卡
ip addr
  1. 新建 hostapd 配置文件
cat <<'EOF' > hostapd.conf
interface=ap0
drvier=nl80211

# Operation mode a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz),
# g = IEEE 802.11g (2.4 GHz), ad = IEEE 802.11ad (60 GHz); 
# a/g options are used with IEEE 802.11n (HT), too, to specify band. 
# For IEEE 802.11ac (VHT), this needs to be set to hw_mode=a. 
# For IEEE 802.11ax (HE) on 6 GHz this needs to be set to hw_mode=a.
hw_mode=g

# 2.4GHz的频段下信道可选1-13
channel=7

wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

#你的wifi名字
ssid=BL616

#你的密码
wpa_passphrase=12345678
EOF
  1. 运行 hostapd 服务
hostapd -B hostapd.conf
  1. 配置 AP 的 IP 地址
ip address add 192.168.9.1/24 dev ap0
  1. 配置 AP 的 DHCP 服务
cat <<'EOF' > udhcpd.conf
interface ap0
start 192.168.9.100
end 192.168.9.200
max_leases 200
EOF
  1. 启动 DHCP 服务器
udhcpd udhcpd.conf & 
  1. 连接热点进行测试,SSID BL616,密码 12345678

八、BLE

  1. 初始化蓝牙(仅 UART 方式,USB可以跳过)
# /dev/ttyUSB0:模组接到树莓派的串口号,根据实际串口号替换
hciattach -s 115200 /dev/ttyUSB0 any 115200 noflow nosleep
  1. 查询 HCI
hciconfig

若出现 hci0 等设备代表 OK。

  1. 开启和重启一下模组蓝牙
hciconfig hci0 up
hciconfig hci0 reset
  1. (可选)配置 BLE 广播数据,可以在调试助手上点击扫到的 BLE 设备查看
hcitool -i hci0 cmd 0x08 0x0008 1f 02 01 06 0b 09 42 54 42 4c 45 2d 44 45 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  1. (可选)配置 BLE 扫描响应数据,可以在调试助手上点击扫到的 BLE 设备查看
hcitool -i hci1 cmd 0x08 0x0009 1f 02 01 06 0a 09 42 54 42 4c 45 2d 44 45 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  1. 开启 BLE 广播
hciconfig hci1 leadv 0
  1. 打开监控软件
btmon
  1. 停止广播和再次广播
hciconfig hci1 noleadv
hciconfig hci1 leadv 0

九、更多资料

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,让我来帮您解决这个问题。以下是代码实现,您可以将其复制到您的编译器中进行测试: ```python def is_prime(num): """ 判断一个数是否为质数 """ if num < 2: return False for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True primes = [] composites = [] for i in range(2, 101): if is_prime(i): primes.append(i) else: composites.append(i) # 输出质数 for prime in primes: print('\033[32m{}\033[0m'.format(prime), end=' ') # 输出分隔符 print('|', end=' ') # 输出合数 for composite in composites: print('\033[31m{}\033[0m'.format(composite), end=' ') ``` 输出结果如下: ``` 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 | 4 6 8 9 10 12 14 15 16 18 20 21 22 24 25 26 27 28 30 32 33 34 35 36 38 39 40 42 44 45 46 48 49 50 51 52 54 55 56 57 58 60 62 63 64 65 66 68 69 70 72 74 75 76 77 78 80 81 82 84 85 86 87 88 90 91 92 93 94 95 96 98 99 100 ``` 其中,绿色的数字为质数,红色的数字为合数。竖线用红色的竖线字符 `|` 表示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值