前言¶
本文介绍BS2XV100的AT指令式及场景,为用户提供相应的指令格式和参数示例解释(本文档以BS21为例进行说明,后续不再备注说明)。
与本文档相对应的产品版本如下。
本文档主要适用于以下工程师:
技术支持工程师
软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
更新“服务端发送响应”章节内容。 |
||
|
||
|
||
更新“星闪读取远端rssi”章节内容。 |
||
|
||
指令说明¶
命令简介¶
AT命令用于TE(例如:PC等用户终端)和MT(例如:移动台等移动终端)之间控制信息的交互,如图1所示。
指令类型¶
AT指令类型如表1所示。
表 1 AT指令类型说明
注意事项¶
不是每一条指令都具备上述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所示。
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功能¶
表 1 AT测试说明
AT+HELP 查看当前可用AT命令¶
表 1 查看可用AT命令说明
AT+REBOOT¶
AT+SETSLEEP¶
|
|
AT+CACHESTATISTIC¶
|
|
AT+HEAPSTAT¶
AT+TASKSTACK¶
AT+TASKMALLOC¶
AT+WRITEREG¶
|
|
AT+READREG¶
|
|
AT+INTLOCKDUMP¶
|
osal_print_irq_record: type[0:lock, 1:unlock, 2:restore 3 enter 4 exit] |
|
AT+OSTIMERPRINT¶
|
[task]: taskId = %d, taskName = %s, taskStatus = %d [swtmr]: timerId = 0x%x, handler = 0x%x, interval = %d, state = %d |
|
需要打开OS_TIMER_DEBUG_SUPPORT,status对应的状态在los_task_base.h和los_swtmr_pri.h中查询 |
AT+OSDFXPRINT¶
AT+PMVETOINFO¶
AT+CPUP¶
需要LiteOS版本内打开宏LOSCFG_KERNEL_CPUP、LOSCFG_DEBUG_TASK、LOSCFG_DEBUG_HWI |
AT+GPIODEBUG¶
AT+UARTINONE¶
BT业务AT指令¶
BT业务AT指令一览表¶
BLE¶
gap模块AT命令¶
gatts模块AT命令¶
gattc模块AT命令¶
SLE¶
BT业务AT指令描述¶
BLE¶
gap模块AT命令¶
AT+BLEENABLE 使能ble协议栈¶
AT+BLEDISABLE 关闭ble协议栈¶
AT+BLESETADDR 设置本地设备地址¶
|
|
|
|
|
AT+BLEGETADDR 获取本地设备地址¶
|
|
AT+BLESETNAME 设置本地设备名称¶
|
|
|
|
AT+BLEGETNAME 获取本地设备名称¶
|
|
AT+BLESETAPPEARANCE 设置本地设备外观¶
|
|
参数值应为规定值,示例中961为键盘的外观值,具体请参考表1 |
AT+BLESETADVDATA 设置BLE广播数据¶
AT+BLESETADVPAR 设置广播数据参数¶
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+BLEUNPAIR 取消所有配对¶
|
|
AT+BLECONNPARUPD 更新连接参数¶
AT+BLECONN 与BLE设备连接¶
|
|
|
|
|
AT+BLEDISCONN 与BLE设备断开连接¶
|
|
|
|
|
AT+BLEGAPREGCBK 注册BLE回调函数¶
|
|
AT+BLESETDATALEN 设置发送数据包数据长度¶
|
|
|
|
AT+BLESETPHY 设置phy¶
AT+BLESETPHY=<conn_handle>,<all_phys>,<tx_phys>,<rx_phys>,<phy_options> |
|
|
|
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+GATTSADDDESCR=<server_id,service_handle,chara_uuid,permissions,value_len,value> |
|
|
|
|
|
AT+GATTSSYNCADDDESCR 为最新的特征添加一个描述符(同步)¶
AT+GATTSSYNCADDDESCR=<server_id,service_handle,chara_uuid,permissions,value_len,value> |
|
|
|
|
|
AT+GATTSSTARTSERV 启动指定的GATT服务¶
|
|
|
|
AT+GATTSDELALLSERV 删除指定server上的所有服务¶
|
|
AT+GATTSSENDRSP 发送响应¶
AT+GATTSSENDRSP=<server_id,conn_handle,request_id,status,offset,value_len,value> |
|
|
|
|
|
AT+GATTSSNDNTFY 发送通知或指示¶
AT+GATTSSNDNTFY=<server_id,conn_handle,attr_handle,value_len,value> |
|
|
|
|
|
AT+GATTSSNDNTFYBYUUID 根据uuid发送通知或指示¶
AT+GATTSREGCBK 注册GATT服务端回调函数¶
|
|
AT+GATTSSETMTU 在连接之前设置server rx mtu¶
|
|
|
|
gattc模块AT命令¶
AT+GATTCREG 创建一个GATT client¶
|
|
AT+GATTCUNREG 删除GATT client,释放资源¶
|
|
AT+GATTCFNDSERV 发现服务¶
|
|
|
|
AT+GATTCFNDCHAR 发现特征¶
|
|
|
|
AT+GATTCFNDDESCR 发现描述符¶
|
|
|
|
AT+GATTCREADBYHDL 读取by hdl¶
|
|
|
|
AT+GATTCREADBYUUID 读取by_uuid¶
AT+GATTCREADBYUUID=<client_id,conn_id,start_hdl,end_hdl,uuid> |
|
|
|
|
|
AT+GATTCWRITEREQ 写by hdl req¶
|
|
|
|
AT+GATTCWRITECMD 写by hdl cmd¶
|
|
|
|
AT+GATTCEXCHMTU 交换MTU请求¶
|
|
|
|
AT+GATTCREGCBK 注册GATT客户端回调函数¶
|
|
SLE¶
SLE Device Discovery模块指令描述¶
SLE使能¶
|
|
SLE去使能¶
|
|
设置SLE广播参数¶
设置SLE广播数据¶
起SLE广播¶
|
|
停SLE广播¶
|
|
设置扫描参数¶
|
|
使能扫描¶
|
|
关闭扫描¶
|
|
设置本端名称¶
|
|
获取本端名称¶
|
|
设置本端地址¶
|
|
|
|
获取本端地址¶
|
|
SLE Connection manager模块指令描述¶
建立SLE连接¶
当前只支持0、6两种,通常常用的类型是0。地址类型会校验,如果不匹配会返回错误。
|
|
星闪逻辑链路更新参数¶
星闪读取远端rssi¶
该命令的作用:读取当前SLE ACB 链路的RSSI信号强度,RSSI(Received Signal Strength Indicator)是接收信号的强度指示。
|
|
注册SLE连接模块和安全模块AT指令的串口打印回调函数¶
|
|
断开SLE连接¶
|
|
设置SLE PHY¶
默认1M 4M暂时不支持。
该命令作用:某些场景下需要高的传输速率,此时就通过设置tx_phy、rx_phy参数为2M。如果两端都支持2M,才能设置成功。
|
|
设置SLE 默认连接参数¶
SLE断开所有连接¶
|
|
SLE security management模块指令描述¶
进行加密配对¶
|
|
|
|
移除加密配对¶
|
|
获取配对设备数目¶
|
|
获取配对设备¶
|
|
获取设备配对状态¶
|
|
获取绑定设备¶
|
|
ssap server模块指令描述¶
注册服务端¶
|
|
去注册服务端¶
|
|
添加服务¶
注册成“次要服务”没什么影响。现在都是主要服务,次要服务的概念弱化了,因此通常情况下都是注册成主要服务。
|
|
添加服务同步¶
|
|
属性参数说明:
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+SSAPSSNDNTFY=<conn_id>,<handle>,<type>,<value_len>,<value> |
|
|
|
服务端向客户端通过uuid发送通知¶
AT+SSAPSNTFYBYUUID=<conn_id>,<uuid>,<start_hdl>,<end_hdl>,<type>,<value_len>,<value> |
|
|
|
服务端发送响应¶
发送响应原因说明:
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> |
|
|
|
|
|
服务端注册回调¶
|
|
start service¶
|
|
ssap client模块指令描述¶
注册SSAPC回调函数¶
|
|
发现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> |
|
|
|
客户端向服务端写入数据¶
AT+SSAPCWRITECMD=<client_id>,<conn_id>,<handle>,<type>,<len>,<write_data> |
|
|
|
|
|
客户端向服务端发送写请求¶
AT+SSAPCWRITEREQ=<client_id>,<conn_id>,<handle>,<type>,<len>,<write_data> |
|
|
|
|
|
客户端发起信息交换¶
|
|
客户端通过uuid发送读请求¶
AT+SSAPCREADBYUUID=<client_id>,<conn_id>,<uuid>,<type>,<start_hdl>,<end_hdl> |
|
|
|
|
|
客户端读取服务端属性数据¶
|
|
|
|
表 1 设备外观值一览表
常用AT指令示例¶
BLE¶
配置server¶
使能BLE。
AT+BLEENABLE [Acore] ble enable cbk in, event:c OK
命令说明:使能BLE协议栈。
打印说明:使能成功。
设置本地地址。
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
设置本地设备名。
AT+BLESETNAME=11,testnamesrv OK
命令说明:设置设备名称,名称长度取值范围为[0,255],设备实际名称长度为len+1的字符串,名称最后默认存在’/0’。本例中,设置时名称后没有' ',读取设备名称显示名称后有' '。
打印说明:设置成功。
说明:
设置后可以通过命令验证是否设置成功:AT+BLEGETNAME ble at cmd gap ble get local name:testnamesrv OK
注册GAP回调函数。
AT+BLEGAPREGCBK OK
命令说明:注册GAP层回调函数。
打印说明:注册成功。
注册一个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。
-
AT+GATTSREGCBK OK
命令说明:注册 GATT 服务端回调函数。
打印说明:注册成功。
添加一个 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,服务句柄可用于后续对该服务进行操作。
为 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
为最新的特征添加一个描述符(同步)。
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。
注册一个特性为可读可写且需要响应、允许指示且有两个描述符的特征;注册一个特性为可读可写且不需要响应,并允许指示的特征。
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
启动指定的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。设置广播参数。
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的广播的发送参数。
打印说明:广播参数设置成功。
设置广播数据。
AT+BLESETADVDATA=0,0,0,0,1 AdvDataCallback adv_id: 1 status: 0 OK
命令说明:设置指定广播(id=1)的发送数据。
打印说明:广播1的发送数据设置成功。
发送广播。
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所示。
须知:
后续步骤需要在client端发现了相应服务后执行才有效。-
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
根据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¶
使能BLE。
AT+BLEENABLE [ACore] ble enable cbk in, event:c OK
命令说明:使能BLE协议栈。
打印说明:使能成功。
设置本地地址。
AT+BLESETADDR=0,0x000000000002 OK
命令说明:与配置server时一样,配置BLE本地地址为0x111111111112,地址类型为公共设备地址。
打印说明:本地地址配置成功。
注册GAP回调函数。
AT+BLEGAPREGCBK OK
命令说明:注册GAP层回调函数。
打印说明:注册成功。
注册GATT客户端回调函数。
AT+GATTCREGCBK OK
命令说明:注册GATT客户端回调函数。
打印说明:注册成功。
注册一个GATT client。
AT+GATTCREG=0x1234 [GATTClient] client: 1 OK
命令说明:注册一个GATT客户端(client),配置该客户端的UUID=0x1234。
打印说明:成功添加了一个GATT客户端,它的client id=1(client id可用于后续对该client进行操作)。
与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
与对端设备发起配对。
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
发现服务。
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信息。
发现特征。
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
发现描述符。
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
通过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端不需要先发现服务、特征等,即可进行读取请求并能成功。通过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端无回调打印。
写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
写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¶
使能SLE。
AT+SLEENABLE OK
命令说明:使能SLE协议栈。
打印说明:使能成功。
设置SLE本地地址。
AT+SLESETADDR=0,0x000000001111 OK
命令说明:使能SLE协议栈。
打印说明:使能成功。
说明:
可以使用AT+SLEGETADDR命令查看当前本地地址:AT+SLEGETADDR [SLE DD SDK] get addr: 00:00:00:00:11:11 OK
设置本地设备名。
AT+SLESETNAME=11,BLETESTNAME OK
命令说明:设置设备名称
打印说明:设置成功。
说明:
可以使用AT+SLEGETNAME命令查看:AT+SLEGETNAME [SLE DD SDK] get name: BLETESTNAME OK
与BLE中不同,SLE设置的设备名称后没有被添加' '。
服务端注册回调。
AT+SSAPSREGCBK [AT] ssaps register cbks. OK
命令说明:注册SLE服务端回调函数。
打印说明:回调注册成功。
注册SLE服务端。
AT+SSAPSADDSRV=0x1234 ssaps register server handle (1). OK
命令说明:注册SLE服务端,服务端uuid设置为0x1234;
打印说明:服务端注册成功,服务端句柄=1。
添加service(同步)。
AT+SSAPSSYNCADDSERV=0x2222,1 ssaps add service sync handle (16), ret:0. OK
命令说明:同步的方式添加一个service,service uuid=0x2222,1表示把这个服务注册为首要服务;
打印说明:服务注册成功,服务句柄hdl=16。
添加属性(同步)。
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。
-
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添加成功
添加属性(同步)。
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。
添加属性描述符(同步)。
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。
启动服务
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。
设置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表示没有设置特定发射功率。
设置SLE广播数据。
AT+SLESETADVDATA=1,10,4,aabbccddeeff11223344,11224455 OK
命令说明:设置handle=1的广播的发送数据,广播数据长度为10字节,扫描响应数据长度为4字节,广播数据=aabbccddeeff11223344,响应数据设置为11224455。
打印说明:广播数据设置成功。
发送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端发现了相应服务后执行才有效。服务端向客户端发送通知(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。
根据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¶
使能SLE。
AT+SLEENABLE OK
命令说明:使能SLE协议栈。
打印说明:使能成功。
设置本地地址。
AT+SLESETADDR=0,0X000000888888 OK
命令说明:设置本地地址。
打印说明:设置完成成功。
说明:
可以使用AT+SLEGETADDR命令查看当前本地地址,检验设置是否成功:AT+SLEGETADDR [SLE DD SDK] get addr: 00:00:00:88:88:88 OK
注册SLE客户端回调。
AT+SSAPCREGCBK [ssap client] client register cbk OK
命令说明:注册SLE客户端回调(也注册了客户端)。
打印说明:注册成功。
设置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)。
打印说明:配置成功。
与 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的广播停止了)。
进行加密配对。
AT+SLEPAIR=0,0X000000001111 OK
命令说明:与地址为0X000000001111的设备加密配对,必须在连接建立后才能成功。
打印说明:配对成功。
获取配对设备
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
-
AT+SLEGETPAIRSTA=0,0X000000001111 [SLE CM SDK] state: 3 OK
命令说明:获取与地址为0X000000001111的设备的配对状态;
打印说明:与该设备的已配对。
说明:
配对状态值说明:
0x1:未配对
0x2:正在配对
0x3:已配对 获取绑定设备
AT+SLEGETBONDDEV [SLE CM SDK] get bonded num: 1 [SLE CM SDK] addr: 00:00:**:**:**:11 OK
命令说明:获取已绑定的设备信息。
打印说明:当前已绑定设备数量为1,已绑定地址为 00:00:**:**:**:11的设备。
发现服务和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
通过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]
通过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 ---------------------------------
发送写请求(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 ---------------------------------
向服务端写入数据(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 自定义命令参数








