AP6275S移植总结

本文详细记录了在RK3308B平台移植rtl8821cs驱动,涉及DTS修改、内核配置、buildroot配置以及蓝牙WiFi功能验证的全过程,包括BT和WIFI唤醒信号设置,以及Bluez5蓝牙协议栈的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RK3308B+AP6275S移植

在rk3308b平台移植rtl8821cs,rlt8821cs是wifi+bt一体的模组,主要记录下移植过程中需要注意的地方

移植驱动

将rtl8821cs的驱动包复制到rk的SDK内,路径如下rockchip_rk3308b_sdk/kernel/drivers/net/wireless/rockchip_wlan/cywdhd,并命名为bcmdhd

DTS修改

主要确认下wireless-bluetooth、wireless-wlan节点信息

wireless-bluetooth {
		compatible = "bluetooth-platdata";
		uart_rts_gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default", "rts_gpio";
		pinctrl-0 = <&uart4_rts>;
		pinctrl-1 = <&uart4_rts_gpio>;
		BT,power_gpio = <&gpio3 RK_PB0 GPIO_ACTIVE_HIGH>; // BT_REG_ON
		BT,wake_host_irq = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>; // BT_WAKE_HOST
		status = "okay";

	};

BT,power_gpio对应蓝牙的使能脚,BT,wake_host_irq是蓝牙唤醒脚

wireless-wlan {
		compatible = "wlan-platdata";
		rockchip,grf = <&grf>;
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_wake_host>;
		wifi_chip_type = "ap6275s";
		WIFI,host_wake_irq = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

WIFI,host_wake_irq对应WiFi唤醒脚

&uart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart4_xfer &uart4_cts>;
    status = "okay";
};

&uart4_xfer 、&uart4_cts分别为uart4的TX、RX和cts脚。注意RK不同的平台cts的叫法不一样,要区分

内核配置文件修改

内核配置文件没什么特别需要注意的地方,这里主要罗列下蓝牙相关的配置选项

CONFIG_BT=y
CONFIG_BT_BREDR=y
CONFIG_BT_HS=y
CONFIG_BT_LE=y
CONFIG_BT_DEBUGFS=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_RFCOMM=y
ONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=y
CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=y

Buildroot配置

关于buildroot配置主要罗列下关于蓝牙的应用,使用的是Bluez5蓝牙协议栈

#BR2_PACKAGE_BLUEZ_ALSA=y
BR2_PACKAGE_BLUEZ5_UTILS=y
#BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y
#BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y
#BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL=y
BR2_PACKAGE_DBUS=y
BR2_PACKAGE_DBUS_GLIB=y
#BR2_PACKAGE_DBUS_CPP=y
#BR2_PACKAGE_DBUS_TRIGGERD=y
#BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL=y

前面带“#”的不是必选,可以选择性添加特定功能,RK推荐用的是BROADCOM_BSA协议,这里还是采用bluez5协议,如果要使用BROADCOM_BSA协议,则需要添加该协议的应用依赖(BR2_PACKAGE_BROADCOM_BSA=y BR2_PACKAGE_BROADCOM_BSA_AP6275S=y 路径为rockchip_rk3308b_sdk/buildroot/package/rockchip/broadcom_bsa/Config.in)。另外需要添加AP6275S的依赖和配置文件,添加AP6275S的信息,路径如下rockchip_rk3308b_sdk/buildroot/package/rockchip/rkwifibt/rkwifibt.mk

添加AP6275S的配置信息

ifeq ($(BR2_PACKAGE_RKWIFIBT_AP6275S),y)
CHIP_VENDOR = BROADCOM
CHIP_NAME = AP6275S
BT_FIRMWARE = BCM4362A2.hcd   #蓝牙固件名
WIFI_KO = bcmdhd.ko
endif

选择编译AP6275S的相关应用

BR2_PACKAGE_RKWIFIBT_AP6275S=y

Symbol: BR2_PACKAGE_RKWIFIBT_AP6275S [=y]                                                                                                                                      
   Type  : boolean                                                                                                                                                                
   Prompt: AP6275S                                                                                                                                                                
     Location:                                                                                                                                                                    
       -> Target packages                                                                                                                                                         
         -> rockchip BSP packages (BR2_PACKAGE_ROCKCHIP [=y])                                                                                                                     
           -> rkwifibt (BR2_PACKAGE_RKWIFIBT [=y])                                                                                                                                
   (2)       -> wifi chip support (<choice> [=y])                                                                                                                                 
     Defined at package/rockchip/rkwifibt/Config.in:21                                                                                                                            
     Depends on: <choice>                                                    

功能验证

WiFi功能验证

将驱动挂载后,使用ifconfig -a看看有没有相应的节点,如果有的话进行下一步功能的验证

[root@eufy /oem]$ ifconfig -a
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:73464 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73464 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:3673200 (3.5 MiB)  TX bytes:3673200 (3.5 MiB)

wlan0     Link encap:Ethernet  HWaddr 10:2C:6B:80:2D:16  
          inet6 addr: fe80::122c:6bff:fe80:2d16/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:648 (648.0 B)

手动修改 wpa_supplicant.conf 文件进行联网验证功能

1、启动 wpa_supplicant:wpa_supplicant -B -i wlan0 -c /data/cfg/wpa_supplicant.conf

2、修改wpa_supplicant.conf文件

/ # vi /data/cfg/wpa_supplicant.conf 
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
	scan_ssid=1
	ssid="WFW"  
	psk="12345678"
	key_mgmt=WPA-PSK
}

设置好文件后就重新读,wpa_cli reconfigure,并重新连接wpa_cli reconnect

最后ping下www.baidu.com看能否收到回复

蓝牙功能验证

蓝牙上层操作是基于bluez的各种工具,主要有hcitool、hciconfig 工具,简单介绍下

hciconfig工具

#要带上具体的蓝牙节点,我这以hci0节点为例
hciconfig hci0 up    #激活蓝牙
hciconfig hci0 down  #关闭蓝牙
hciconfig hci0 name XXX #修改蓝牙名
hciconfig hci0 class 0xXXXXXX 修改蓝牙类型
hciconfig hci0 piscan #允许被其它蓝牙扫描到,是PSCAN ISCAN组合
hciconfig hci0 leadv #开启ble蓝牙广播

hcitool工具

因为将该设备作为从设备,所以用到的也就是扫描命令,如下

hcitool scan # 扫描经典蓝牙
hcitool lescan # 扫描ble设备

启动蓝牙

mkdir -p /var/run/dbus/							#启动Dbus进程
dbus-daemon --system
echo 0 > /sys/class/rfkill/rfkill0/state		  #蓝牙使能脚拉低
sleep 1
echo 1 > /sys/class/rfkill/rfkill0/state		  #蓝牙使能脚拉高
brcm_patchram_plus -d --enable_hci --no2bytes --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/BCM4362A2.hcd /dev/ttyS4 &									#下载固件
sleep 30
/usr/libexec/bluetooth/bluetoothd --compat -n &	   #启动蓝牙协议
sleep 3
hciconfig hci0 up								#激活蓝牙
hciconfig hci0 piscan							#允许被其它蓝牙设备扫描

几点说明

1、如果启动Dbus失败,那么在passwd添加如下内容

messagebus:x:500:500::/home/messagebus:/bin/sh
dbus:x:1000:1000:DBus messagebus user:/var/run/dbus:/bin/false

2、brcm_patchram_plus -d --enable_hci --no2bytes --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/BCM4362A2.hcd /dev/ttyS4 &

该命令是下载蓝牙固件,用的是brcm_patchram_plus应用程序,下载地址:brcm_patchram_plus,就一个c文件,交叉编译一下即可。如果下载失败请检查蓝牙使用的串口绑定对不对,AP6275S的rts和cts的初始状态对不对(rts低,cts要为高,如果状态不对,要采取上下拉电阻使其在正确的状态),如果下载成功,会出现下面类似的提示

received 7
04 0e 04 01 4c fc 00 
writing
01 4c fc b2 8e 3e 16 00 00 e0 73 78 a3 74 20 46 
16 f7 1f ff 28 b1 26 4b a2 7c 1b 78 9a 42 38 bf 
a3 74 20 46 ff f7 e3 fe 20 46 be f6 6c f9 d0 b1 
02 23 b5 f8 f2 20 94 f8 24 10 b5 f8 f0 00 db f6 
04 f8 00 23 a5 f8 f0 00 84 f8 a0 30 b5 f8 f0 30 
23 84 b5 f8 f2 30 63 84 02 23 84 f8 24 30 01 23 
84 f8 25 30 06 e0 20 46 18 f7 09 fc 01 46 20 46 
17 f7 22 fa 20 46 17 f7 0c fe 03 9a 3b 68 9a 42 
01 d0 a5 f6 da fa 05 b0 bd e8 f0 8f 00 bf 90 08 
20 00 50 30 20 00 78 6f 20 00 34 30 20 00 4a 30 
20 00 a1 91 20 00 28 30 20 00 64 30 20 00 49 30 
20 00 54 30 20 00 
received 7
04 0e 04 01 4c fc 00 
writing
01 4e fc 04 ff ff ff ff 
received 7
04 0e 04 01 4e fc 00 
writing
01 03 0c 00 
writing
01 03 0c 00 
received 7
04 0e 04 01 03 0c 00 
writing
01 18 fc 06 00 00 60 e3 16 00 
received 7
04 0e 04 01 18 fc 00 
Done setting baudrate
Done setting line discpline

3、如果上述命令都执行成功的话,那么使用hciconfig命令是可以查看到蓝牙节点信息的,而且用其它的蓝牙设备也是能够搜索到的

[root@eufy /oem]$ hciconfig -a
hci0:	Type: Primary  Bus: UART
	BD Address: 10:2C:6B:80:2D:17  ACL MTU: 1021:8  SCO MTU: 64:1
	UP RUNNING PSCAN ISCAN 
	RX bytes:1486 acl:0 sco:0 events:86 errors:0
	TX bytes:1529 acl:0 sco:0 commands:86 errors:0
	Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH SNIFF 
	Link mode: SLAVE ACCEPT 
	Name: 'BlueZ 5.50'
	Class: 0x000000
	Service Classes: Unspecified
	Device Class: Miscellaneous, 
	HCI Version:  (0xa)  Revision: 0x17
	LMP Version:  (0xa)  Subversion: 0x1111
	Manufacturer: Broadcom Corporation (15)

开启ble服务

执行如下命令开启ble服务

my_ble &			  #基于bluez5的/tool/gatt-service.c编译的应用
hciconfig hci0 leadv   #开启ble广播

创建了服务,可以使用ble蓝牙调试工具去扫描服务和进行简单的通讯检验,我使用的是IOS的nRF Connect工具

<think>好的,我现在需要帮助用户了解如何通过STM32与ESP8266-01S模块实现Wi-Fi配网。首先,用户提供了两个引用资料,分别是关于STM32F103和ESP8266-01S的硬件连接以及Demo的使用。我需要结合这些信息,整理出一个清晰的实现方案和固件配置教程。 首先,我应该确认硬件连接是否正确。根据引用[2],ESP8266-01S的TX接STM32的PA3(RX2),RX接PA2(TX2),RST接PB6。这确保了串口通信的正常进行。接下来,用户需要配置固件,可能涉及到AT指令的使用,或者使用机智云的固件。机智云提供了自动生成的代码,这可能简化开发流程。 然后,我需要考虑配网的流程。通常,Wi-Fi配网有几种方式,比如SmartConfig或AirKiss,这些都需要ESP8266支持相应的协议。用户提到的机智云账户注册,可能涉及到使用机智云平台生成的固件,因此需要指导用户如何在机智云上创建产品,获取Product Key和Secret,并下载对应的Demo代码。 接下来是STM32的程序开发部分。用户需要初始化USART2与ESP8266通信,并处理配网指令。引用中的Demo可能已经包含了这些初始化代码,但需要确认是否正确配置了串口参数(波特率通常为115200)。同时,可能需要实现按键触发配网模式,以及指示灯反馈配网状态。 在软件实现步骤中,用户需要将机智云生成的代码移植到STM32工程中,处理数据点,并实现配网逻辑。这里可能需要指导用户如何修改Demo中的代码,添加自己的逻辑,比如按键检测和网络状态处理。此外,OTA升级也是一个重要部分,需要确保ESP8266的固件支持,并正确配置升级流程。 最后,测试环节需要确保硬件连接正确,设备能进入配网模式,并且手机APP能成功添加设备。常见问题如串口通信失败、配网超时都需要给出解决方法,比如检查接线、波特率设置,或重置ESP8266模块。 总结来说,整个流程分为硬件连接、固件配置、STM32程序开发、软件实现、测试与调试几个步骤,需要逐一详细说明,并参考用户提供的资料,确保信息准确。同时,生成的相关问题需要覆盖用户可能遇到的后续疑问,比如AT指令使用、配网失败处理、OTA升级等。</think>### STM32与ESP8266-01S实现Wi-Fi配网方案 #### 一、硬件配置 1. **接线说明** ESP8266-01S与STM32通过USART2通信,具体引脚连接如下: - $ESP8266\ TX \rightarrow STM32\ PA3\ (USART2\ RX)$ - $ESP8266\ RX \rightarrow STM32\ PA2\ (USART2\ TX)$ - $ESP8266\ RST \rightarrow STM32\ PB6$(非必需,用于硬件复位) - 共地连接:$GND \rightarrow GND$ 引用[^2] 2. **电源要求** ESP8266-01S需3.3V供电,建议使用独立电源或STM32板载LDO稳压输出。 --- #### 二、固件配置 1. **ESP8266固件选择** - **机智云定制固件**:需在[机智云平台](https://www.gizwits.com)注册账户,创建产品后生成专用固件[^1]。 - **AT指令固件**:若需手动控制,可刷入乐鑫官方AT固件(需支持SmartConfig)。 2. **烧录固件步骤** 1. 使用USB-TTL工具连接ESP8266(GPIO0拉低进入烧录模式)。 2. 通过Flash工具(如ESPFlashDownloadTool)烧录`.bin`文件。 3. 完成后重启模块,验证AT指令响应(如发送`AT`应返回`OK`)。 --- #### 三、STM32程序开发 1. **串口通信配置** ```c // USART2初始化(波特率115200) void USART2_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; // 启用时钟、引脚配置等(参考标准库/HAL库) USART_InitStruct.USART_BaudRate = 115200; USART_Init(USART2, &USART_InitStruct); USART_Cmd(USART2, ENABLE); } ``` 2. **配网逻辑实现** - **SmartConfig模式**(以机智云为例): ```c // 发送配网指令 void Enter_SmartConfig() { USART_SendString(USART2, "AT+Gizwits=1\r\n"); // 启动机智云协议 Delay_ms(1000); USART_SendString(USART2, "AT+SmartConfig\r\n"); // 进入配网模式 } ``` - **指示灯与按键交互**: 通过GPIO控制LED状态(如快闪表示配网中,常亮表示成功)。 --- #### 四、软件实现步骤 1. **移植机智云SDK** - 下载机智云MCU开源框架,将`gizwits_protocol.c/h`加入工程。 - 修改`gizwits_product.c`中的串口发送/接收函数及数据处理逻辑[^1]。 2. **配网触发设计** ```c // 检测按键长按触发配网 if(KEY_LongPress()) { gizwitsSetMode(WIFI_SOFTAP_MODE); // 进入AP模式 LED_Blink(200); // 指示灯快闪 } ``` --- #### 五、测试与调试 1. **配网流程验证** 1. 手机安装机智云APP并登录账户。 2. STM32上电后触发配网模式,APP选择设备并输入Wi-Fi密码。 3. 观察指示灯状态,成功连接后APP显示设备在线。 2. **常见问题处理** - **配网超时**:检查Wi-Fi频段(需2.4GHz),确保信号强度。 - **串口无响应**:验证波特率是否匹配,尝试发送`AT+RST`复位模块。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值