一、简介
RW007是上海瑞赛德电子科技有限公司开发的基于Cortex-M4 WIFI SOC的SPI/UART高速wifi模块,仓库为rw007的SPI驱动
RW007硬件设计简单。SPI模式下,用户只需预留1组SPI信号,1个中断输入,1个IO输出,其中电源和地共8个引脚。
1.1文件结构
1.2 许可证
at_device 包符合 Apache 2.0 许可证,LICENSE有关详细信息,请参阅文件。
1.3 依赖
RT-Thread 3.0+
RT-Thread LWIP 组件
RT-Thread SPI驱动框架
RT-Thread PIN 驱动框架(示例平台代码依赖)
1.4 配置宏说明
自动配置时会在env中配置相关的配置宏。手动配置如下
类型描述
bool:定义有效,未定义,无效
字符串:字符串
整数:数字
1.5 BLE功能说明
V2.1.0以上版本支持开启蓝牙BLE功能。使用方法如下。menuconfig在env命令行中输入进行配置
-> RT-Thread online packages
-> IoT
->internet of things
-> WiFi
--- rw007: SPI WIFI rw007 driver
version(v2.1.0)
[*] use ble function
(300000000) SPI Max Hz
(spi1) RW007 BUS NAME
(22) CS pin index
(39) INT/BUSY pin index
(9) RESET pin index
[*] example driver: rw007 for stm32
[*] test: spi throughput capability and packet loss testing
[*] example: save power by switching
1.5.1 BLE功能测试示例命令说明
当打开软件包中的ble功能时rw007,会默认打开相关的功能测试示例。可以通过命令行输入rw007_ble查询。msh
msh />rw007_ble
rw007_ble help
rw007_ble init central/peripheral Note: init ble mode
rw007_ble get_addr Note: get ble address
rw007_ble update_params Note: update connect parameters(no support)
rw007_ble scan Note: scan ble slave
rw007_ble stop_scan Note: stop scan
rw007_ble connect xx:xx:xx:xx:xx:xx Note: use slave addr to connect
rw007_ble disconnect [conn_handle] Note: disconnect slave
rw007_ble get_server Note: discover all server(no support)
rw007_ble get_char Note: discover all description(no support)
rw007_ble get_disc Note: discover all characteristic(no support)
rw007_ble mtu_exch Note: ble mtu exchange(no support)
rw007_ble notify Note: enable ble notify(no support)
rw007_ble write Note: ble write data(no support)
rw007_ble read Note: ble read data(no support)
rw007_ble notify_change [conn_handle] [UUID] [char_value] Note: ble notify configure by uuid
rw007_ble write_uuid [conn_handle] [UUID] [data] Note: ble write data by uuid
rw007_ble read_uuid [conn_handle] [UUID] Note: ble read data by uuid
rw007_ble cfgwifi [duration_ms] Note: enable ble configuration wifi
1.5.2 BLE函数初始化
BLE必须调用函数初始化函数才能使用该函数BLE。
BLE 功能被RW007初始化为主机设备。
rw007_ble init central
例子
msh />rw007_ble init central
122-ble_cmd_init
start ble central
msh />
BLE 功能被RW007初始化为从设备。
rw007_ble init peripheral
特别说明:目前RW007的从机功能只支持微信小程序的使用。
1.5.3 获取本地BLE设备地址
BLE设备的地址分为public 地址和random地址。
rw007_ble get_addr
例子
msh />rw007_ble get_addr
339 - ble_cmd_get_addr
msh />ble data input packet resp_type: 0, len: 12
public_id_addr = c8:47:8c:41:10:04
random_id_addr = 00:00:00:00:00:00
1.5.4 扫描
BLE功能支持通过命令RW007扫描周边BLE设备。scan
扫描周边BLE设备
rw007_ble scan
例子
msh >rw007_ble scan
365 - ble_cmd_scan
msh >
ble data input packet resp_type: 1, len: 37
RW007_BLE_NTF_TYPE_DISCOVER
received advertisement; event_type=0 rssi=-69 addr_type=1 addr=61:97:58:84:b3:fe
mfg_data = 02 01 1a 02 0a 0c 0a ff 4c 00 10 05 42 1c e0 56 bc
此处地址的内容,addr以后可以被连接的设备使用。由于目前没有直接显示对应的BLE设备的名称,所以需要先手动确定BLE设备的地址。
停止扫描周围的BLE设备
rw007_ble stop_scan
1.5.5 连接
RW007BLE 功能设备支持通过设备的类mac地址连接BLE设备。该命令仅支持主模式连接mac从设备的类地址。连接成功后会有一个对应的conn_handle Value,这个conn_handle值用于其他功能。
测试命令
rw007_ble connect xx:xx:xx:xx:xx:xx
例子
msh />rw007_ble connect 4c:ed:fb:00:04:b1
198 - ble_cmd_connect
str_addr: 4c:ed:fb:00:04:b1
mac addr: b1: 4: 0:fb:ed:4c
msh />resp_type: 1, len: 52
RW007_BLE_NTF_TYPE_CONNECT
type: 0, status: 0, conn_handle: 1
resp_type: 1, len: 44
RW007_BLE_NTF_TYPE_CONNECT_DESC
our_id_addr: c9:47:8c:42:00:48
peer_id_addr: b1:04:00:fb:ed:4c
1.5.6 断开连接
RW007BLE 功能设备支持主动断开从设备。
rw007_ble disconnect [conn_handle]
conn_handle和的要求connect是一样的。
例子
msh />rw007_ble disconnect 1
341 - ble_cmd_disconnect
msh />resp_type: 1, len: 52
RW007_BLE_NTF_TYPE_DISCONN
1.5.7 写
RW007BLE写入数据功能,支持通过指定写入对应数据UUID。
rw007_ble write_uuid [conn_handle] [UUID] [data]
指令说明:是与设备连接[conn_handle]时产生的对应值,是对应设备的特征参数,是要发送的数据。RW007[UUID]BLE[data]
例子
msh />rw007_ble write_uuid 1 ebe0ccbe7a0a4b0c8a1a6ff2997da3a6 00
data: 00
write conn_hanle:1 uuid:ebe0ccbe7a0a4b0c8a1a6ff2997da3a6
write rc:0
注意:在测试示例中,[conn_handle]is 1, [UUID]is ebe0ccbe7a0a4b0c8a1a6ff2997da3a6, and [data]is 0x00(此处使用十六进制值)
1.5.8 更新 NOTIFY 参数
RW007BLE 功能支持修改接收notify参数。
rw007_ble notify_change [conn_handle] [char_value] [UUID]
参数说明:
[conn_handle]RW007是连接到设备时产生的对应值
[char_value]是配置参数,如下。
0:disable indication¬ification
1:enable notification,disable indication
2:enable indication, disable notification
3:enable indication ¬ification
[UUID]是对应BLE设备的特征参数值。
1.5.9 广播包类型说明
BLE功能中广播包的类型event可以RW007分为以下几种。
#define BLE_HCI_ADV_RPT_EVTYPE_ADV_IND (0)
#define BLE_HCI_ADV_RPT_EVTYPE_DIR_IND (1)
#define BLE_HCI_ADV_RPT_EVTYPE_SCAN_IND (2)
#define BLE_HCI_ADV_RPT_EVTYPE_NONCONN_IND (3)
#define BLE_HCI_ADV_RPT_EVTYPE_SCAN_RSP (4)
广播包结构如下:
Broadcast package structure description:
struct ble_gap_disc_desc {
uint8_t event_type;
uint8_t length_data;
ble_addr_t addr;
int8_t rssi;
uint8_t *data;
ble_addr_t direct_addr;
};
Different broadcast packet types are distinguished by event_type. All types are divided into the following types:
0: normal broadcast packet
1: Direct broadcast package
2: Scan request package
3: Not connect to broadcast instructions
4: Scan response packet
因此,在scan设备的扫描响应中,event_type可以通过对应的方式来判断广播包的类型。
1.6.0 阅读
RW007支持通过读取数据的功能UUID。
rw007_ble read_uuid [conn_handle] [UUID]
参数说明:
[conn_handle]RW007是连接到设备时产生的对应值
[UUID]是对应BLE器件的特征参数。
例子
msh />rw007_ble read_uuid 1 2a24
read conn_hanle:1 uuid:2a24
read rc:0
msh />ble data input packet resp_type: 0, len: 18
RW007_BLE_RSP_TYPE_READ
connect:1 attr_handle:14 uuid: 24 2a read data:
00000000: 4C 59 57 53 44 30 33 4D 4D 43 00 LYWSD03MMC.
注意:这里,[conn_handle]是 1,[UUID]是2a24,读取的数据是 BLE 设备的名称。
RW007 模块已经支持读取 128 位 UUID 的功能。
例子
msh />rw007_ble read_uuid 1 ebe0ccbe7a0a4b0c8a1a6ff2997da3a6
read conn_hanle:1 uuid:ebe0ccbe7a0a4b0c8a1a6ff2997da3a6
read rc:0
msh />ble data input packet resp_type: 0, len: 22
RW007_BLE_RSP_TYPE_READ
connect:1 attr_handle:51 uuid: a6 a3 7d 99 f2 6f 1a 8a 0c 4b 0a 7a be cc e0 eb read data:
00000000: 00
注意:这里[conn_handle]是 1,[UUID]是 128-bit ebe0ccbe7a0a4b0c8a1a6ff2997da3a6,读取的数据值为00
1.6.1 BLE网络配置功能说明
RW007支持微信小程序BLE网络配置功能。
rw007_ble cfgwifi [duration_ms]
参数说明:
[duration_ms] 是模块作为从机向外界广播的持续时间,以毫秒(ms)为单位。RW007对外广播的模块名称为RW007-XXXX,其中模块地址XXXX的后4位。mac
对于主机驱动的代码,主机端可以参考下面的实现代码进入BLE网络分发模式。
rt_err_t rw007_ble_cfgwifi(uint32_t duration_ms)
{
struct rw007_ble_cfgwifi cfgwifi;
cfgwifi.duration_ms = duration_ms;
return spi_set_data(wifi_sta.wlan, RW00x_CMD_BLE_CFGWIFI, &cfgwifi, sizeof(struct rw007_ble_cfgwifi));
}
例子
msh />rw007_ble cfgwifi 30000
msh />[420332] I/WLAN.mgnt: wifi connect success ssid:
[421341] I/WLAN.lwip: Got IP address : 192.168.1.212
注:30000是RW007模块作为从机对外广播的持续时间。一旦持续时间超过持续时间,外部广播将停止。
BLE网络配置和BLE主机功能同时使用的一些限制 (1)主机的SCAN功能和BLE网络分布不能同时使用。当RW007模块处于Advertise广播状态(BLE从机功能开启广播),主机(stm32)再次执行扫描操作时,扫描操作会返回错误Code,表示扫描操作无效。直到广播状态结束才能正常执行扫描操作Advertise,但此过程不影响连接设备的状态。
(2) 主机的SCAN功能和BLE网络配置不能同时使用。当主机(stm32)正在执行BLE主机的扫描操作,并且RW007模块同时配置为Advertise广播时,扫描操作将被中断。只有在广播状态结束后才能正常进行扫描操作Advertise,但此过程不影响已连接设备的状态。
二、注意事项
由于管脚复用的情况,需要在Config时配置bsp SPI的驱动。
原作者:RT-线程包