最新消息:

Application Note of BM89 Module

BM89 wkadmin 880浏览 0评论


Application Note of BM89 Module

 

 

Version History

 

Date Revision Description
2016-10-31 V0.1 Initial
2016-11-25 V0.2 完善pin脚功能描述

 

 

Description

该文档介绍怎么使BM89建立蓝牙连接,并配置BM89,使用BM89进行数据传输.

BM89能够自动检测 SPP 还是 BLE 连接,同一时刻只支持一个连接,一旦被连接上,设备就会进入不可发现不可连接的状态.

1.1. BT 状态定义

1. Standby Mode: 在该状态下,BM89处于可被发现可被连接的状态.

Classic Bluetooth (BR/EDR): 可以被发现被连接.

Bluetooth Low Energy: 发送the Undirected Advertising 的广播包.

2. Linked Mode: BM89 被手机连接上了

Classic Bluetooth (BR/EDR): BM89 SPP通道进行数据传送.

Bluetooth Low Energy: BM89使用GATT service进行数据传送.

1.2. BM89工作模式定义

  • At command state: BM89在没有建立连接,并且没有进入深度睡眠的情况下,可以接收AT command,具体支持的AT command在后面的章节中描述.
  • Access State: BM89正在跟手机建立连接,但是真正的双向数据通道还未准备好(该状态只存在在BLE连接中)(P12 is L).
  • Linked State: BM89已经准备好了双向数据通道(P12/P13 is L/L).

2. 功能介绍

2.1. 支持的蓝牙Profiles

  • 支持 Bluetooth v3.0+EDR and Bluetooth v4.1 Low Energy
  • 蓝牙3.0包含: GAP, SPP, SDP, RFCOMM and L2CAP. BM89默认是从设备.
  • 蓝牙4.1: GAP, GATT, ATT, SMP and L2CAP. BM89 默认是周边设备,预定义透传service,默认uuid的定义见下面的章节。但是支持uuid通过AT command进行修(具体参考AT command列表中AT#U的格式和定义)
  • 支持blespp表现为两个地址两个名称,也可以表现为同一个地址和名称,具体由AT command配置,默认是两个地址和名称

 

2.2. uart 特性

uart波特率支持从 300
115200 bits/s 的常用波特率. 超出该范围的波特率要求可以联系我们进行客制化,这个是目前的默认配置范围)

  • 默认波特率: 115200
  • 串口特性: 8 bit, 1个停止位, 没有奇偶校验,流控默认不打开,但是可配置打开

2.3. 低功耗

蓝牙3.0支持Sniff mode以及sleep mode.

蓝牙4.1支持sleep mode,BLE的Connection parameters能够被central设备更新.

 

Sleep模式

上电后30s的时间内,不会进入睡眠状态;

超过30s后,如果串口上没有数据超过10s就会进入睡眠;

如果当前蓝牙处于连接状态,如果超过5s没有任何的数据交互,也会进入睡眠;

在睡眠状态下,任何时候都可以被蓝牙远端唤醒;

在睡眠状态下,可以被WAKEUP(P11)脚的下降沿信号唤醒;

在睡眠模式下,P10脚会被拉高;

只要WAKEUP(P11)脚维持拉低的状态,就不会进入睡眠;

如果当前在睡眠模式下,上位机如果要发送数据的话,可以先拉低WAKEUP(P11)脚,直到P10脚恢复拉抵(从WAKEUP(P11)拉低到P10恢复拉低的时间小于300us),此时可以外部MCU可以通过串口发送数据给BM89,否则串口数据会丢包。

 

2.4. 安全

BM89支持安全配对和非安全配对,具体的可以用AT command来配置

SPP的安全连接

  1. 简单配对,不需要输入密码,但是链路是安全的;à默认是这种方式
  2. 密码配对,需要输入密码;àAT#P[len][pass] 设置配对密码, AT#P0取消密码配对,回复简单配对;

BLE安全连接

  1. 默认是不需要配对的,无安全,空中数据是明文传递的;
  2. 简单的配对àAT#A11 设置需要配对,AT#A10取消配对,空中数据经过加密,一般无法被攻击截取;
  3. 输入密码配对àAT#p[len][pass] 设置密码配对,空中数据经过加密,比2)的方式更加难于被攻击;

2.5. Utility features

2.5.1 连接状态的脚位指示以及串口数据处理方法

 

  • AT command(power on/standby) 模式:在该模式下,串口接收到的数据会被当做ATcommand来解析,如果合法将被执行指令相应的设置操作,并且返回操作的结果,设置的属性会被保存起来,一次设置永久生效。具体支持哪些指令以及指令的使用方式请参考AT command的列表文档。如果BM89在power on以及standby状态的时候,它自动工作在AT command 模式下;
  • 透传(linked)模式: 在透传模式下,串口接收到的数据会被原封不动的发送到蓝牙远端。如果已经被连接的话,则自动进入透传模式;
  • access的状态:这是个针对ble的模式,表示蓝牙链接已经建立,但是对端还没有准备好接收数据,在这个阶段,串口上的数据,既不能作为AT command也不能传递给对方,所以会做丢弃处理;access状态存在的时间由手机端的连接上BM89到修改Tx特征的client configuration的描述符为1之间的时间决定。也可以理解为只要Tx特征的client configuration为1的时候才能实现双向传输,否则只能是单向的从手机往BM89的传输。

 

2.5.2 睡眠与唤醒

是否要支持睡眠的功能可以通过AT 指令配置(睡眠:AT#W11 不睡眠:AT#W10 )

P10开机初始化为高的状态,当正常初始化完成后引脚拉低。进入睡眠状态时引脚拉高,被唤醒后P10恢复拉低。

Wakeup脚下降沿触发唤醒,从下降沿到真正唤醒耗时不大于300us。

如果wakeup脚悬空,或者维持拉高的状态,那么P10脚将会出现不等距的方波波形,因为为了维持广播或者连接,需要周期性的睡眠和自己唤醒,但是这个周期是动态计算的,更广播周期和连接间隔等参数有关系,不是一个确切的固定的时间。

如果wakeup脚一直维持拉低的状态,将不会进入睡眠。

 

2.5.3 强制断开所有连接

P24可以用来给host MCU强制断开连接用, 该脚默认是H, 如果被拉低超过10ms的话,就会被认为要断开连接, BM89进入standby 模式。当然如果当前本来就是在standby模式下的话,该脚的状态会被忽略不处理。

2.5.4 BM89唤醒host MCU

当用AT#H1[n] 1<n<10 的时候,每次收到远端的数据,在准备发往host MCU的时候,会先拉高P33脚,然后做一个n ms的延时,再把数据放到uart的上。

这个功能一般用在host MCU需要BM89去唤醒的时候。默认n = 0,所以P33不会有拉高拉低的动作,收到远端的数据的时候,会立即放到uart上。

2.5.5 AT Command格式说明

命令:

AT#[code][param len][param]

code            must     命令码

param len        optional    命令参数的长度,以字节为单位,字符,比如’1’的内码是31,’1’就表示后面参数长度为1个字节,根据code,这个字段可能有,也可能没有,有的话,可能占两个字节也可以占一个字节,视具体的命令而定,具体参见AT command的表格;

param        optional 命令的具体参数,如果param len为’0’,则不需要改字段,如果param len大于’0’,则该字段占用param len个字节。Param编码方式,根据命令不同也有不同,具体参考AT command的表格

命令返回:

AT##0    命令正确解析并保存设置

AT##F    命令的长度或者参数不合法,执行失败

AT##[code] [param len][param]    部分读取配置值的命令会有这样的返回格式, 各个字段的意义同命令的格式

2.6. GATT 透传服务以及特征的默认UUID

uuid name properties description
49535343-FE7D-4AE5-8FA9-9FAFD205E455 透传Service
49535343-1E4D-4BD9-BA61-23C647249616 Tx 特征 notify 数据从BM89发往远端
2902 Tx 特征的Client configuration描述符 Read/write 默认值为0,此时不会执行notify的动作,也就是不能将数据从BM89发往手机端.手机端应用需要将这个描述符的值写为1以后,才能表示手机已经准备好了接收notify的数据,所以BM89也就可以想手机notify数据了
49535343-8841-43F4-A8D4-ECBE34729BB3 Rx 特征 write 手机往BM89发送数据的特征

 

2.8. BM89 pin description

pin description
P12

BM89连接状态指示脚

H 没有任何连接存在.

L 模块已经被手机连接上。

P13

BM89 Rx状态指示脚(改脚只是在ble的连接状态下有意义,在SPP连接下它跟P12是同时变化的)

Hà远端还没有准备好接收数据,此时host MCU发往串口的数据将会被丢弃;

Là远端已经准备好了接收数据,此时host MCU发往串口的数据会被当做数据发往远端;

P11(WAKEUP) 输入脚。

下降沿有效,如果在正常启动后,P10脚拉高了,则host MCU在发送数据之前需要先给这个脚一个下降沿信号,等到P10恢复拉低后,才能往串口发送数据,否则数据会被丢失。

P15(LED) 低电平的时候灯亮,高电平灯灭;

Standby的时候,灯闪烁,如果进入了sleep,停止闪烁,如果被唤醒,回复闪烁;

Linked的时候,拉低,灯常亮;

P10 输出,上电默认拉高,初始化完成后拉低。如果进入sleep则拉高,唤醒拉低
P20 输出

拉高:表示模块正在发送数据到远端;

拉低:表示发送完成;

host MCU需要连续发送数据,中间没有对端的confirm的话,需要用该脚来判断前一包数据是否发送完成,防止数据累积后发生溢出而丢包。

P33 输出,拉高表示有数据要发送给host MCU,拉低表示数据发送完。

在设置(AT#H1[n ms])了延时发送到host后,如果<n<10每次串口发送数据之前会先拉高该脚,然后等待n ms,发送数据到串口,发送完成拉低;如果n==0
P33一直保持拉低的状态;该脚可以用于元端唤醒host MCU的情况默认这个n的值是0,所以该脚不会产生波形。

P24 断开所有的连接,输入

Default: H

如果拉低超过10ms的话,就会断开所有的连接,使模块计入standby的模式

RESET BM89 reset
P06(Tx)&P07(Rx) 串口,交叉连接到host MCU的串口Rx&Tx上。
P36(CTS)&P35(RTS) 默认没有打开流控,可以通过AT command打开.

打开流控:AT#F11

关闭流控:AT#F10

流控电平都是低电平有效。

RTS 输出

表示模块准备好了,可以接收数据



表示模块当前不能接收数据

CTS 输入

表示MCU准备好了,可以发送数据到MCU



表示MCU没有准备好,
不能发送数据到MCU

P14 NC(无功能,悬空或者拉高)

 

注:

BM89串口接收缓冲最大1.7K1792)字节,所以hostMCU一包最大只能发送1791个字节,否则会出现溢出的情况。或者串口打开流控,以防止溢出;

BM89接收从远端过来的数据,一包数据最大的缓冲也是1.7K1792),所以手机端发送大数据的时候,最大不能超过这个大小,比如说ble可以采用发送long数据的方式发送,但是这个数据的长度不能超过1792的长度,否则超过部分将会被丢弃;

转载请注明:BT + WIfi 技术交流文档 » Application Note of BM89 Module

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
加载中