前言

概述

本文介绍BS2XV100的AT指令式及场景,为用户提供相应的指令格式和参数示例解释(本文档以BS21为例进行说明,后续不再备注说明)。

产品版本

与本文档相对应的产品版本如下。

产品名称

产品版本

BS2X

V100

读者对象

本文档主要适用于以下工程师:

  • 技术支持工程师

  • 软件开发工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修改记录

文档版本

发布日期

修改说明

07

2025-12-01

更新“服务端发送响应”章节内容。

06

2025-11-07

  • 更新“指令说明”的“注意事项”章节内容。
  • 更新“BLE”的“配置server”章节内容。

05

2025-08-29

  • 更新“BT业务AT指令一览表”的“gatts模块AT命令”章节内容。
  • 更新“BT业务AT指令描述”的“AT+GATTSUNREG 删除GATT server,释放资源”章节内容。
  • 新增“注册SLE连接模块和安全模块AT指令的串口打印回调函数”章节内容。

04

2025-05-30

  • 更新“通用AT指令一览表”章节内容。
  • 更新“通用AT指令描述”章节内容。
  • 新增“AT+BLESETPHY 设置phy”章节内容。
  • 更新“获取设备配对状态”章节内容。
  • 更新“服务端向客户端发送通知”章节内容。
  • 新增“常用AT指令示例”章节内容。

03

2025-01-14

更新“星闪读取远端rssi”章节内容。

02

2024-09-13

  • 新增“AT+BLESETDATALEN 设置发送数据包数据长度”章节内容。
  • 更新“新增AT指令方法”章节内容。

01

2024-05-15

第一次正式版本发布。

00B02

2024-03-01

  • 新增“BT业务AT指令”的“BLE”章节内容。
  • 新增“BT业务AT指令”的“SLE”章节内容。

00B01

2024-01-08

第一次临时版本发布。

指令说明

命令简介

AT命令用于TE(例如:PC等用户终端)和MT(例如:移动台等移动终端)之间控制信息的交互,如图1所示。

图 1 AT命令示意图

指令类型

AT指令类型如表1所示。

表 1 AT指令类型说明

类型

格式

用途

测试指令

AT+<cmd>=?

该命令用于查询设置指令的参数以及取值范围。

查询指令

AT+<cmd>?

该命令用于返回参数的当前值。

设置指令

AT+<cmd>=<parameter>,…

设置参数值或执行。

执行指令

AT+<cmd>

用于执行本指令的功能。

注意事项

  • 不是每一条指令都具备上述4种类型的命令。

  • 文档中有但当前软件版本不支持的AT指令会返回ERROR:TBD。

  • 双引号表示字符串数据“string”,例如:AT+SCANSSID=“string”。

  • 串口通信默认:波特率为115200、8个数据位、1个停止位、无校验。

  • [ ]内为可选值,参数可选。

  • 命令中的参数以“,”作为分隔符,除双引号括起来的字符串参数外,不支持参数本身带“,”。

  • AT指令中的参数不能有多余的空格。

  • AT指令必须大写,且必须以回车换行符作为结尾(CR LF),部分串口工具在用户敲击键盘回车键时只有回车符(CR)没有换行符(LF),导致AT指令无法识别,如需使用串口工具手动输入AT指令,需在串口工具中将回车键设置为回车符(CR)+换行符(LF)。以IPOP V4.1和SecureCRT8.1为例,说明如图1图2所示。

    图 1 IPOP V4.1 CR+LF设置示例

    图 2 SecureCRT8.1 CR+LF设置示例

  • AT命令默认最大长度为128个字符,参数可配置。通过Kconfig(menuconfig),(Top)->Middleware->Utils->AT->Config AT,修改The max length of AT comand参数

  • AT命令默认单个参数最大长度为128字节,参数可配置。修改middleware/chips/bs2x/at/at_cmd_porting/at_porting.c中,修改AT_RX_BUFF_SIZE大小

通用AT指令

通用AT指令一览表

表 1 通用AT指令说明

指令

描述

AT

测试AT功能。

AT+TESTSUITE

AT调试切换为TESTSUITE调试。

AT+REBOOT

芯片软复位。

AT+WRITEREG

通过AT写寄存器,需要打开宏REG_OPERATION。

AT+READREG

通过AT读寄存器,需要打开宏REG_OPERATION。

AT+SETSLEEP

通过AT投睡眠票,需要打开宏SLP_VETO_AT_SUPPORT。

AT+HEAPSTAT

打印堆使用情况。

AT+TASKSTACK

打印每个任务栈使用情况。

AT+TASKMALLOC

打印每个任务内存申请情况。

AT+INTLOCKDUMP

打印锁中断时长排名前10的函数。

AT+OSTIMERPRINT

打印目前创建的Timer情况。

AT+OSDFXPRINT

打印线程切换轨迹和最近的10次中断。

AT+PMVETOINFO

通过AT投低功耗票,需要打开宏SLP_VETO_AT_SUPPORT。

AT+CPUP

通过AT打印CPU占用率情况,需要LiteOS版本内打开宏LOSCFG_KERNEL_CPUP。

通用AT指令描述

AT 测试AT功能

表 1 AT测试说明

格式

AT

响应

OK

参数说明

-

示例

AT

注意

-

AT+HELP 查看当前可用AT命令

表 1 查看可用AT命令说明

格式

AT+HELP

响应

+HELP:

显示当前支持的AT命令

OK

参数说明

-

示例

AT+HELP

注意

-

AT+REBOOT

格式

AT+REBOOT

响应

软复位芯片

OK

参数说明

-

示例

AT+REBOOT

注意

-

AT+SETSLEEP

格式

AT+SETSLEEP=para

响应

disable enter sleep.

OK

enable enter sleep.

OK

参数说明

  • 0:禁止进入睡眠
  • 1:允许进入睡眠

示例

AT+HELP=0

注意

需要打开ENABLE_LOW_POWER

AT+CACHESTATISTIC

格式

AT+CACHESTATISTIC=para

响应

开启或关闭cache的命中率统计

OK

参数说明

para:

  • 0:关闭
  • 1:开启

示例

AT+CACHESTATISTIC=1

注意

需要打开CACHE_SUPPORT_DEBUG

AT+HEAPSTAT

格式

AT+HEAPSTAT

响应

打印所有线程堆内存申请信息

OK

参数说明

-

示例

AT+HEAPSTAT

注意

-

AT+TASKSTACK

格式

AT+TASKSTACK

响应

打印所有线程栈信息

OK

参数说明

-

示例

AT+TASKSTACK

注意

-

AT+TASKMALLOC

格式

AT+TASKMALLOC=para

响应

打印某个线程堆内存申请信息

OK

参数说明

<task_id>:线程ID

示例

AT+TASKMALLOC=2

注意

-

AT+WRITEREG

格式

AT+WRITEREG=para0,para1

响应

写寄存器

OK

参数说明

  • para0:寄存器地址
  • para1:写入寄存器的值

示例

AT+WRITEREG=0x57000014,0x5a5a

注意

需要打开REG_OPERATION

AT+READREG

格式

AT+READREG=para0,para1

响应

读寄存器

addr:para0 = value

OK

参数说明

  • para0:读寄存器起始地址
  • para1:读寄存器的长度

示例

AT+READREG=0x57000010,4

注意

需要打开REG_OPERATION

AT+INTLOCKDUMP

格式

AT+INTLOCKDUMP

响应

打印锁中断时长排名前10的函数

osal_print_irq_record: type[0:lock, 1:unlock, 2:restore 3 enter 4 exit]

OK

参数说明

-

示例

AT+INTLOCKDUMP

注意

需要打开OSAL_IRQ_RECORD_DEBUG

AT+OSTIMERPRINT

格式

AT+OSTIMERPRINT

响应

打印当前创建了延时的线程和创建的软Timer情况

[task]: taskId = %d, taskName = %s, taskStatus = %d

[swtmr]: timerId = 0x%x, handler = 0x%x, interval = %d, state = %d

OK

参数说明

-

示例

AT+OSTIMERPRINT

注意

需要打开OS_TIMER_DEBUG_SUPPORT,status对应的状态在los_task_base.h和los_swtmr_pri.h中查询

AT+OSDFXPRINT

格式

AT+OSDFXPRINT

响应

打印线程切换轨迹和最近的10次中断

<Task id>:x x x x x x

<Interrupt num>: x x x

OK

参数说明

-

示例

AT+OSDFXPRINT

注意

需要打开OS_DFX_SUPPORT

AT+PMVETOINFO

格式

AT+PMVETOINFO

响应

[pm_veto]: total_counts =

通过AT投低功耗票

OK

参数说明

-

示例

AT+PMVETOINFO

注意

需要打开SLP_VETO_AT_SUPPORT

AT+CPUP

格式

AT+CPUP

响应

统计CPU占用率

OK

参数说明

-

示例

AT+CPUP

注意

需要LiteOS版本内打开宏LOSCFG_KERNEL_CPUP、LOSCFG_DEBUG_TASK、LOSCFG_DEBUG_HWI

AT+GPIODEBUG

格式

AT+GPIODEBUG

响应

打印各个GPIO方向、输出高低等配置

OK

参数说明

-

示例

AT+GPIODEBUG

注意

需要打开GPIO_SUPPORT_DEBUG

AT+UARTINONE

格式

AT+UARTINONE=para

响应

AT串口输出到HSO

OK

参数说明

para:1表示将AT串口输出到HSO

示例

AT+UARTINONE=1

注意

需要打开UART_SUPPORT_ALL_IN_ONE

BT业务AT指令

BT业务AT指令一览表

BLE

gap模块AT命令

指令

描述

AT+BLEENABLE

使能BLE协议栈。

AT+BLEDISABLE

关闭BLE协议栈。

AT+BLESETADDR=<参数>

设置本地设备地址。

AT+BLEGETADDR

获取本地设备地址。

AT+BLESETNAME=<参数>

设置本地设备名称。

AT+BLEGETNAME

获取本地设备名称。

AT+BLESETAPPEARANCE=<参数>

设置本地设备外观。

AT+BLESETADVDATA=<参数>

设置BLE广播数据。

AT+BLESETADVPAR=<参数>

设置BLE广播参数。

AT+BLESTARTADV=<参数>

开始发送BLE广播。

AT+BLESTOPADV=<参数>

停止发送BLE广播。

AT+BLESETSCANPAR=<参数>

设置BLE扫描参数。

AT+BLESTARTSCAN

启动BLE扫描。

AT+BLESTOPSCAN

停止BLE扫描。

AT+BLEPAIR=<参数>

与对端设备发起配对。

AT+BLEGETPAIREDNUM

获取BLE设备配对设备数量。

AT+BLEGETPAIREDDEV

获取BLE设备配对设备。

AT+BLEGETPAIREDSTA=<参数>

获取BLE设备配对状态。

AT+BLEUNPAIR=<参数>

取消配对。

AT+BLEUNPAIRALL

取消所有配对。

AT+BLECONNPARUPD=<参数>

连接参数更新。

AT+BLECONN=<参数>

与BLE设备连接。

AT+BLEDISCONN=<参数>

断开BLE设备连接。

AT+BLEGAPREGCBK

注册gap回调函数。

AT+BLESETDATALEN=<参数>

设置链路数据包的数据长度。

gatts模块AT命令

指令

描述

AT+GATTSREGSRV=<参数>

创建一个GATT server。

AT+GATTSUNREG=<参数>

删除GATT server,释放资源。

AT+GATTSADDSERV=<参数>

添加一个GATT服务。

AT+GATTSSYNCADDSERV=<参数>

添加一个GATT服务(同步)。

AT+GATTSADDCHAR=<参数>

为GATT服务添加一个特征。

AT+GATTSSYNCADDCHAR=<参数>

为GATT服务添加一个特征(同步)。

AT+GATTSADDDESCR=<参数>

为最新的特征添加一个描述符。

AT+GATTSSYNCADDDESCR=<参数>

为最新的特征添加一个描述符(同步)。

AT+GATTSSTARTSERV=<参数>

启动指定的GATT服务。

AT+GATTSDELALLSERV=<参数>

删除指定server上的所有服务。

AT+GATTSSENDRSP=<参数>

发送响应。

AT+GATTSSNDNTFY=<参数>

发送通知或指示。

AT+GATTSSNDNTFYBYUUID=<参数>

根据uuid发送通知或指示。

AT+GATTSREGCBK

注册GATT服务端回调函数。

AT+GATTSSETMTU=<参数>

在连接之前设置server rx mtu。

gattc模块AT命令

指令

描述

AT+GATTCREG=<参数>

创建一个GATT client。

AT+GATTCUNREG=<参数>

删除GATT client,释放资源。

AT+GATTCFNDSERV=<参数>

发现所有服务(可by uuid)。

AT+GATTCFNDCHAR=<参数>

发现所有特征。

AT+GATTCFNDDESCR=<参数>

发现所有描述符。

AT+GATTCREADBYHDL=<参数>

读取by hdl。

AT+GATTCREADBYUUID=<参数>

读取by_uuid

AT+GATTCWRITEREQ=<参数>

写by hdl req。

AT+GATTCWRITECMD=<参数>

写by hdl cmd。

AT+GATTCEXCHMTU=<参数>

交换mtu请求。

AT+GATTCREGCBK

注册GATT客户端回调函数。

SLE

指令

描述

AT+SLEENABLE

SLE使能。

AT+SLESETADVPAR

设置SLE广播参数。

AT+SLESETADVDATA

设置指令。

AT+SLESTARTADV

起SLE广播。

AT+SLESTOPADV

停SLE广播。

AT+SLESTARTSCAN

启动扫描。

AT+SLESTOPSCAN

关闭扫描。

AT+SLESETNAME

设置本端名称。

AT+SLEGETNAME

获取本端名称。

AT+SLESETADDR

设置本端地址。

AT+SLEGETADDR

获取本端地址。

AT+SLECONN

建立SLE连接。

AT+SLEDISCONN

断开SLE连接。

AT+SLESETPHY

设置SLE PHY。

AT+SLESETDEFAULTCONNP

设置SLE 默认连接参数。

AT+SLEPAIR

进行加密配对。

AT+SLEUNPAIR

移除加密配对。

AT+SLEGETPAIREDNUM

获取配对设备数目。

AT+SLEGETPAIRDEV

获取配对设备。

AT+SLEGETPAIRSTA

获取配对状态。

AT+SLEGETBONDDEV

获取绑定设备状态。

AT+SLECONNPARUPD

星闪逻辑链路更新参数。

AT+SLEREADPEERRSSI

读取对端rssi。

AT+SLEREGCONNCBK

注册SLE连接模块和安全模块AT指令的串口打印回调函数

AT+SSAPSADDSRV

注册服务端。

AT+SSAPSDELALLSRV

删除服务端。

AT+SSAPSADDSERV

添加服务。

AT+SSAPSSYNCADDSERV

添加服务同步。

AT+SSAPSADDPROPERTY

添加属性。

AT+SSAPSSYNCADDPROPERTY

添加属性同步。

AT+SSAPSADDDESCR

添加属性描述符。

AT+SSAPSSYNCADDDESCR

添加属性描述符同步。

AT+SSAPSSTARTSERV

start service。

AT+SSAPSSNDNTFY

服务端向客户端发送通知。

AT+SSAPSNTFYBYUUID

服务端向客户端通过uuid发送通知。

AT+SSAPSSNDRESP

服务端向客户端发送响应。

AT+SSAPSREGCBK

服务端注册回调函数。

AT+SSAPCREGCBK

注册SSAPC回调函数。

AT+SSAPCFNDSTRU

发现service。

AT+SSAPCWRITECMD

客户端向服务端写入数据。

AT+SSAPCWRITEREQ

客户端向服务端发送写请求。

AT+SSAPCEXCHINFO

客户端发起信息交换。

AT+SSAPCREADBYUUID

客户端通过uuid发送读请求。

AT+SSAPCREADREQ

客户端读取服务端属性数据。

AT+SLESETSCANPAR

设置扫描参数。

AT+SLEDISCONNALL

SLE断开所有连接。

BT业务AT指令描述

BLE

gap模块AT命令

AT+BLEENABLE 使能ble协议栈

格式

AT+BLEENABLE

响应

打开BLE开关

成功:OK

参数说明

-

示例

AT+BLEENABLE

注意

-

AT+BLEDISABLE 关闭ble协议栈

格式

AT+BLEDISABLE

响应

关闭BLE开关

成功:OK

参数说明

-

示例

AT+BLEDISABLE

注意

-

AT+BLESETADDR 设置本地设备地址

格式

AT+BLESETADDR=<addr_type,addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <addr_type>:蓝牙设备类型
  • <addr>:蓝牙设备地址

示例

AT+BLESETADDR=0,0x112233445566

注意

设备类型取值范围:

  • 0:公共设备地址
  • 1:随机设备地址
  • 2:公共本端地址
  • 3:随机静态本端地址

设备地址为长度为14的字符串

AT+BLEGETADDR 获取本地设备地址

格式

AT+BLEGETADDR

响应

  • 成功:本地设备地址
  • 失败:ERROR

参数说明

-

示例

AT+BLEGETADDR

注意

-

AT+BLESETNAME 设置本地设备名称

格式

AT+BLESETNAME=<len,name>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <len>:本地设备名称长度
  • <name>:本地设备名称

示例

AT+BLESETNAME=10,atcmdtest

注意

名称长度取值范围为[0,255],设备名称长度为len-1的字符串,名称最后默认存在’/0’

AT+BLEGETNAME 获取本地设备名称

格式

AT+BLEGETNAME

响应

  • 成功:本地设备名称
  • 失败:ERROR

参数说明

-

示例

AT+BLEGETNAME

注意

-

AT+BLESETAPPEARANCE 设置本地设备外观

格式

AT+BLESETAPPEARANCE=<appearance>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<appearance>:本地设备外观

示例

AT+BLESETAPPEARANCE=961

注意

参数值应为规定值,示例中961为键盘的外观值,具体请参考表1

AT+BLESETADVDATA 设置BLE广播数据

格式

AT+BLESETADVDATA=<adv_length,adv_data,scan_rsp_length,scan_rsp_data,adv_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <adv_length>:广播数据长度(普通广播数据长度最大为31字节,拓展广播数据长度最大为251字节(实际为190字节,BTC限制))
  • <adv_data>:广播数据
  • <scan_rsp_length>:扫描返回数据长度
  • <scan_rsp_data>:扫描返回数据
  • <adv_id>:广播id

示例

AT+BLESETADVDATA=6,0x112233445566,0,0,1

注意

广播数据长度单位为字节,所以广播数据应为长度两倍的字符串,扫描返回数据同理,广播ID取值范围为1~255

AT+BLESETADVPAR 设置广播数据参数

格式

AT+BLESETADVPAR=<min_interval,max_interval,adv_type,own_addr,peer_addr_type,peer_addr,channel_map,adv_filter_policy,tx_power,duration,adv_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <min_interval>:最小扫描间隔;取值范围[0x20, 0x4000],Time=N×0.625ms
  • <max_interval>:最大扫描间隔;取值范围[0x20, 0x4000],Time=N×0.625ms
  • <adv_type>:广播类型
  • <own_addr>:本端地址
  • <peer_addr_type>:对端地址类型
  • <peer_addr>:对端地址
  • <channel_map>:信道;取值范围为[0x01, 0x07]
  • <adv_filter_policy>:过滤策略
  • <tx_power>:扫描功率
  • <duration>:扫描周期;仅取值为0
  • <adv_id>:广播ID;取值范围1~255

示例

AT+BLESETADVPAR=48,48,0,0x112233445577,0,0x112233445566,7,0,1,0,1

注意

-

AT+BLESTARTADV 开始发送BLE广播

格式

AT+BLESTARTADV=<adv_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<adv_id>:广播id

示例

AT+BLESTARTADV=1

注意

-

AT+BLESTOPADV 停止发送BLE广播

格式

AT+BLESTOPADV=<adv_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<adv_id>:广播id

示例

AT+BLESTOPADV=1

注意

-

AT+BLESETSCANPAR 设置BLE扫描参数

格式

AT+BLESETSCANPAR=<scan_interval,scan_window,scan_type,scan_phy,scan_rsp_policy>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <scan_interval>:扫描间隔;取值范围[0x04, 0x4000],Time=N×0.625ms
  • <scan_window>:扫描窗口;取值范围[0x04, 0x4000],Time=N×0.625ms
  • <scan_type>:扫描类型;{0(被动扫描),1(主动扫描)}
  • <scan_phy>:扫描phy
  • <scan_rsp_policy>:扫描过滤策略

示例

AT+BLESETSCANPAR=0x48,0x48,0,1,0

注意

-

AT+BLESTARTSCAN 启动BLE扫描

格式

AT+BLESTARTSCAN

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+BLESTARTSCAN

注意

-

AT+BLESTOPSCAN 停止BLE扫描

格式

AT+BLESTOPSCAN

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+BLESTOPSCAN

注意

-

AT+BLEPAIR 与对端设备发起配对

格式

AT+BLEPAIR=<addr_type,addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <addr_type>:蓝牙设备类型
  • <addr>:蓝牙设备地址

示例

AT+BLEPAIR=0,0x112233445566

注意

设备类型取值范围:

  • 0:公共设备地址
  • 1:随机设备地址
  • 2:公共本端地址
  • 3:随机静态本端地址

设备地址为长度为14的字符串;配对之前先进行连接

AT+BLEGETPAIREDNUM 获取BLE设备配对设备数量

格式

AT+BLEGETPAIREDNUM

响应

  • 成功:配对设备数量
  • 失败:ERROR

参数说明

-

示例

AT+BLEGETPAIREDNUM

注意

-

AT+BLEGETPAIREDDEV 获取BLE设备配对设备

格式

AT+BLEGETPAIREDDEV

响应

  • 成功:配对设备地址
  • 失败:ERROR

参数说明

-

示例

AT+BLEGETPAIREDDEV

注意

-

AT+BLEGETPAIREDSTA 获取BLE设备配对状态

格式

AT+BLEGETPAIREDSTA=<addr_type,addr>

响应

  • 成功:BLE设备配对状态
  • 失败:ERROR

参数说明

  • <addr_type>:蓝牙设备类型
  • <addr>:蓝牙设备地址

示例

AT+BLEGETPAIREDSTA=0,0x112233445566

注意

设备类型取值范围:

  • 0:公共设备地址
  • 1:随机设备地址
  • 2:公共本端地址
  • 3:随机静态本端地址

设备地址为长度为14的字符串

AT+BLEUNPAIR 取消配对

格式

AT+BLEUNPAIR=<addr_type,addr>

响应

  • 成功:断连
  • 失败:ERROR

参数说明

  • <addr_type>:蓝牙设备类型
  • <addr>:蓝牙设备地址

示例

AT+BLEUNPAIR=0,0x112233445566

注意

设备类型取值范围:

  • 0:公共设备地址
  • 1:随机设备地址
  • 2:公共本端地址
  • 3:随机静态本端地址

设备地址为长度为14的字符串

AT+BLEUNPAIR 取消所有配对

格式

AT+BLEUNPAIR

响应

  • 成功:断连
  • 失败:ERROR

参数说明

-

示例

AT+BLEUNPAIR

注意

-

AT+BLECONNPARUPD 更新连接参数

格式

AT+BLECONNPARUPD=<conn_handle,interval_min,interval_max,slave_latency,timeout_multiplier>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_handle>:连接句柄
  • <interval_min>:链路调度最小间隔,[0x06, 0x0C80],Time=N×1.25ms
  • <interval_max>:链路调度最大间隔,[0x06, 0x0C80],Time=N×1.25ms
  • <slave_latency>:延迟周期,单位slot(该值表示在设置值的周期内可以不回复, 为0时则表示每包都需回复)
  • <timeout_multiplier>:超时断连间隔

示例

AT+BLECONNPARUPD=0,0x48,0x48,0,500

注意

-

AT+BLECONN 与BLE设备连接

格式

AT+BLECONN=<addr_type,addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <addr_type>:蓝牙设备类型
  • <addr>:蓝牙设备地址

示例

AT+BLECONN=0,0x112233445566

注意

设备类型取值范围:

  • 0:公共设备地址
  • 1:随机设备地址
  • 2:公共本端地址
  • 3:随机静态本端地址

设备地址为长度为14的字符串

AT+BLEDISCONN 与BLE设备断开连接

格式

AT+BLEDISCONN=<addr_type,addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <addr_type>:蓝牙设备类型
  • <addr>:蓝牙设备地址

示例

AT+BLEDISCONN=0,0x112233445566

注意

设备类型取值范围:

  • 0:公共设备地址
  • 1:随机设备地址
  • 2:公共本端地址
  • 3:随机静态本端地址

设备地址为长度为14的字符串

AT+BLEGAPREGCBK 注册BLE回调函数

格式

AT+BLEGAPREGCBK

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+BLEGAPREGCBK

注意

-

AT+BLESETDATALEN 设置发送数据包数据长度

格式

AT+BLESETDATALEN

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_handle>:连接句柄
  • <maxtxoctets>:最大字节数
  • <maxtxtime>:最大发送时间

示例

AT+BLESETDATALEN=0,100,100

注意

-

AT+BLESETPHY 设置phy

格式

AT+BLESETPHY=<conn_handle>,<all_phys>,<tx_phys>,<rx_phys>,<phy_options>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_handle>:连接句柄
  • <all_phys>:

    0: TX/RX PHY生效

    1:TX PHY不生效

    2:RX PHY不生效

    3:TX/RX PHY都不生效

  • <tx_phy>:tx phy值

    0:1M PHY

    1:2M PHY

    2:Code PHY

  • <rx_phy>:rx phy值

    0:1M PHY

    1:2M PHY

    2:Code PHY

  • <phy_options>: PHY选项

    0:主机没有首选编码

    1:使用S=2编码PHY(1M/2=512k)

    2:使用S=8编码PHY(1M/8=128k)

示例

AT+BLESETPHY=0,2,1,1,0

注意

上述各参数中没有列出的示例值为预留字段, AT侧不做拦截, 下发后BTC会回复异常参数, 请关注回调中的异常日志打印

gatts模块AT命令

AT+GATTSREGSRV 创建一个GATT server

格式

AT+GATTSREGSRV=<uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<uuid>:应用uuid

示例

AT+GATTSREGSRV=0x1122

注意

-

AT+GATTSUNREG 删除GATT server,释放资源

格式

AT+GATTSUNREG=<uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<server_id>:服务端id

示例

AT+GATTSUNREG=1

注意

-

AT+GATTSADDSERV 添加一个GATT服务

格式

AT+GATTSADDSERV=<server_id,svc_uuid,is_primary_flag>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <svc_uuid>:服务uuid
  • <is_primary_flag>:是否是首要服务

示例

AT+GATTSADDSERV=1,0x1812,1

注意

-

AT+GATTSSYNCADDSERV 添加一个GATT服务(同步)

格式

AT+GATTSSYNCADDSERV=<server_id,svc_uuid,is_primary_flag>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <svc_uuid>:服务uuid
  • <is_primary_flag>:是否是首要服务

示例

AT+GATTSSYNCADDSERV=1,0x1812,1

注意

-

AT+GATTSADDCHAR 为GATT服务添加一个特征

格式

AT+GATTSADDCHAR=<server_id,service_handle,chara_uuid,permissions,properties,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <service_handle>:服务句柄
  • <chara_uuid>:特征uuid
  • <permissions>:权限
  • <propertise>:特性
  • <value_len>:值长
  • <value>:值

示例

AT+GATTSADDCHAR=1,1,0x2a4a,0x01,0x02,4,01010003

注意

值是长度为值长度两倍的字符串

AT+GATTSSYNCADDCHAR 为GATT服务添加一个特征(同步)

格式

AT+GATTSSYNCADDCHAR=<server_id,service_handle,chara_uuid,permissions,properties,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <service_handle>:服务句柄
  • <chara_uuid>:特征uuid
  • <permissions>:权限
  • <propertise>:特性
  • <value_len>:值长度
  • <value>:值

示例

AT+GATTSSYNCADDCHAR=1,1,0x2a4a,0x01,0x02,4,01010003

注意

值是长度为值长度两倍的字符串

AT+GATTSADDDESCR 为最新的特征添加一个描述符

格式

AT+GATTSADDDESCR=<server_id,service_handle,chara_uuid,permissions,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <service_handle>:服务句柄
  • <chara_uuid>:特征uuid
  • <permissions>:权限
  • <value_len>:值长度
  • <value>:值

示例

AT+GATTSADDDESCR=1,1,0x2902,0x03,2,0100

注意

值是长度为值长度两倍的字符串

AT+GATTSSYNCADDDESCR 为最新的特征添加一个描述符(同步)

格式

AT+GATTSSYNCADDDESCR=<server_id,service_handle,chara_uuid,permissions,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <service_handle>:服务句柄
  • <chara_uuid>:特征uuid
  • <permissions>:权限
  • <value_len>:值长度
  • <value>:值

示例

AT+GATTSSYNCADDDESCR=1,1,0x2902,0x03,2,0100

注意

值是长度为值长度两倍的字符串

AT+GATTSSTARTSERV 启动指定的GATT服务

格式

AT+GATTSSTARTSERV=<server_id,service_handle>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <service_handle>:服务句柄

示例

AT+GATTSSTARTSERV=1,1

注意

-

AT+GATTSDELALLSERV 删除指定server上的所有服务

格式

AT+GATTSDELALLSERV=<server_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<server_id>:服务端id

示例

AT+GATTSDELALLSERV=1

注意

-

AT+GATTSSENDRSP 发送响应

格式

AT+GATTSSENDRSP=<server_id,conn_handle,request_id,status,offset,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <conn_handle>:连接句柄
  • <request_id>:请求id
  • <status>:请求结果
  • <offset>:偏移
  • <value_len>:值长度
  • <value>:值

示例

AT+GATTSSENDRSP=1,0,req_id,0,0,2,0x4562

注意

值是长度为值长度两倍的字符串

AT+GATTSSNDNTFY 发送通知或指示

格式

AT+GATTSSNDNTFY=<server_id,conn_handle,attr_handle,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <conn_handle>:连接句柄
  • <attr_handle>:偏移
  • <value_len>:值长度
  • <value>:值

示例

AT+GATTSSNDNTFY=1,0,9,7,0x00000000000014

注意

值是长度为值长度两倍的字符串

AT+GATTSSNDNTFYBYUUID 根据uuid发送通知或指示

格式

AT+GATTSSNDNTFYBYUUID=<server_id,conn_handle,chara_uuid,start_handle,end_handle,value_len,value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <conn_handle>:连接句柄
  • <chara_uuid>:特征uuid
  • <start_handle>:起始句柄
  • <end_handle>:结束句柄
  • <value_len>:值长度
  • <value>:值

示例

AT+GATTSSNDNTFYBYUUID=1,0,0x2a4d,1,9,7,0x00000000000014

注意

值是长度为值长度两倍的字符串

AT+GATTSREGCBK 注册GATT服务端回调函数

格式

AT+GATTSREGCBK

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+GATTSREGCBK

注意

-

AT+GATTSSETMTU 在连接之前设置server rx mtu

格式

AT+GATTSSETMTU=<server_id,mtu_size>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <mtu_size>:mtu大小

示例

AT+GATTSSETMTU=1,23

注意

-

gattc模块AT命令

AT+GATTCREG 创建一个GATT client

格式

AT+GATTCREG=<uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<uuid>:应用uuid

示例

AT+GATTCREG=0x1212

注意

-

AT+GATTCUNREG 删除GATT client,释放资源

格式

AT+GATTCUNREG=<client_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<client_id>:客户端id

示例

AT+GATTCUNREG=1

注意

-

AT+GATTCFNDSERV 发现服务

格式

AT+GATTCFNDSERV=<client_id,conn_id,uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <uuid>:应用uuid

示例

AT+GATTCFNDSERV=1,1,0x1212

注意

-

AT+GATTCFNDCHAR 发现特征

格式

AT+GATTCFNDCHAR=<client_id,conn_id,server_handle,uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <server_handle>:服务句柄
  • <uuid>:应用uuid

示例

AT+GATTCFNDCHAR=1,1,0,0x1212

注意

-

AT+GATTCFNDDESCR 发现描述符

格式

AT+GATTCFNDDESCR=<client_id,conn_id,handle>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <handle>:服务句柄

示例

AT+GATTCFNDDESCR=1,1,0

注意

-

AT+GATTCREADBYHDL 读取by hdl

格式

AT+GATTCREADBYHDL=<client_id,conn_id,handle>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <handle>:服务句柄

示例

AT+GATTCREADBYHDL=1,1,0

注意

-

AT+GATTCREADBYUUID 读取by_uuid

格式

AT+GATTCREADBYUUID=<client_id,conn_id,start_hdl,end_hdl,uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <start_hdl>:起始句柄
  • <end_hdl>:结束句柄
  • <uuid>:想要读的uuid

示例

AT+GATTCREADBYUUID=1,0,13,13,2a4d

注意

-

AT+GATTCWRITEREQ 写by hdl req

格式

AT+GATTCWRITEREQ=<client_id,conn_id,handle,data_len,data>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <handle>:句柄
  • <data_len>:数据长度
  • <data>:数据

示例

AT+GATTCWRITEREQ=1,0,13,1,0x11

注意

-

AT+GATTCWRITECMD 写by hdl cmd

格式

AT+GATTCWRITECMD=<client_id,conn_id,handle,data_len,data>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <handle>:句柄
  • <data_len>:数据长度
  • <data>:数据

示例

AT+GATTCWRITECMD=1,0,13,1,0x11

注意

-

AT+GATTCEXCHMTU 交换MTU请求

格式

AT+GATTCEXCHMTU=<server_id,conn_id,mtu_size>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <server_id>:服务端id
  • <conn_id>:连接id
  • <mtu_size>:client rx mtu大小

示例

AT+GATTCEXCHMTU=1,0,100

注意

-

AT+GATTCREGCBK 注册GATT客户端回调函数

格式

AT+GATTCREGCBK

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+GATTCREGCBK

注意

-

SLE

SLE Device Discovery模块指令描述

SLE使能

设置指令

AT+SLEENABLE

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEENABLE

注意

-

SLE去使能

设置指令

AT+SLEDISABLE

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEDISABLE

注意

-

设置SLE广播参数

设置指令

AT+SLESETADVPAR=<announce_handle>,<announce_mode>,<announce_interval_min>,<announce_interval_max>,<own_addr_type>,<own_addr_addr>,<peer_addr_type>,<peer_addr_addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <announce_handle>:设备公开句柄,取值范围[0, 0x10]
  • <announce_mode>:设备公开类型

    /*可连接可扫描*/

  • <announce_interval_min>:最小设备公开周期,0x000020~0xffffff,单位125μs
  • <announce_interval_max>:最大设备公开周期,0x000020~0xffffff,单位125μs
  • <own_addr_type>:SLE本端地址类型

    0:公有地址,

    6 :随机地址

  • <own_addr_addr>:SLE本端设备地址
  • <peer_addr_type>:SLE对端设备地址类型

    0:公有地址,

    6 :随机地址

  • <peer_addr_addr>:SLE对端设备地址

示例

AT+SLESETADVPAR=1,3,200,200,0,000000000000,0,000000000000

注意

此命令需在SLE使能AT+SLEENABLE后下发

设置SLE广播数据

设置指令

AT+SLESETADVDATA=<adv_handle>,<announce_data_len>,<seek_rsp_data_len>,<announce_data>,<seek_rsp_data>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <adv_handle>:广播handle, 取值范围[0, 0x10]
  • <announce_data_len>:设备公开数据长度
  • <seek_rsp_data_len>:扫描响应数据长度
  • <announce_data>:设备公开数据(hex类型字符串,最大长度521个字符)
  • <seek_rsp_data>:扫描响应数据(hex类型字符串,最大长度521个字符)

示例

AT+SLESETADVDATA=1,10,4,aabbccddeeff11223344,11224455

注意

此命令需在SLE使能AT+SLEENABLE后下发

起SLE广播

设置指令

AT+SLESTARTADV=<adv_enable>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<adv_handle>:adv handle, 取值范围[0, 0x10]

示例

AT+SLESTARTADV=1

注意

此命令需在SLE使能AT+SLEENABLE后下发

停SLE广播

设置指令

AT+SLESTOPADV=<adv_handle>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<adv_handle>:adv handle

示例

AT+SLESTOPADV=1

注意

此命令需在SLE起广播AT+SLESTARTADV=1后下发

设置扫描参数

设置指令

AT+SLESETSCANPAR=<scan_type>,<scan_interval>,<scan_window>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <scan_type>:扫描类型

    0:被动扫描

    1:主动扫描

  • <scan_interval>:扫描间隔,取值范围[0x14, 0xFFFF],单位125μs
  • <scan_window>:扫描窗口,取值范围[0x14, 0xFFFF],单位125μs

示例

AT+SLESETSCANPAR=0,0x48,0x48

注意

此命令需在SLE起扫描AT+SLESTARTSCAN前下发

使能扫描

设置指令

AT+SLESTARTSCAN

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLESTARTSCAN

注意

-

关闭扫描

设置指令

AT+SLESTOPSCAN

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLESTOPSCAN

注意

-

设置本端名称

设置指令

AT+SLESETNAME

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<len>:name长度

<name>:名字

示例

AT+SLESETNAME=7,SDKTEST

注意

-

获取本端名称

设置指令

AT+SLEGETNAME

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEGETNAME

注意

-

设置本端地址

设置指令

AT+SLESETADDR

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <addr_type>:地址类型
  • <addr>:地址

示例

AT+SLESETADDR=0,0x000000000001

注意

-

获取本端地址

设置指令

AT+SLEGETADDR

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEGETADDR

注意

-

SLE Connection manager模块指令描述

建立SLE连接

当前只支持0、6两种,通常常用的类型是0。地址类型会校验,如果不匹配会返回错误。

设置指令

AT+SLECONN=<sle_addr_type>,<sle_addr>

响应

  • 成功:OK
  • 失败:ERROR

连接成功后会打印[connected]字样以及对端设备地址与handle值

参数说明

  • < sle_addr_type >:SLE设备地址类型

    0:公有地址

    6 : 随机地址

  • <sle_addr>:SLE设备地址

示例

AT+SLECONN=0,0x000000000000

注意

-

星闪逻辑链路更新参数

设置指令

AT+SLECONNPARUPD=<conn_id>,<interval_min>,<interval_max>,<max_latency>,<supervision_timeout>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_id>:连接ID
  • <interval_min>:链路调度最小间隔,取值范围[0x0002, 0x32000],单位125μs
  • <interval_max>:链路调度最大间隔,取值范围[0x0002, 0x32000],单位125μs
  • <max_latency>:延迟周期,单位slot(该值表示在设置值的周期内可以不回复, 为0时则表示每包都需回复)
  • <supervision_timeout>:超时时间,单位10ms

示例

AT+SLECONNPARUPD=0,20,20,0,500

注意

-

星闪读取远端rssi

该命令的作用:读取当前SLE ACB 链路的RSSI信号强度,RSSI(Received Signal Strength Indicator)是接收信号的强度指示。

设置指令

AT+SLEREADPEERRSSI=<conn_id>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<conn_id>:连接ID

示例

AT+SLEREADPEERRSSI=0

注意

需建立连接后发送此命令

注册SLE连接模块和安全模块AT指令的串口打印回调函数

设置指令

AT+SLEREGCONNCBK

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEREGCONNCBK

注意

-

断开SLE连接

设置指令

AT+SLEDISCONN=<sle_addr_type>,<sle_addr>

响应

  • 成功:OK
  • 失败:ERROR

连接成功后会打印[disconnected]字样以及对端设备地址与handle值

参数说明

  • < sle_addr_type >:SLE设备地址类型

    0:公有地址

    6:随机地址

  • <sle_addr>:SLE设备地址

示例

AT+SLEDISCONN=0,000000000000

注意

-

设置SLE PHY

默认1M 4M暂时不支持。

该命令作用:某些场景下需要高的传输速率,此时就通过设置tx_phy、rx_phy参数为2M。如果两端都支持2M,才能设置成功。

设置指令

AT+SLESETPHY=<conn_id>,<tx_phy>,<rx_phy>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_id>:连接id
  • <tx_phy>:tx phy值

    0:1M PHY

    1:2M PHY

    2:4M PHY

  • <rx_phy>:tx phy值

    0:1M PHY

    1:2M PHY

    2:4M PHY

示例

AT+SLESETPHY=0,1,1

注意

-

设置SLE 默认连接参数

设置指令

AT+ SLESETDEFAULTCONNP =<enable_filter_policy>,<initiate_phys>,<gt_negotiate>,<scan_interval>,<scan_window>,<max_interval>,<min_interval>,<timeout>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <enable_filter_policy>:是否打开链路过滤
  • <initiate_phys>:链路扫描带宽
  • <gt_negotiate>:链路建立时是否进行G和T交互
  • <scan_interval>:扫描对端设备的interval

    最小值:0x14

    最大值:无上限

  • <scan_window>:扫描对端设备的windows

    最小值:0x14

    最大值:传入的<scan_interval>

  • <max_interval>:链路最大调度interval

    最大值:32000

  • <min_interval>:链路最小调度interval

    最小值:10

  • <timeout>:链路超时时间(N×10ms)

    最小值:10

    最大值:3200

示例

AT+SLESETDEFAULTCONNP=0,1,0x1,0x20,0x20,0x64,0x64,0x1FC

注意

-

SLE断开所有连接

设置指令

AT+SLEDISCONNALL

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  

示例

AT+SLEDISCONNALL

注意

-

SLE security management模块指令描述

进行加密配对

设置指令

AT+SLEPAIR=<sle_addr_type>,<sle_addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • < sle_addr_type >:SLE设备地址类型

    0:公有地址

    6:随机地址

  • <sle_addr>:SLE设备地址

示例

AT+SLEPAIR=0,000000000000

注意

需在sle建立连接以后,和对端启动加密配对

移除加密配对

设置指令

AT+SLEUNPAIR=<sle_addr_type>,<sle_addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • < sle_addr_type >:SLE设备地址类型

    0:公有地址,

    6:随机地址

  • <sle_addr>:SLE设备地址

示例

AT+SLEUNPAIR=0,000000000000

注意

-

获取配对设备数目

设置指令

AT+SLEGETPAIREDNUM

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEGETPAIREDNUM

注意

-

获取配对设备

设置指令

AT+SLEGETPAIRDEV

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEGETPAIRDEV

注意

--

获取设备配对状态

设置指令

AT+SLEGETPAIRSTA=<sle_addr_type>,<sle_addr>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • < sle_addr_type >:SLE设备地址类型

    0:公有地址

    6:随机地址

  • <sle_addr>:SLE设备地址

示例

AT+SLEGETPAIRSTA=0,000000000000

注意

-

获取绑定设备

设置指令

AT+SLEGETBONDDEV

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SLEGETBONDDEV

注意

-

ssap server模块指令描述

注册服务端

设置指令

AT+SSAPSADDSRV=<uuid>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SSAPSADDSRV=0x1234

注意

-

去注册服务端

设置指令

AT+SSAPSDELALLSRV

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SSAPSDELALLSRV

注意

-

添加服务

注册成“次要服务”没什么影响。现在都是主要服务,次要服务的概念弱化了,因此通常情况下都是注册成主要服务。

设置指令

AT+SSAPSADDSERV=<uuid>,<is_primary>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SSAPSADDSERV=0x2222,1

注意

-

添加服务同步

设置指令

AT+SSAPSSYNCADDSERV=<uuid>,<is_primary>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SSAPSSYNCADDSERV=0x2222,1

注意

-

属性参数说明:

typedef enum {
    SSAP_PERMISSION_READ                  = 0x01,      /*可读*/
    SSAP_PERMISSION_WRITE                 = 0x02,      /*可写*/
    SSAP_PERMISSION_ENCRYPTION_NEED       = 0x04,      /*需要加密*/
    SSAP_PERMISSION_AUTHENTICATION_NEED   = 0x08,      /*需要认证*/
    SSAP_PERMISSION_AUTHORIZATION_NEED    = 0x10,      /*需要授权*/
} ssap_permission_t;
typedef enum {
    SSAP_OPERATE_INDICATION_BIT_READ = 0x01,          /*数据值可被读取*/
    SSAP_OPERATE_INDICATION_BIT_WRITE_NO_RSP = 0x02,  /*数据值可被写入,写入后无反馈*/
    SSAP_OPERATE_INDICATION_BIT_WRITE = 0x04,         /*数据值可被写入,写入后产生反馈给客户端*/
    SSAP_OPERATE_INDICATION_BIT_NOTIFY = 0x08,        /*数据值通过通知方式传递给客户端*/
    SSAP_OPERATE_INDICATION_BIT_INDICATE = 0x10,      /*数据值通过指示方式传递给客户端*/
    SSAP_OPERATE_INDICATION_BIT_BROADCAST = 0x20,     /*数据值可携带在广播中*/
    SSAP_OPERATE_INDICATION_BIT_DESCRITOR_WRITE = 0x100,  /*数据值说明描述符可被写入*/
    SSAP_OPERATE_INDICATION_MAX,                      /*操作指示最大值 */
} ssap_operate_indication_t;
添加属性

设置指令

AT+SSAPSADDPROPERTY=<service_handle>,<uuid>,<permissions>,<operate_indication>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <service_handle>:服务的hadle
  • <uuid>:SSAP特征UUID
  • <permissions>:特征权限
  • <operate_indication>:操作指示
  • <value_len>:响应的数据长度
  • <value>:响应的数据

示例

AT+SSAPSADDPROPERTY=1,0x2323,5,5,2,0x1234

注意

-

添加属性同步

设置指令

AT+SSAPSSYNCADDPROPERTY=<service_handle>,<uuid>,<permissions>,<operate_indication>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <service_handle>:服务的hadle
  • <uuid>:SSAP 特征 UUID
  • <permissions>:特征权限
  • <operate_indication>:操作指示
  • <value_len>:响应的数据长度
  • <value>:响应的数据

示例

AT+SSAPSSYNCADDPROPERTY=1,0x2323,5,5,2,0x1234

注意

-

添加属性描述符

设置指令

AT+SSAPSADDDESCR=<service_handle>,<property_handle>,<uuid>,<permissions>,<operate_indication>,<type>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <service_handle>:服务handle
  • <property_handle>:属性handle
  • <uuid>:SSAP 描述符 UUID
  • <permissions>:特征权限
  • <operate_indication>:操作指示
  • <type>:描述符类型
  • <value_len>:数据长度
  • <value>:数据

示例

AT+SSAPSADDDESCR=1,2,0x3333,5,5,2,2,0x0200

注意

属性描述符值为0100时表示notify,为0200时表示indicate,为0时表示不可向对端通知或指示

添加属性描述符同步

设置指令

AT+SSAPSSYNCADDDESCR=<service_handle>,<property_handle>,<uuid>,<permissions>,<operate_indication>,<type>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <service_handle>:服务handle
  • <property_handle>:属性handle
  • <uuid>:SSAP 描述符 UUID
  • <permissions>:特征权限
  • <operate_indication>:操作指示
  • <type>:描述符类型
  • <value_len>:数据长度
  • <value>:数据

示例

AT+SSAPSSYNCADDDESCR=1,2,0x3333,5,5,2,2,0x0200

注意

-

服务端向客户端发送通知

设置指令

AT+SSAPSSNDNTFY=<conn_id>,<handle>,<type>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_id>:连接handle
  • <handle>:属性handle
  • <type>:SSAP 特征类型

    0:特征值

    1:属性说明描述符

    2:客户端配置描述符

    3:服务端配置描述符

    4:格式描述符

    5:服务管理保留描述符,0x05–0x1F

    0xFF:厂商自定义描述符

  • <value_len>:数据长度
  • <value>:数据

示例

AT+SSAPSSNDNTFY=0,2,0,2,0x0200

注意

-

服务端向客户端通过uuid发送通知

设置指令

AT+SSAPSNTFYBYUUID=<conn_id>,<uuid>,<start_hdl>,<end_hdl>,<type>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_id>:连接handle
  • <uuid>:属性uuid
  • <start_hdl>:开始句柄
  • <end_hdl>:结束句柄
  • <type>:SSAP 特征类型

    0:特征值

    1:属性说明描述符

    2:客户端配置描述符

    3:服务端配置描述符

    4:格式描述符

    5:服务管理保留描述符,0x05–0x1F

    0xFF:厂商自定义描述符

  • <value_len>:数据长度
  • <value>:数据

示例

AT+SSAPSNTFYBYUUID=0,0x1234,0,0xFFFF,0,2,0x0200

注意

-

服务端发送响应

发送响应原因说明:

typedef enum {
    ERRCODE_SSAP_INVALID_PDU = ERRCODE_SLE_SSAP_BASE + 0x01,                      /*服务端接收的 PDU 无效*/
    ERRCODE_SSAP_PDU_NOT_SUPPORT = ERRCODE_SLE_SSAP_BASE + 0x02,                  /*服务端不支持处理接收的PDU*/
    ERRCODE_SSAP_UNKNOW = ERRCODE_SLE_SSAP_BASE + 0x03,                           /*服务端执行请求时发生未知错误*/
    ERRCODE_SSAP_INVALID_HANDLE = ERRCODE_SLE_SSAP_BASE + 0x04,                   /*请求中的句柄无效*/
    ERRCODE_SSAP_INSUFFICIENT_RESOURCES = ERRCODE_SLE_SSAP_BASE + 0x05,           /*服务端没有足够资源完成请求*/
    ERRCODE_SSAP_PROHIBIT_READING = ERRCODE_SLE_SSAP_BASE + 0x06,                 /*服务端禁止客户端读取值*/
    ERRCODE_SSAP_PROHIBIT_WRITE = ERRCODE_SLE_SSAP_BASE + 0x07,                   /*服务端禁止客户端写入值*/
    ERRCODE_SSAP_CLIENT_NOT_AUTHENTICATED = ERRCODE_SLE_SSAP_BASE + 0x08,         /*客户端未经过认证*/
    ERRCODE_SSAP_CLIENT_NOT_AUTHORIZATION = ERRCODE_SLE_SSAP_BASE + 0x09,         /*客户端未被授权*/
    ERRCODE_SSAP_BEARER_NOT_ENCRYPTED = ERRCODE_SLE_SSAP_BASE + 0x0A,             /*传输 PDU 的承载未加密*/
    ERRCODE_SSAP_ENTRIES_NOT_FOUND = ERRCODE_SLE_SSAP_BASE + 0x0B,                /*服务端未找到对应条目*/
    ERRCODE_SSAP_INVALID_METHOD_CALL = ERRCODE_SLE_SSAP_BASE + 0x0C,                   /*方法访问错误*/
    ERRCODE_SSAP_INCORRECT_DATA_TYPE = ERRCODE_SLE_SSAP_BASE + 0x0D,              /*客户端发送写入数据类型不符的错误*/
    ERRCODE_SSAP_INCORRECT_DATA_VALUE_LENGTH = ERRCODE_SLE_SSAP_BASE + 0x0E,             /*客户端发送写入值长度不符的错误*/
    ERRCODE_SSAP_VALUE_OUT_OF_RANGE = ERRCODE_SLE_SSAP_BASE + 0x0F,               /*客户端写入的值超出范围*/
    ERRCODE_SSAP_SUBCONTRACT_NOT_SUPPORT = ERRCODE_SLE_SSAP_BASE + 0x10,          /*服务端不支持信令的分包发送*/
    ERRCODE_SSAP_ATTRIBUTE_NUM_OVER_LIMIT = ERRCODE_SLE_SSAP_BASE + 0x11,         /*请求数量超出服务端的支持能力*/
    ERRCODE_SSAP_FRAGMENT_NUMBER_NOT_SUPPORT = ERRCODE_SLE_SSAP_BASE + 0x12,      /*服务端不支持信令分片序号功能*/
    ERRCODE_SSAP_SUBCONTRACT_NOT_FULLY_RECEIVE = ERRCODE_SLE_SSAP_BASE + 0x13,    /*服务端未接收所有分包*/
    ERRCODE_SSAP_TRANSACTION_NUM_NOT_SUPPORT = ERRCODE_SLE_SSAP_BASE + 0x14,      /*服务端不支持消息事务号*/
    ERRCODE_SSAP_RELIABLE_MODE_NOT_SUPPORT = ERRCODE_SLE_SSAP_BASE + 0x15,        /*服务端不支持可靠模式*/
    ERRCODE_SSAP_UPPERLAYER_APPLICATION_ERROR_MIN = ERRCODE_SLE_SSAP_BASE + 0xAF, /*预留给上层协议定义应用错误*/
    ERRCODE_SSAP_UPPERLAYER_APPLICATION_ERROR_MAX = ERRCODE_SLE_SSAP_BASE + 0xFF, /*预留给上层协议定义应用错误*/
} errcode_sle_ssap_t;

设置指令

AT+SSAPSSNDRESP=<conn_id>,<request_id>,<status>,<value_len>,<value>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <conn_id>:服务handle
  • <request_id>:请求id
  • <status>:发送响应原因
  • <value_len>:数据长度
  • <value>:数据

示例

AT+SSAPSSNDRESP=0,0,1,2,0x0200

注意

-

服务端注册回调

设置指令

AT+SSAPSREGCBK

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SSAPSREGCBK

注意

-

start service

设置指令

AT+SSAPSSTARTSERV=<service_handle>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

<service_handle>:服务handle

示例

AT+SSAPSSTARTSERV=1

注意

-

ssap client模块指令描述

注册SSAPC回调函数

设置指令

AT+SSAPCREGCBK

响应

  • 成功:OK
  • 失败:ERROR

参数说明

-

示例

AT+SSAPCREGCBK

注意

-

发现service

查找类型字段说明:

typedef enum {
    SSAP_FIND_TYPE_SERVICE_STRUCTURE = 0x00,     /*服务结构*/
    SSAP_FIND_TYPE_PRIMARY_SERVICE   = 0x01,     /*首要服务*/
    SSAP_FIND_TYPE_REFERENCE_SERVICE = 0x02,     /*引用服务*/
    SSAP_FIND_TYPE_PROPERTY          = 0x03,     /*属性*/
    SSAP_FIND_TYPE_METHOD            = 0x04,     /*方法*/
    SSAP_FIND_TYPE_EVENT             = 0x05,     /*事件*/
} ssap_find_type_t;

设置指令

AT+SSAPCFNDSTRU=<client_id>,<conn_id>,<type>,<uuid>,<start_hdl>,<end_hdl>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <type>:查找类型

    0:服务结构

    1:首要服务

    3:属性

示例

AT+SSAPCFNDSTRU=0,0,1,0x1234,0,0xff

注意

-

客户端向服务端写入数据

设置指令

AT+SSAPCWRITECMD=<client_id>,<conn_id>,<handle>,<type>,<len>,<write_data>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <handle>:属性handle
  • <type>:客户端类型,取值:0/1/3
  • <len>:写入数据长度
  • <write_data>:写入数据段

示例

AT+SSAPCWRITECMD=0,0,2,0,2,0x8899

注意

-

客户端向服务端发送写请求

设置指令

AT+SSAPCWRITEREQ=<client_id>,<conn_id>,<handle>,<type>,<len>,<write_data>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <handle>:属性handle
  • <type>:客户端类型,取值:0/1/3
  • <len>:写入数据长度
  • <write_data>:写入数据段

示例

AT+SSAPCWRITEREQ=0,0,2,0,2,0x8899

注意

-

客户端发起信息交换

设置指令

AT+SSAPCEXCHINFO=<client_id>,<conn_id>,<mtu_size>,<version>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <mtu_size>:ssap通道mtu

    最小值:251

    最大值:520

  • <version>:版本号

    0:BLE

    1:SLE

示例

AT+SSAPCEXCHINFO=0,0,251,1

注意

-

客户端通过uuid发送读请求

设置指令

AT+SSAPCREADBYUUID=<client_id>,<conn_id>,<uuid>,<type>,<start_hdl>,<end_hdl>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id
  • <conn_id>:连接id
  • <uuid>:uuid
  • <type>:客户端类型, 取值:0/1/3
  • <start_hdl>:开始handle
  • <end_hdl>:结束handle

示例

AT+SSAPCREADBYUUID=0,0,0x1234,0,0,0xFFFF

注意

-

客户端读取服务端属性数据

设置指令

AT+SSAPCREADREQ=<client_id>,<conn_id>,<handle>,<type>

响应

  • 成功:OK
  • 失败:ERROR

参数说明

  • <client_id>:客户端id(预留参数)
  • <conn_id>:连接id
  • <handle>:属性handle(连接成功后的回调里会打印)
  • <type>:客户端类型,取值:0/1/3

示例

AT+SSAPCREADREQ=0,0,2,0

注意

读数据时的handle需与写入数据时的handle一致

表 1 设备外观值一览表

设备外观

说明

BLE_APPEARANCE_UNKNOWN

0

None

BLE_APPEARANCE_GENERIC_PHONE

64

Generic category

BLE_APPEARANCE_GENERIC_COMPUTER

128

Generic category

BLE_APPEARANCE_GENERIC_WATCH

192

Generic category

BLE_APPEARANCE_WATCH_SPORTS_WATCH

193

Watch subtype

BLE_APPEARANCE_GENERIC_CLOCK

256

Generic category

BLE_APPEARANCE_GENERIC_DISPLAY

320

Generic category

BLE_APPEARANCE_GENERIC_REMOTE_CONTROL

384

Generic category

BLE_APPEARANCE_GENERIC_EYE_GLASSES

448

Generic category

BLE_APPEARANCE_GENERIC_TAG

512

Generic category

BLE_APPEARANCE_GENERIC_KEYRING

576

Generic category

BLE_APPEARANCE_GENERIC_MEDIA_PLAYER

640

Generic category

BLE_APPEARANCE_GENERIC_BARCODE_SCANNER

704

Generic category

BLE_APPEARANCE_GENERIC_THERMOMETER

768

Generic category

BLE_APPEARANCE_THERMOMETER_EAR

769

Thermometer subtype

BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR

832

Generic category

BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT

833

Heart Rate Sensor subtype

BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE

896

Generic category

BLE_APPEARANCE_BLOOD_PRESSURE_ARM

897

Blood Pressure subtype

BLE_APPEARANCE_BLOOD_PRESSURE_WRIST

898

Blood Pressure subtype

BLE_APPEARANCE_HUMAN_INTERFACE_DEVICE_HID

960

HID Generic

BLE_APPEARANCE_KEYBOARD

961

HID subtype

BLE_APPEARANCE_MOUSE

962

HID subtype

BLE_APPEARANCE_JOYSTICK

963

HID subtype

BLE_APPEARANCE_GAMEPAD

964

HID subtype

BLE_APPEARANCE_DIGITIZER_TABLET

965

HID subtype

BLE_APPEARANCE_CARD_READER

966

HID subtype

BLE_APPEARANCE_DIGITAL_PEN

967

HID subtype

BLE_APPEARANCE_BARCODE_SCANNER

968

HID subtype

BLE_APPEARANCE_GENERIC_GLUCOSE_METER

1024

Generic category

BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR

1088

Generic category

BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE

1089

Running Walking Sensor subtype

BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE

1090

Running Walking Sensor subtype

BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP

1091

Running Walking Sensor subtype

BLE_APPEARANCE_GENERIC_CYCLING

1152

Generic category

BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER

1153

Cycling subtype

BLE_APPEARANCE_CYCLING_SPEED_SENSOR

1154

Cycling subtype

BLE_APPEARANCE_CYCLING_CADENCE_SENSOR

1155

Cycling subtype

BLE_APPEARANCE_CYCLING_POWER_SENSOR

1156

Cycling subtype

BLE_APPEARANCE_CYCLING_SPEED_AND_CADENCE_SENSOR

1157

Cycling subtype

BLE_APPEARANCE_INVALID

65536

out of uint16_t

常用AT指令示例

BLE

配置server

  1. 使能BLE。

    AT+BLEENABLE
    [Acore] ble enable cbk in, event:c
    OK
    
    • 命令说明:使能BLE协议栈。

    • 打印说明:使能成功。

  2. 设置本地地址。

    AT+BLESETADDR=0,0x111111111112
    OK
    
    • 命令说明:配置BLE本地地址为0x111111111112,地址类型为公共设备地址。

      说明: 设备类型取值: 0:公共设备地址 1:随机设备地址 2:公共本端地址 3:随机静态本端地址

    • 打印说明:本地地址配置成功。设置完成后,可以使用AT+BLEGETADDR命令查看当前本地地址:

      AT+BLEGETADDR
      ble at cmd gap ble get local addr:
        0x11 0x11 0x11 0x11 0x11 0x12
      OK
      
  3. 设置本地设备名。

    AT+BLESETNAME=11,testnamesrv
    OK
    
    • 命令说明:设置设备名称,名称长度取值范围为[0,255],设备实际名称长度为len+1的字符串,名称最后默认存在’/0’。本例中,设置时名称后没有' ',读取设备名称显示名称后有' '。

    • 打印说明:设置成功。

      说明: 设置后可以通过命令验证是否设置成功:

      AT+BLEGETNAME
      ble at cmd gap ble get local name:testnamesrv
      OK
      
  4. 注册GAP回调函数。

    AT+BLEGAPREGCBK
    OK
    
    • 命令说明:注册GAP层回调函数。

    • 打印说明:注册成功。

  5. 注册一个GATT server。

    AT+GATTSREGSRV=0x1122
    [GAP service register][device name] handle: 0x0006, value handle: 0x0007
    [GAP service register][device appearance] handle: 0x0008, value handle: 0x0009
    [GAP service register][prefer conn param] handle: 0x000a, value handle: 0x000b
    [GATTServer]register server: 1
    OK
    
    • 命令说明:注册一个GATT服务端(sever),配置该服务端的UUID=0x1122。

    • 打印说明:GAP服务注册器自动注册一个Generic Access服务(包含device name、device appearance、prefer conn param三个chara),handle id从0x6开始,到0xb;然后GATT成功注册了一个server,server ID=1,sercer hdl=5。

  6. 注册 GATT 服务端回调函数

    AT+GATTSREGCBK
    OK
    
    • 命令说明:注册 GATT 服务端回调函数。

    • 打印说明:注册成功。

  7. 添加一个 GATT 服务(同步)

    AT+GATTSSYNCADDSERV=1,0x0012,1
    ble at gatts add service sync register srv_handle:14
    OK
    
    • 命令说明:在server id=1的server中注册一个服务,配置服务uuid=0x0012,该服务是首选服务。

    • 打印说明:成功添加了一个GATT服务(同步),服务句柄=14,服务句柄可用于后续对该服务进行操作。

  8. 为 GATT 服务添加一个特征(同步)

    AT+GATTSSYNCADDCHAR=1,14,0x122a,0x03,0x12,4,01010003
    [gatts_add_characteristic_sync] register handle:15, value_handle:16
    OK
    
    • 命令说明:向指定server(server ID=1)中指定的service(service handle=14)添加一个characteristic,这个特征的uuid=0x122a,权限是0x3(可读可写),property(特性)是0x12(通知特征值+读特征值),value的(最大)长度是4字节,value是0x01010003;(service handle来自于步骤5返回的数据)。

      说明: 权限参数取值范围: 0x01:可读 0x02:可写 0x04:需要加密 0x08:需要认证 0x10:需要授权 0x20:需要MITM保护

      说明: property(特性)参数取值范围: 0x01:广播特征值 0x02:读特征值 0x04:写特征值并且不需要响应 0x08:写特征值 0x10:通知特征值 0x20:指示特征值 0x40:签名写特征值 0x80:在特征扩展特性描述符中定义了附加的特征特性

    • 打印说明::添加characteristic成功,register handle=15,value handle=16

  9. 为最新的特征添加一个描述符(同步)。

    AT+GATTSSYNCADDDESCR=1,14,0x2902,0x03,2,0100
    [gatts_add_descriptor_sync] register descriptor handle:17
    OK
    
    • 命令说明:向指定server(server id=1)的指定service(service handle=14)的最新的characteristic添加一个描述符(descriptor),desc的uuid=0x2902,权限为0x03(可读可写),value长度2字节,value=0x0100;权限的取值与6中权限取值相同。

    • 打印说明:添加描述符成功,描述符的handle=17。

  10. 注册一个特性为可读可写且需要响应、允许指示且有两个描述符的特征;注册一个特性为可读可写且不需要响应,并允许指示的特征。

    AT+GATTSSYNCADDCHAR=1,14,0x122b,0x03,0x2a,4,01010003
    [gatts_add_characteristic_sync] register handle:18, value_handle:19
    OK
    AT+GATTSSYNCADDDESCR=1,14,0x2904,0x03,2,1110
    [gatts_add_descriptor_sync] register descriptor handle:20
    OK
    AT+GATTSSYNCADDDESCR=1,14,0x2905,0x03,2,2220
    [gatts_add_descriptor_sync] register descriptor handle:21
    OK
    AT+GATTSSYNCADDCHAR=1,14,0x122c,0x03,0x26,4,01010003
    [gatts_add_characteristic_sync] register handle:22, value_handle:23
    OK
    
  11. 启动指定的GATT 服务。

    AT+GATTSSTARTSERV=1,14
    [GATTServer]ServiceStartCallback server: 1 srv_hdl: 14 status: 0
    OK
    
    • 命令说明:启动指定GATT server(server id=1)中service handle=14的服务。

    • 打印说明:server 1中handle=14的服务启动成功。

    说明: 必须在start一个service后,才能添加新的service。

  12. 设置广播参数。

    AT+BLESETADVPAR=0x32,0x32,0,0x000000000000,0,0x000000000000,7,0,1,0,0x1
    [ACore] ble set adv param min_interval:0x32, max interval:0x32, adv_type:0, duration:0
    [ACore] ble set adv param, own addr:0x00:**:**:**:00:00
    [ACore] ble set adv param, peer addr:0x00:**:**:**:00:00
    AdvParamCallback adv_id: 1 status: 0
    OK
    
    • 命令说明:设置id=1的广播的发送参数。

    • 打印说明:广播参数设置成功。

  13. 设置广播数据。

    AT+BLESETADVDATA=0,0,0,0,1
    AdvDataCallback adv_id: 1 status: 0
    OK
    
    • 命令说明:设置指定广播(id=1)的发送数据。

    • 打印说明:广播1的发送数据设置成功。

  14. 发送广播。

    AT+BLESTARTADV=1
    [ACore] gap ble start adv in, adv_id:1
    AdvEnableCallback adv_id: 1, start success
    OK
    
    • 命令说明:开始发送id=1的BLE广播。

    • 打印说明:开始发送id=1的BLE广播,回调打印发送成功。

    说明: 使用nRF connect工具,与设备连接后,可以看到注册的服务,如图1所示。

    图 1 设备连接页面示意图

    须知: 后续步骤需要在client端发现了相应服务后执行才有效。

  15. 发送通知或指示。

    AT+GATTSSNDNTFY=1,0,16,7,0x00000000000014
    OK
    
    • 命令说明:让指定characteristic(hdl=16)向指定server(id=1)的指定连接(conn id=0)对端发送notify或indicate(取决与该characteristic的特性),内容为7字节的数据,数据内容为0x00000000000014。本例中,将指令的第三个参数设置为15或16均可以。

    • 打印说明:发送成功。

      说明: client端成功收到notify/indicate后,触发回调,会打印对应信息。 特征的特性是允许nofity时的打印:

      [GATTClient]Receive notification----client:1 conn_id:0
      handle:16 data_len:7
      data:00 00 00 00 00 00 14
      status:0
      

      说明: hdl=2的特征的特性是indicate,使用该命令会indicate。

      AT+GATTSSNDNTFY=1,0,2,4,0x00000001
      OK
      

      此时客户端的回调打印为:

      [GATTClient]Receive indication----client:1 conn_id:0
      handle:3 data_len:4
      data:00 00 00 00
      status:0
      
  16. 根据uuid发送通知或指示。

    AT+GATTSSNDNTFYBYUUID=1,0,0x122a,14,17,2,0x0101
    OK
    
    • 命令说明:让指定characteristic(uuid=0x122a,特性起始hdl=14,结束hdl=17)向指定server(id=1)的指定连接(conn id=0)对端发送notify或indicate(取决与该characteristic的特性),内容为7字节的数据,数据内容为0x00000000000014。

    • 打印说明:发送成功。

      说明: client端成功收到notify后,触发回调,会打印对应信息:

      [GATTClient]Receive notification----client:1 conn_id:0
      handle:16 data_len:2
      data:01 01
      status:0
      

      indicate方式与15一致。

配置client

  1. 使能BLE。

    AT+BLEENABLE
    [ACore] ble enable cbk in, event:c
    OK
    
    • 命令说明:使能BLE协议栈。

    • 打印说明:使能成功。

  2. 设置本地地址。

    AT+BLESETADDR=0,0x000000000002
    OK
    
    • 命令说明:与配置server时一样,配置BLE本地地址为0x111111111112,地址类型为公共设备地址。

    • 打印说明:本地地址配置成功。

  3. 注册GAP回调函数。

    AT+BLEGAPREGCBK
    OK
    
    • 命令说明:注册GAP层回调函数。

    • 打印说明:注册成功。

  4. 注册GATT客户端回调函数。

    AT+GATTCREGCBK
    OK
    
    • 命令说明:注册GATT客户端回调函数。

    • 打印说明:注册成功。

  5. 注册一个GATT client。

    AT+GATTCREG=0x1234
    [GATTClient] client: 1
    OK
    
    • 命令说明:注册一个GATT客户端(client),配置该客户端的UUID=0x1234。

    • 打印说明:成功添加了一个GATT客户端,它的client id=1(client id可用于后续对该client进行操作)。

  6. 与BLE设备连接。

    AT+BLECONN=0,0x111111111112
    [Connected] addr:12:**:**:**:11:11, conn_id:00 addr type 0
    conn_id: 0 conn_state: 1 pair_status: 1 addrtype 0 disc_reason 0
    [GATTClient]Mtu changed----client:1 conn_id:0 mtu size:23
    status:0
    OK
    
    • 命令说明:与指定地址的设备进行连接,对端地址类型为公共设备地址。

      说明: 设备类型参数取值范围: 0:公共设备地址 1:随机设备地址 2:公共本端地址 3:随机静态本端地址

    • 打印说明:与目标设备连接成功,连接id=0,连接状态=1,配对状态=1,并且双端交换了MTU信息。

      说明: 连接时,对端设备也会打印连接信息,server端还会终止广播,被终止的广播ID此时为1。

      [Connected] addr:02:**:**:**:00:00, conn_id:00 addr type 0
      [ACore] ble gap adv set terminated cbk event:9
      conn_id: 0 conn_state: 1 pair_status: 1 addrtype 0 disc_reason 0
      [GATTServer]ExchangeMtuReqReceiveCallback--server_id:1 conn_id:0
      req_mtu_size:23
      status:0
      AdvTerminateCallback adv_id: 1 status: 0
      
  7. 与对端设备发起配对。

    AT+BLEPAIR=0,0x111111111112
    OK
    PairCompleteCallback con_id: 0 status: 0
    PairCompleteCallback addr:12:**:**:**:11:11
    
    • 命令说明:与指定地址的设备进行配对,配对前双端设备必须已连接。

    • 打印说明:设备配对成功,回调打印配对成功的信息。

      说明: 配对成功后,对端设备也会触发回调,打印配对信息:

      PairCompleteCallback con_id: 0 status: 0
      PairCompleteCallback addr:02:**:**:**:00:00
      
  8. 发现服务。

    AT+GATTCFNDSERV=1,0,0x0012
    [GATTClient]Discovery service----client:1 conn_id:0
    start handle:14 end handle:21 uuid_len:2
    uuid:0012
    status:0
    [GATTClient]Discovery service complete----client:1 conn_id:0 uuid len:2
    uuid:0012status:0
    OK
    
    • 命令说明:在指定client(id=1)的指定连接(conn id=0)中发现UUID=0x0012的服务。

    • 打印说明:在指定client(id=1)的指定连接(conn id=0)中发现了UUID=0x0012的服务,服务的起始handle=14,最后handle=21,uuid的长度=2字节。后续的发现chara或者读、写操作需要用到handle信息。

  9. 发现特征。

    AT+GATTCFNDCHAR=1,0,14,0x122a
    [GATTClient]Discovery character----client:1 conn_id:0 uuid_len:2
    uuid:122a
    declare handle:15 value handle:16 properties:12
    status:0
    [GATTClient]Discovery character----client:1 conn_id:0 uuid_len:2
    uuid:122b
    declare handle:18 value handle:19 properties:2a
    status:0
    [GATTClient]Discovery character----client:1 conn_id:0 uuid_len:2
    uuid:122c
    declare handle:22 value handle:23 properties:26
    status:0
    [GATTClient]Discovery character complete----client:1 conn_id:0 uuid len:2
    uuid:0012
    service handle:29
    status:0
    OK
    
    • 命令说明:在指定client(id=1)的指定连接(conn id=0)的指定服务(server hdl=14)发现UUID=0x122a的特性。

    • 打印说明:在指定client(id=1)的指定连接(conn id=0)的指定服务(server hdl=14)发现了UUID=0x122a的特性,这个特性的declare hdl=15,value hdl=16,property =0x12(通知特征值+读特征值)。

    说明: 从回调打印信息中可以发现,该命令实际会发现指定服务的所有特性,本例中发现了server 14中uuid=122a和uuid=122b的特性。

    说明: 在该AT指令中,uuid填写service uuid 0x0012或者chara uuid 0x122a,都可以成功发现服务中的该服务(server hdl=14)中的charateristics:

    AT+GATTCFNDCHAR=1,0,14,0x0012
    [GATTClient]Discovery character----client:1 conn_id:0 uuid_len:2
    uuid:122a
    declare handle:15 value handle:16 properties:12
    status:0
    [GATTClient]Discovery character----client:1 conn_id:0 uuid_len:2
    uuid:122b
    declare handle:18 value handle:19 properties:2a
    status:0
    [GATTClient]Discovery character----client:1 conn_id:0 uuid_len:2
    uuid:122c
    declare handle:22 value handle:23 properties:26
    status:0
    [GATTClient]Discovery character complete----client:1 conn_id:0 uuid len:2
    uuid:0012
    service handle:55
    status:0
    OK
    
  10. 发现描述符。

    AT+GATTCFNDDESCR=1,0,15
    [GATTClient]Discovery descriptor----client:1 conn_id:0 uuid len:2
    uuid:2902
    descriptor handle:17
    status:0
    [GATTClient]Discovery descriptor complete----client:1 conn_id:0
    charatcer handle:65535
    status:0
    OK
    
    • 命令说明:在指定client(id=1)的指定连接(conn id=0)中发现指定特性(declare hdl=15)的所有描述符(一个特性从它的声明属性开始)。

    • 打印说明:在指定client(id=1)的指定连接(conn id=0)中发现了指定特性的所有描述符,这个特性包含一个描述符(hdl=17)。

    然后再发现第二个特征的所有描述符:

    AT+GATTCFNDDESCR=1,0,18
    [GATTClient]Discovery descriptor----client:1 conn_id:0 uuid len:2
    uuid:2904
    descriptor handle:20
    status:0
    [GATTClient]Discovery descriptor----client:1 conn_id:0 uuid len:2
    uuid:2905
    descriptor handle:21
    status:0
    [GATTClient]Discovery descriptor complete----client:1 conn_id:0
    charatcer handle:36882
    status:0
    OK
    
  11. 通过handle读取服务端信息。

    AT+GATTCREADBYHDL=1,0,16
    OK
    [GATTClient]Read result----client:1 conn_id:0
    handle:16 data_len:4
    data:01 01 00 03
    status:0
    
    • 命令说明:在指定client(id=1)的指定连接(conn id=0)中,请求读取srv端hdl=16的数据。

    • 打印说明:请求成功,读取到srv端的数据,读取结果返回了4字节长度的数据,数据内容为(0x)01 01 00 03。

    说明: 在此前的章节中,我们注册server时,系统自动注册了一个服务,其中一个chara是device name,它的值的handle=7,我们可以试着读取它。 读取成功的返回值是(0x)74 65 73 74 6e 61 6d 65 73 72 76,转换为ASCII码即**"**testnamesrv ",也就是此前在配置服务端时我们设置的设备名字。

    说明: srv端收到请求时,会有回调打印信息:

    [GATTServer]ReadReqReceiveCallback--server_id:1 conn_id:0
    request_id:7 handle:7 offset:0 need_authorize:0 need_rsp:1 is_long:0
    status:0
    

    说明: 使用命令时发现,(如此例)client端不需要先发现服务、特征等,即可进行读取请求并能成功。

  12. 通过UUID读取。

    AT+GATTCREADBYUUID=1,0,15,16,0x122a
    OK
    [GATTClient]Read result----client:1 conn_id:0
    handle:16 data_len:4
    data:01 01 00 03 
    status:0
    [GATTClient]Read by uuid complete----client:1 conn_id:0
    start handle:15 end handle:16 uuid len:2
    uuid:122a
    status:0
    
    • 命令说明:在指定client(id=1)的指定连接(conn id=0)的指定hdl区间内(hdl in [15,16])中,请求读取srv端uuid=0x122a的数据。

    • 打印说明:请求成功,读取到srv端的数据,读取结果返回了4字节长度的数据,数据内容为(0x)01 01 00 03 。

      说明: 这种读取方式srv端无回调打印。

  13. 写by hdl请求。

    AT+GATTCWRITEREQ=1,0,19,4,0xaabbccdd
    [GATTClient]Write result----client:1 conn_id:0 handle:19
    status:0
    OK
    
    • 命令说明:向指定client(id=1)的指定连接(conn id=0)的指定hdl(=19)发送写请求,请求写入4个字节的数据,数据值为0xaabbccdd,此时特征的特性必须包含0x8写特征值。

      说明: 特征注册时配置数据的长度也是改属性的固定长度,如果写入属性值的长度值小于或等于这个固定长度,则属性值中包括写入属性值长度的部分应被写入新的属性值,而剩下的部分应不被改动(例:如果原属性固定长度为4字节,value=0x01010003,当请求写入3字节的数据0xaabbcc时,写入成功后的值会是0xaabbcc03);如果写入属性值的长度值大于属性值的固定长度,则服务端会忽略该写入请求;srv端notify或indicate时不受固定长度限制。

    • 打印说明:写请求成功。

      说明: server端收到写请求,会有回调打印:

      [GATTServer]WriteReqReceiveCallback--server_id:1 conn_id:0
      request_id:22 handle:19 offset:0 need_authorize:0 need_rsp:1 is_prep:0
      data_len:4 data:
      aa bb cc dd
      status:0
      

      说明: 可以通过读取请求,验证写入是否成功:

      AT+GATTCREADBYHDL=1,0,19
      OK
      [GATTClient]Read result----client:1 conn_id:0
      handle:19 data_len:4
      data:aa bb cc dd
      status:0
      
  14. 写by hdl cmd(需要先注册一个特性包含0x4的特征)。

    AT+GATTCWRITECMD=1,0,23,3,0xaabbee
    [GATTClient]Write result----client:1 conn_id:0 handle:23
    status:0
    OK
    
    • 命令说明:向指定client(id=1)的指定连接(conn id=0)的指定hdl(=19)发送写请求,请求写入3个字节的数据,数据值为0xaabbee,此时特征的特性必须包含0x4,即写特征值并且不需要响应。

    • 打印说明:写请求成功。

      说明: server端收到写请求,会有回调打印:

      [GATTServer]WriteReqReceiveCallback--server_id:1 conn_id:0
      request_id:3 handle:23 offset:0 need_authorize:0 need_rsp:0 is_prep:0
      data_len:3 data:
      aa bb ee
      status:0
      

    说明: 通过读取请求,验证写入是否成功:

    AT+GATTCREADBYHDL=1,0,23
    OK
    [GATTClient]Read result----client:1 conn_id:0
    handle:23 data_len:4
    data:aa bb ee 03
    status:0
    

其他AT指令示例

扫描参数设置
  • 设置BLE扫描参数。

    AT+BLESETSCANPAR=0x48,0x48,0,1,0
    ScanParameterSetCompletedCallback status: 0
    OK
    

    命令说明:配置扫描间隔为0x48 * 0.625ms,扫描窗口为0x48 * 0.625ms,扫描类型为被动扫描,扫描LE 1M PHY,扫描过滤策略为接收所有广播(定向到其它设备的除外)。

    说明: 扫描phy参数取值范围: 0x0:无广播包 0x1:1M PHY 0x2:2M PHY 0x3:Coded PHY

    说明: 扫描过滤策略参数取值范围: 0x0:接收所有广播,不接收目标地址不是本设备地址的定向广播; 0x1:只接收白名单里设备的广播,不接收目标地址不是本设备地址的定向广播; 0x2:接收所有的非定向广播、地址是可解析私有地址的广播方发送的定向广播和发给该设备的定向广播; 0x3:接收白名单中的所有非定向广播、地址是可解析私有地址的广播方发送的定向广播和发给该设备的定向广播。

    打印说明:参数设置成功,回调打印。

开启扫描
  • 启动BLE扫描。

    AT+BLESTARTSCAN
    OK
    

    ScanResult primPhy: 1 secPhy: 0 event_type: 19 data_status: 0 data_len: 31, addr_type:0x1 addr:0xa6:2e:e5:07:59:58

    ScanResult primPhy: 1 secPhy: 0 event_type: 19 data_status: 0 data_len: 12, addr_type:0x1 addr:0x91:28:08:07:b6:d2

    ScanResult primPhy: 1 secPhy: 0 event_type: 19 data_status: 0 data_len: 30, addr_type:0x0 addr:0x5f:10:00:10:10:d8

    ScanResult primPhy: 1 secPhy: 0 event_type: 19 data_status: 0 data_len: 0, addr_type:0x0 addr:0x12:11:11:11:11:11

    命令说明:启动BLE扫描功能。

    打印说明:扫描启动成功,打印扫描结果到屏幕上。每一条打印数据中分别表示:主广播PHY类型(primPhy),辅广播PHY类型(secPhy),扫描结果广播类型(event_type),扫描结果数据状态,广播数据长度,广播地址类型,广播地址。

    说明: 扫描结果广播类型: 0x00:扩展的不可连接不可扫描非定向; 0x01:扩展的可连接非定向; 0x02:扩展的可扫描非定向; 0x04:扩展的不可连接不可扫描定向; 0x05:扩展的可连接定向; 0x06:扩展的可扫描定向; 0x10:传统的不可连接非定向; 0x12:传统的可扫描非定向; 0x13:传统的可连接可扫描非定向; 0x15:传统的可连接定向; 0x1A:传统的与ADV_SCAN_IND对应的扫描响应; 0x1B:传统的与ADV_IND对应的扫描响应。

    说明: 扫描结果广播类型: 0x00:完整数据或最后一个片段 0x01:不完整的数据 0x02:被截断不完整的数据

    说明: 启动BLE扫描后,扫描结果会刷屏。

SLE

配置server

  1. 使能SLE。

    AT+SLEENABLE
    OK
    
    • 命令说明:使能SLE协议栈。

    • 打印说明:使能成功。

  2. 设置SLE本地地址。

    AT+SLESETADDR=0,0x000000001111
    OK
    
    • 命令说明:使能SLE协议栈。

    • 打印说明:使能成功。

    说明: 可以使用AT+SLEGETADDR命令查看当前本地地址:

    AT+SLEGETADDR
    [SLE DD SDK] get addr: 00:00:00:00:11:11
    OK
    
  3. 设置本地设备名。

    AT+SLESETNAME=11,BLETESTNAME
    OK
    
    • 命令说明:设置设备名称

    • 打印说明:设置成功。

      说明: 可以使用AT+SLEGETNAME命令查看:

      AT+SLEGETNAME
      [SLE DD SDK] get name: BLETESTNAME
      OK
      

      与BLE中不同,SLE设置的设备名称后没有被添加' '。

  4. 服务端注册回调。

    AT+SSAPSREGCBK
    [AT] ssaps register cbks.
    OK
    
    • 命令说明:注册SLE服务端回调函数。

    • 打印说明:回调注册成功。

  5. 注册SLE服务端。

    AT+SSAPSADDSRV=0x1234
    ssaps register server handle (1).
    OK
    
    • 命令说明:注册SLE服务端,服务端uuid设置为0x1234;

    • 打印说明:服务端注册成功,服务端句柄=1。

  6. 添加service(同步)。

    AT+SSAPSSYNCADDSERV=0x2222,1
    ssaps add service sync handle (16), ret:0.
    OK
    
    • 命令说明:同步的方式添加一个service,service uuid=0x2222,1表示把这个服务注册为首要服务;

    • 打印说明:服务注册成功,服务句柄hdl=16。

  7. 添加属性(同步)。

    AT+SSAPSSYNCADDPROPERTY=16,0x2424,0x3,0xb,2,0x0101
    ssaps add property sync handle (17), ret:0.
    OK
    
    • 命令说明:同步方式为handle=16的service添加一个属性(property),属性的uuid=0x2424,属性权限为3(可读可写),操作指使=0xb(可读可写,写后无反馈,允许notify),数据长度=2字节,数据值=0x0101。

      说明: property permission参数取值范围: 0x1:可读 0x2:可写 0x4:需要加密 0x8:需要认证 0x10:需要授权

      说明: operate indication参数取值范围: 0x01:数据值可被读取; 0x02:数据值可被写入,写入后无反馈; 0x04:数据值可被写入,写入后产生反馈给客户端; 0x08:数据值通过通知方式传递给客户端; 0x10:数据值通过指示方式传递给客户端; 0x20:数据值可携带在广播中; 0x100:数据值说明描述符可被写入; 0x200:客户端描述符可被写入; 0x400:服务端述符可被写入; 0x7FF:操作指示最大值。

    • 打印说明:property添加成功,property handle=17。

  8. 添加属性描述符(同步)

    AT+SSAPSSYNCADDDESCR=16,17,0x2425,5,5,3,2,0x0100
    ssaps add descriptor sync ret (0).
    OK
    
    • 命令说明:为指定服务(handle=16)的指定属性(property handle=17)添加一个descriptor,descriptor的uuid=0x2425,描述符权限为5,操作指示为5(这两个参数的取值范围与步骤6中的一致);描述符类型为2,数据长度2字节,数据值=0x0100,表示notify。

      说明: 描述符类型参数取值范围: 0x00:特征值; 0x01:属性说明描述符; 0x02:客户端配置描述符; 0x03:服务端配置描述符; 0x04:格式描述符; 0x05~ 0x1F:服务管理保留描述符; 0xFF:厂商自定义描述符。

      说明: 属性描述符的value字段的值的含义: 0100:notify; 0200:indicate; 0 :不可向对端通知或指示。

    • 打印说明:descriptor添加成功

  9. 添加属性(同步)。

    AT+SSAPSSYNCADDPROPERTY=16,0x2525,0x3,0x15,2,0x0202
    ssaps add property sync handle (18), ret:0.
    OK
    

    命令说明:同步方式为handle=16的service再添加一个属性(property),属性的uuid=0x2525,属性权限为3(可读可写),操作指使=0x15(可读可写,写后有反馈,允许indicate),数据长度=2字节,数据值=0x0202。

  10. 添加属性描述符(同步)。

    AT+SSAPSSYNCADDDESCR=16,18,0x2526,5,0x15,2,2,0x0200
    ssaps add descriptor sync ret (0).
    OK
    

    命令说明:为指定服务(handle=16)的指定属性(property handle=17)添加一个descriptor,descriptor的uuid=0x2526,描述符权限为5,操作指示为5;描述符类型为2,数据长度2字节,数据值=0x020,表示indicate。

  11. 启动服务

    AT+SSAPSSTARTSERV=16
    [AT] ssaps start service cb server_id(1) handle(16) status(0).
    ssaps start_service handle:10, ret:0.
    OK
    
    • 命令说明:启动handle=16的service;

    • 打印说明:启动成功,server id=1,service handle=16。

  12. 设置SLE广播参数

    AT+SLESETADVPAR=1,3,200,200,0,000000001111,0,000000000000
    [ACore] sle set announce param, handle:1, mode:3, min_interval:c8, max_interval:c8, tx_power: 127
    [ACore] sle set announce param, own addr:0x00:**:**:**:11:11
    [ACore] sle set announce param, peer addr:0x00:**:**:**:00:00
    OK
    
    • 命令说明:设置广播参数,设置广播handle=1,handle的取值范围[0,0x10];设备为0x03 可连接可扫描状态,最小公开周期200 * 125μs,最大200×125μs,本端地址为公共设备地址,地址为0x000000001111,对端为公共设备地址,地址全0。

      说明: 设备公开类型参数取值范围: 0x00:不可连接不可扫描; 0x01:可连接不可扫描; 0x02:不可连接可扫描; 0x03:可连接可扫描; 0x07:可连接可扫描,定向。

      说明: 地址类型参数: 0:公有地址; 6:随机地址。

    • 打印说明:广播参数设置成功,打印了hdl=1的广播参数,其中tx_power: 127表示没有设置特定发射功率。

  13. 设置SLE广播数据。

    AT+SLESETADVDATA=1,10,4,aabbccddeeff11223344,11224455
    OK
    
    • 命令说明:设置handle=1的广播的发送数据,广播数据长度为10字节,扫描响应数据长度为4字节,广播数据=aabbccddeeff11223344,响应数据设置为11224455。

    • 打印说明:广播数据设置成功。

  14. 发送SLE广播:AT+SLESTARTADV=1

    AT+SLESTARTADV=1
    [ACore] sle start announce in, adv_id:1
    [ACore] sle adv cbk in, event:0 status:0
    [ACore] sle adv cbk in, event:1 status:0
    [ACore] sle adv cbk in, event:2 status:0
    [ACore] sle adv cbk in, event:3 status:0
    OK
    
    • 命令说明:开始发送id=1的SLE广播。

    • 打印说明:开始发送id=1的SLE广播。

    说明: 下方步骤需要在client端发现了相应服务后执行才有效。

  15. 服务端向客户端发送通知(NTF或IND)

    AT+SSAPSSNDNTFY=0,0x11,0,2,0x1010
    OK
    
    • 命令说明:指定连接(conn id=0)对端的客户端发送notify或indicate(由该property的特征的值决定),notify特定property(hdl=0x11)的数据,数据类型为0(见8的描述符类型),2字节数据,数据内容为0x0200。

    • 打印说明:发送成功。

      说明: client端成功收到notify后,回调触发,打印对应信息::

      [ssap client] notification info cbk client 0,handle:0x11, type:0x0, status:0x0
      ------------data-----------------
      10 10
      ---------------------------------
      

      说明: handle=0x12的property是允许indicate的,可以使用该命令进行indicate操作:

      AT+SSAPSSNDNTFY=0,0x12,0,2,0x2020
      OK
      

      此时对端触发indicate的回调,打印信息如下:

      [ssap client] indication info cbk conn_id 0,data_len:2, data_type:0x0, status:0x0
      

      说明: 触发哪种回调取决于发送方的property的权限配置(要允许notify或indicate)以及其描述符的值:

      • property允许notify时,该属性的描述符值需设置成0x0100;

      • property允许indicate时,该属性的描述符值需设置成0x0200。

  16. 根据uuid发送通知或指示。

    AT+SSAPSNTFYBYUUID=0,0x2424,16,17,0,2,0xaabb
    OK
    
    • 命令说明:指定连接(conn id=0)对端的客户端发送notify或indicate(由该property的特性决定),通知特定property(uuid=0x2424)的数据,数据类型为0(见8中的描述符类型),内容为2字节数据,数据内容为0x0200。本命令与SSAPSSNDNTFY效果相同。

    • 打印说明:发送成功。

      说明: client端成功收到notify后,回调触发,打印对应信息:

      [ssap client] notification info cbk client 0,handle:0x11, type:0x0, status:0x0
      ------------data-----------------
      aa bb
      ---------------------------------
      

      说明: property是允许indicate的,可以使用该命令进行indicate操作:

      AT+SSAPSNTFYBYUUID=0,0x2525,18,19,0,2,0xaabb
      OK
      

      此时对端触发indicate的回调,打印信息如下:

      [ssap client] indication info cbk conn_id 0,data_len:2, data_type:0x0, status:0x0
      

配置client

  1. 使能SLE。

    AT+SLEENABLE
    OK
    
    • 命令说明:使能SLE协议栈。

    • 打印说明:使能成功。

  2. 设置本地地址。

    AT+SLESETADDR=0,0X000000888888
    OK
    
    • 命令说明:设置本地地址。

    • 打印说明:设置完成成功。

      说明: 可以使用AT+SLEGETADDR命令查看当前本地地址,检验设置是否成功:

      AT+SLEGETADDR
      [SLE DD SDK] get addr: 00:00:00:88:88:88
      OK
      
  3. 注册SLE客户端回调。

    AT+SSAPCREGCBK
    [ssap client] client register cbk
    OK
    
    • 命令说明:注册SLE客户端回调(也注册了客户端)。

    • 打印说明:注册成功。

  4. 设置SLE默认连接参数。

    AT+SLESETDEFAULTCONNP=0,1,0x1,0x20,0x20,0x64,0x64,0x1FC
    OK
    
    • 命令说明:设置默认连接参数,配置为:不使能链路过滤,初始化扫描带宽为1(1表示1M,2表示2M),链路建立时进行G\T交互,扫描interval=0x20(最小允许0x14),扫描窗口为0x20,最大链路interval=0x64,最小链路interval=0x64,超时时间=0x1FC(单位:10ms)。

    • 打印说明:配置成功。

  5. 与 SLE 设备连接

    AT+SLECONN=0,0X000000001111
    OK
    [Connected]
    addr:00:**:**:**:11:11, handle:00
    
    • 命令说明:与地址为0X000000001111的设备建立连接;SLE建立连接的AT指令中,对端设备地址值必须是对端设备发送的广播中携带的本端地址值。

    • 打印说明:连接成功,连接hdl=0。

      说明: 连接建立后,server端也会打印了连接信息:

      [Connected]
      addr:00:**:**:**:88:88, handle:00
      [ACore] sle adv cbk in, event:7 status:0
      

      最后一行说明server端触发了广播事件回调(ID=1的广播停止了)。

  6. 进行加密配对。

    AT+SLEPAIR=0,0X000000001111
    OK
    
    • 命令说明:与地址为0X000000001111的设备加密配对,必须在连接建立后才能成功。

    • 打印说明:配对成功。

  7. 获取配对设备

    AT+SLEGETPAIRDEV
    [SLE CM SDK] get paired num: 1
    [SLE CM SDK] addr: 00:00:**:**:**:11
    OK
    
    • 命令说明:获取配对设备数目。

    • 打印说明:已配对设备数为1,并打印对端地址。

    说明: 另外,可以使用命令AT+SLEGETPAIREDNUM单独获配对设备数量信息:

    AT+SLEGETPAIREDNUM
    [SLE CM SDK] get paired num: 1
    OK
    
  8. 获取设备配对状态。

    AT+SLEGETPAIRSTA=0,0X000000001111
    [SLE CM SDK] state: 3
    OK
    
    • 命令说明:获取与地址为0X000000001111的设备的配对状态;

    • 打印说明:与该设备的已配对。

    说明: 配对状态值说明: 0x1:未配对 0x2:正在配对 0x3:已配对

  9. 获取绑定设备

    AT+SLEGETBONDDEV
    [SLE CM SDK] get bonded num: 1
    [SLE CM SDK] addr: 00:00:**:**:**:11
    OK
    
    • 命令说明:获取已绑定的设备信息。

    • 打印说明:当前已绑定设备数量为1,已绑定地址为 00:00:**:**:**:11的设备。

  10. 发现服务和property

    AT+SSAPCFNDSTRU=0,0,1,0x2222,0,0xff
    sle at cmd discovery structure type = 1, uuid_len = 2, start_hdl: 0x0, end_hdl: 0xff
    OK
    [ssap client] find structure cbk client: 0 conn_id:0 status: 0x0
    [ssap client] find structure structure start_hdl:[0x10], end_hdl:[0x12], uuid len:2
    [ssap client] structure uuid:[0x22][0x22]
    [ssap client] find structure complete cbk client: 0 conn_id:0 status:0x0, type:1
    
    • 命令说明:在指定client(id=0,服务端id默认为0,目前没有回调打印它)的指定连接(conn id/conn hdl=0,连接id或handle值是在建立连接时,由回调函数打印的,见步骤5)中发现一个structure uuid=0x2222的首要服务,搜索起始handle=0,搜索结束handle=0xff。本例中,目标服务是3.3.2.1 步骤6中的。

      说明: 服务类型参数取值范围: 0x00:SERVICE_STRUCTURE 服务结构 0x01:PRIMARY_SERVICE 首要服务 0x02:REFERENCE_SERVICE 引用服务 0x03:PROPERTY 属性 0x04:METHOD 方法 0x05:EVENT 事件

    • 打印说明:发现了目标structure,它的起始hdl=0x10,结束hdl=0x12,以及其他打印信息。

    说明: 通过将第三个参数设置为0x3,可以用这个命令发现属性:

    AT+SSAPCFNDSTRU=0,0,3,0x2424,0,0xff
    sle at cmd discovery structure type = 3, uuid_len = 2, start_hdl: 0x0, end_hdl: 0xff
    OK
    [ssap client] find property cbk client: 0 conn_id:0 status: 0x0
    [ssap client] find property hdl:[0x11]
    [ssap client] uuid:[0x24][0x24]
    [ssap client] descriptors[0]: type = 0x03
    [ssap client] find structure complete cbk client: 0 conn_id:0 status:0x0, type:3
    
    AT+SSAPCFNDSTRU=0,0,3,0x2525,0,0xff
    sle at cmd discovery structure type = 3, uuid_len = 2, start_hdl: 0x0, end_hdl: 0xff
    OK
    [ssap client] find property cbk client: 0 conn_id:0 status: 0x0
    [ssap client] find property hdl:[0x12]
    [ssap client] uuid:[0x25][0x25]
    [ssap client] descriptors[0]: type = 0x02
    [ssap client] find structure complete cbk client: 0 conn_id:0 status:0x0, type:3
    
  11. 通过uuid读取服务端信息。

    AT+SSAPCREADBYUUID=0,0,0x2424,0,0,0xff
    OK
    [ssap client] read cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x11
    ------------data-----------------
    01 01
    ---------------------------------
    [ssap client] read by uuid complete cbk client: 0 conn_id:0 status: 0x0. type:0x0
    [ssap client] read by uuid complete cbk start_hdl:[0x00], end_hdl:[0xff], uuid len:2
    [ssap client] uuid:[0x24][0x24]
    
    • 命令说明:请求读取指定client(id=0)的指定连接(conn hdl=0)中类型为0(见3.3.2.1 步骤8中的描述符类型)、uuid=0x2424的数据,搜索的hdl范围为[0, 0xff]。

    • 打印说明:请求成功,读取到srv端的数据,读取的值为0x0101。

      说明: srv端收到请求时,会有回调打印:

      [AT] ssaps read by uuid cb server_id(1) conn id(0)         begin handle(0x0000) end handle (0x00ff) status(0).
      [AT] ssaps read by uuid cb request_id(0) type(0) need_rsp(0) need_authorize(0).
      [AT] ssaps read by uuid cb uuid len(2) 37 be
      

    说明: 第四个参数设置为3,可以读取这个property的描述符的值:

    AT+SSAPCREADBYUUID=0,0,0x2424,3,0,0xff
    OK
    [ssap client] read cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x11
    ------------data-----------------
    01 00
    ---------------------------------
    [ssap client] read by uuid complete cbk client: 0 conn_id:0 status: 0x0. type:0x3
    [ssap client] read by uuid complete cbk start_hdl:[0x00], end_hdl:[0xff], uuid len:2
    [ssap client] uuid:[0x24][0x24]
    
  12. 通过hdl读取。

    AT+SSAPCREADREQ=0,0,0X12,0
    OK
    [ssap client] read cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x0
    ------------data-----------------
    02 02
    ---------------------------------
    
    • 命令说明:请求读取指定client(id=0)的指定连接(conn hdl=0)中hdl=0x12、类型为0(见8中的描述符类型)的数据。

    • 打印说明:请求成功,读取到srv端的数据,读取的值为0x0202。

      说明: srv端收到请求时,有回调触发,打印如下:

      [AT] ssaps read cb server_id(1) conn id(0) handle(18) status(0).
      [AT] ssaps read request cb request_id(0) type(0) need_rsp(0) need_authorize(0).
      

    说明: SSAPCWRITEREQ把第四个参数设置为2,可以读取该property的描述符的值:

    AT+SSAPCREADREQ=0,0,0x12,2
    OK
    [ssap client] read cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x0
    ------------data-----------------
    02 00
    ---------------------------------
    
  13. 发送写请求(req方式)。

    AT+SSAPCWRITEREQ=0,0,0x12,0,3,0x778899
    OK
    [ssap client] write cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x12
    ------------data-----------------
    77 88 99
    
    ---------------------------------
    
    • 命令说明:向指定client(id=0)的指定连接(conn id=0)的指定hdl(=0x12)发送写请求,向类型为0(见3.3.2.1 步骤8中的描述符类型)的条目请求写入3个字节的数据,数据值为0x778899。req方式下,目标property必须是包含0x4特性的(即允许写且写后有反馈)。

    • 打印说明:写请求成功。

      说明: server端收到写请求,有回调触发,打印如下:

      [AT] ssaps write cb server_id(1) conn id(0) handle(18) status(0).
      [AT] ssaps write cb request cb request_id(0) type(0) need_rsp(0) need_authorize(0).
      [AT] ssaps write cb request cb data len(3).
      ------------data-----------------
      77 88 99
      ---------------------------------
      

      说明: 可以通过读取请求,验证写入是否成功:

      AT+SSAPCREADREQ=0,0,0x12,0
      OK
      [ssap client] read cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x0
      ------------data-----------------
      77 88 99
      ---------------------------------
      
  14. 向服务端写入数据(cmd方式)。

    AT+SSAPCWRITECMD=0,0,0x11,0,3,0xaabbcc
    OK
    
    • 命令说明:命令说明:向指定client(id=0)的指定连接(conn id=0)的指定hdl(=0x11)发送写请求,向类型为0(见8中的描述符类型)的条目,写入3个字节的数据,数据值为0xaabbcc。cmd写方式下,目标property必须是包含0x2特性的(即允许写且写后无反馈)。

    • 打印说明:命令发送成功。

      说明: 对端有回调触发,打印如下:

      [AT] ssaps write cb server_id(1) conn id(0) handle(17) status(0).
      [AT] ssaps write cb request cb request_id(0) type(0) need_rsp(0) need_authorize(0).
      [AT] ssaps write cb request cb data len(3).
      ------------data-----------------
      aa bb cc
      ---------------------------------
      

      说明: 可以通过读取请求,验证写入是否成功:

      AT+SSAPCREADREQ=0,0,0x11,0
      OK
      [ssap client] read cfm cbk client: 0 conn_id:0 status: 0x0. handle:0x0
      ------------data-----------------
      aa bb cc
      ---------------------------------
      

其他AT指令示例

开启扫描
  • 开启扫描

AT+SLESTARTSCAN
OK
[adv_report] event_type: 0x03, addr_type: 0x00, addr: 00:3e:37:0f:01:00
[adv_report] data length: 36
[adv_report] event_type: 0x03, addr_type: 0x00, addr: 00:3e:37:0f:01:00
[adv_report] data length: 36
[adv_report] event_type: 0x03, addr_type: 0x00, addr: 00:01:09:07:b0:55

命令说明:开启SLE广播扫描。

打印说明:开启成功。打印扫描结果到屏幕上。每一条扫描结果占两行,第一行打印数据表示:扫描结果广播类型(event_type),广播地址类型,广播地址;第二行打印数据表示:广播数据长度。

说明: 需要使用指令:AT+SLEATCOMMONREGCBK注册SLE一般回调(包含广播和扫描回调),才能使扫描结果被打印出来。

说明: 扫描结果广播类型: 比特位 | 描述 0 | 可连接的GLE广播报文 connectable GLE adv packet 1 | 可扫描的GLE广播报文 scanable GLE adv packet 2 | 直接GLE报文 direct GLE packet 3 | 扫描响应报文 scan response packet 4 | 第一信道广播报文 first channel adv packet 5-6 | 数据状态 data status | 0b00,完整的广播报告 complete adv report | 0b01,不完整的广播报告,后续还有更多报文数据 incomplete adv report, more data is following | 0b10,不完整的广播报告,数据被截断 incomplete adv report, data is truncated | 0b11,RFU

说明: 启动SLE扫描后,扫描结果会刷屏。

新增AT指令方法

添加AT调试

AT调试支持TESTSUITE与AT共用一个串口切换使用,目前SDK默认关闭TESTSUITE,若默认开启,启动AT需要在TESTSUITE命令行输入

a testsuite_sw_at

如果需要修改默认使用的模式,修改application/bs21/bs21_acore/app_os_init.c 中AT任务的初始化,在下图框选位置追加如下内容:

AT调试串口的配置可以在middleware/chips/bs2x/at/at_bt_cmd/at/at_bt.h 中修改:

添加自定义命令

命令的添加涉及到两个文件,分别是“middleware/chips/bs2x/at/at_btc_cmd_table/at_btc_product.c”和“middleware/chips/bs2x/at/at_btc_cmd_table/at_bt_cmd_table.c”。

在at_btc_product.c添加AT命令执行的函数实体,以如下函数举例:

编写函数实体后,在at_bt_cmd_table.c文件的table表中注册相关AT命令:

注册结构体格式:

typedef struct {
    const char *name;    /*!< The name cannot be duplicate. */
    const uint16_t cmd_id;    /*!< The cmd_id cannot be duplicate. */
    const uint16_t attribute;
    const at_para_parse_syntax_t *syntax;
    at_cmd_func_t cmd;
    at_set_func_t set;
    at_read_func_t read;
    at_test_func_t test;
} at_cmd_entry_t;

表 1 自定义命令参数

参数

功能

name

AT指令名称。

cmd_id

指令ID号,不能重复。

attribute

标识符校验。

    标识该参数当前不支持。
    AT_SYNTAX_ATTR_NOT_SUPPORTED    = 0x0001,
    标识该参数可缺省,为保证参数顺序,缺省时‘,’不可缺省。
    AT_SYNTAX_ATTR_OPTIONAL         = 0x0002,
    该属性标识校验方式为最小值校验。
    AT_SYNTAX_ATTR_AT_MIN_VALUE     = 0x0004,
    该属性标识校验方式为最大值校验。
    AT_SYNTAX_ATTR_AT_MAX_VALUE     = 0x0008,
    该属性标识校验方式为白名单校验。
    AT_SYNTAX_ATTR_LIST_VALUE       = 0x0010,
    该属性标识校验方式为长度校验。
    AT_SYNTAX_ATTR_MAX_LENGTH       = 0x0020,
    该属性标识为该参数新增此参数的长度字段。
    AT_SYNTAX_ATTR_ADD_LENGTH       = 0x0040,
    该参数用于字符串,标识字符串支持大小写混合。
    AT_SYNTAX_ATTR_FIX_CASE         = 0x0080,
    该属性标识该参数已预设长度字段。
    AT_SYNTAX_ATTR_LENGTH_FIELD     = 0x0100

syntax

定义AT参数校验格式。

cmd

AT命令执行回调函数,eg:发送AT+TEST时回调。

set

AT设置执行回调函数,eg:发送AT+TEST=520时回调。

read

AT读取执行回调函数,eg:发送AT+TEST?时回调。

test

AT测试执行回调函数,eg:发送AT+TEST=?时回调。