最新消息:

Application Note of BM88(带天线) Module ver11(中文)

BM88 wkadmin 3666浏览 0评论

Application Note of BM88Module

 

 

 

 

 

 

Version History

 

Date Revision Description
2015-7 V0.1 Initial
2015-7-23 V0.2 Add test mode
2015-08-03 V0.3 Add configurable mode and drop link feature
2015-08-07 V0.4 Add bard rate
2015-08-10 V0.5 Add passward set
2015-08-20 V0.6 It is in AT command mode when BM88 is not linked, it is raw data transfer mode when BM88 is linked.

Add support sleep mode for BM88, default it will enter deep sleep mode after 10s no data transfer.If it enter sleep mode ,BM88 can be wakeup by uart.2015-08-24V0.7Add AT command to config the ble UUID mode.

AT#U11 uuid mode 1

AT#U12 uuid mode 22015-08-25V0.8Add ble authentication rand&ediv management。

Add firmware version manage, and AT command to get firmware version.2015-08-31V0.9Add discoverable set, get mac address, set ibeacon info2015-09-02V1.0Add gpio to indicate the bm88 start normally;

Add gpio to indicate that the bm88 is accessed by phone, other phone can’t connect it;

Remove the Tx indicate of PA4.modify it indicate connection. 2015-09-22V1.1Ble连接默认需要加密;

增加可配置的无安全连接方式;

增加可配置的大功率调整;

 

 

Description

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

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

1.1. BT 模式定义

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

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

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

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

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

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

1.2. BM88状态定义

  • At command state: BM88在没有建立连接,并且没有进入深度睡眠的情况下,可以接收AT command,具体支持的AT command在后面的章节中描述.
  • Access State: BM88正在跟手机建立连接,但是真正的双向数据通道还未准备好(PA4 is L).
  • Linked State: BM88已经准备好了双向数据通道(PA3/PA4 is L/L).
  • Lower Power State: 如果在Linked state下超10s没有数据交互,或者在standby模式下,并且是慢速广播的时候超过10s没有建立连接, BM88就会进入低功耗的模式(bm88支持三种低功耗模式: deep sleep, sleep mode(default), mix sleep mode).任何一种低功耗模式, BM88都能够被手机端发送的数据,或者尝试连接来唤醒.

    BM88上电并正常启动后,它处在一个快速广播的状态,在这种状态下,BM88不会进入睡眠的。30s以后, 会进入慢速广播,此时如果超过10s没有建立连接的话, BM88就会进入低功耗模式.

    deep sleep mode:

    这种模式下,功耗最低,但是wakeup脚必须要连接到host MCU。如果PA4 LPA3H, 并且Host MCU想要发送数据的话, 需要先拉低WAKEUP脚去唤醒 BM88.如果PA3/PA4H/H的话,表示BM88standby的状态或者慢速广播低功耗状态下. 如果PA3/PA4H/L的话,表示 BM88处在已连接低功耗状态下.

    Sleep mode:

    在这种模式下,BM88能够被串口数据唤醒,但是这种模式的功耗会比deep sleep mode6mA左右,是功耗最高的一种模式.

        Mix sleep mode :

    在此模式下,如果BM88没有建立连接,则会自动进入deep sleep mode,如果已经连接上了,则会进入sleep mode。使用这种模式,可以不用连接wakeup脚,同时又能降低待机时的功耗,它在引脚资源和功耗之间做了一个折衷。

    到底使用哪一种低功耗模式,可以用AT command来配置,默认是sleep mode。但是最终产品中,建议设置成Mix sleep mode,因为在一般的应用场景下,未连接的状态时,host MCU不会往模块发送数据,除了AT command,所以此时不需要考虑唤醒模块的问题。

 

1.3. BM88状态流程图


2. 功能介绍

2.1. 支持的蓝牙Profiles

  • 支持 Bluetooth v3.0+EDR and Bluetooth v4.0 Low Energy
  • 蓝牙3.0包含: GAP, SPP, SDP, RFCOMM and L2CAP. BM88是从设备.
  • 蓝牙4.0: GAP, GATT, ATT, SMP and L2CAP. BM88 是周边设备,是个server.

 

2.2. uart特性

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

  • 默认波特率: 115200
  • 串口特性: 8 bit, 1个停止位, 没有奇偶校验,无流控

2.3. 低功耗下的连接特性

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

蓝牙4.0支持sleep mode,BLE的Connection parameters能够被central设备更新.只有当连接参数大于 0x80(unit:1.25ms)的时候,BLE的连接下,才能进入sleep mode.

 pin PA4 (连接指示脚) 和PA3(Rx指示脚)可以用来保证tx/rx的数据传送:

PA3: Hà此时,如果host MCU发送数据,BM88怎么处理,需要看PA4的状态:

PA4: H à PA3/PA4(H/H) 此时如果不在deep sleep或者mix sleep mode (开机后的30s+10s的时候内,或者断开连接后的10s内,不会睡眠)模式下,则接收到的数据会被当做AT command来处理的;如果在sleep mode或者,会唤醒BM88,并且数据被当做AT command来处理。

PA4:L àPA3/PA4(H/L) 连接状态下进入了低功耗了,此时要看低功耗的模式:如果是模式1和3,则host MCU可以直接发送数据唤醒BM88,数据不会丢失;如果是模式2的话,需要通过wakeup的下降沿信号来唤醒BM88,唤醒时间在100uS以下;

        Làhost MCU能够发送BM88

PA4: HàBM88没有连接

LàBM88已经被手机连接上

 

综上:

  1. 如果要使用未连接时的AT command的功能,建议在开机后的30s以内做完,因为此段时间我们不需要考虑是否睡眠的问题。
  2. 如果不追求功耗的极致,则可以采用默认的睡眠模式即 sleep mode,因为此时host MCU的任何时候的串口数据都可以被成功接收到。

2)如果最终的产品hostMCU端会睡眠,而且希望BM88能够作为一个唤醒源来唤醒host MCU的话,那么建议配置低功耗模式为deep sleep mode,此时可以借助于PA3脚的下降沿来唤醒。

2.4. 安全

BM88支持按照安全与否可以分为:

安全连接

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

针对BLE和EDR,分别可以记录四条配对记录,如果超过四条,将自动覆盖最老的记录;

非安全连接

不需要配对,连接没有任何加密,这是一种最不安全的方式;àAT#Y1[bit3:1]设置无安全连接;

如果在此种模式下,EDR的连接安全与否,跟手机端发起的连接模式有关系,如果手机端发起了安全连接,那么此时要求输入的PIN code是默认的pin code:0000;如果发起非安全连接,则不会做任何的配对。

在此种模式下,BLE的连接从BM88的角度来说不会要求配对加密,但是手机端仍然是可以要求发起安全连接的,此时的默认的pin code依然是默认的:0000;

2.5. Utility features

2.5.1 PA4 (连接指示脚) 和PA3(Rx指示脚)的波形图

    上面的波形图是在deep sleep mode情况下的,如果是其他两种低功耗模式下,则PA3只有在断开连接的时候,才会被拉高,此时是跟PA4一起拉高的。

2.5.2 host MCU唤醒BM88的时序图

如果BM88在连接状态下进入deep sleep模式的话,host MCU发送数据前需拉低wakeup脚,直到PA3恢复拉低状态才可以发送数据。

如果配置的睡眠模式是deep sleep的话,host MCU为了安全的传送数据,每次在发送数据前最好先在wakeup脚上给个下降沿信号,然后等待PA3/PA4处于L/L的时候才可以发送数据。因为有可能刚刚读取到PA3的状态为L,数据还没有发送成功,BM88就进入了deep sleep,此时就可能丢数据了。

如果是在未连接的状态下,host MCU想要发送AT command,而且此时已经不是刚刚开机的40s时间内,或者断开连接后10s内,并且睡眠模式是deep sleep mode或者mix sleep mode的话,都需要先拉低wake up脚,1ms后发送AT command。

2.5.3 可配置模式

可以通过拉低PB1的方式,使得BM88启动后进入专门的配置模式,

PB1, input mode, L is active, default is H;

在配置模式下,host MCU可以发送AT command来修改BM88的参数。

command的格式:

AT#[code:1byte][valuelen:2byte/1byte][value:len个byte]

            Code: 命令码;

Len: the value length,[0~9][0~9]

Value: 命令的参数,长度由Len决定

 

Command response的格式:

AT##0 à命令执行成功

AT##F à命令invalid,或者命令执行失败

AT##[code:1byte] [value:固定长度]à带信息的命令返回值

AT##[code:1byte][len:2byte/1byte] [value:可变长度]à带信息的命令返回值

命令的末尾不能带回车换行符。

支持一次发送多个AT command,比如AT#N12112233445566AT#S11AT#P6123456表示修改名称为112233445566,修改睡眠模式为mode 1,设置密码:123456。

上述command和response中的len字段都是指单纯的value字段的长度。

code len value description example
N 2个字节,用十进制数字ASCII码字符表示value的长度 Utf8编码的名称,编码后的名称长度为len 修改设备名称

目前支持的设备最大编码后的长度为25个字节。

模块默认名称:DualSppAT#N05MySpp

AT#N12ID1122334455L没有该字段没有该字段读取当前设备名称Send:AT#L

Resp的格式AT##L[len:2byte] [value:长度为len]

For example

发送:AT#N05MySpp

收到:AT##0

发送:AT#L

收到:AT##L05MySpp
R没有该字段没有该字段重置所有的配置参数为模块出厂默认值.AT#RB1个字节,用十进制数字ASCII码字符表示value的长度支持的value有:115200384001920096004800
修改模块的串口波特率。目前默认出厂设置115200AT#B519200

AT#B538400

AT#B6115200

AT#B49600

AT#B44800P1个字节,用十进制数字ASCII码字符表示value的长度。Password

最大支持6个字节的数字密码。


设置模块配对密码。

如果命令的参数

模块默认支持的是简单配对,无需密码

如果该命令的len字段值为0,则表示取消密码配对,恢复简单配对模式。

每次修改了配对方式或者配对密码,之前所有的配对信息都会自动清除。AT#P6123456

AT#P41234

AT#P0 (取消密码配对,恢复简单配对)O没有该字段没有该字段读取当前的密码.

如果当前没有设置密码,则返回的信息中,len字段为0.Send AT#O

Resp格式:AT##O[len:1byte] [value:长度为len]

For example

发送:AT#P6123456

收到:AT##0

发送:AT#O

收到:AT##O6123456

如果从未设置过密码,则:

发送:AT#O

收到:AT##O0D没有这个字段没有这个字段让前面的设置无需重启模块立即生效。

该命令只是在未连接时的AT Command mode时有效。AT#DS1个字节,用十进制数字ASCII码字符表示value的长度。1: sleep mode

2:deep sleep mode

3:mixer sleep mode(如果蓝牙没有连接上,则进入deep sleep mode,如果蓝牙连接上了,进入sleep mode)设置模块的睡眠模式

默认值是1,系统默认进入sleep的模式。AT#S11:sleep mode

AT#S12:deep sleep mode

AT#S13: mixer sleep modeU1个字节,用十进制数字ASCII码字符表示value的长度。1:uuid mode 1

2:uuid mode 2设置uuid的使用模式。

每种模式下的uuid设置,见下面的表格描述

系统默认uuid mode1.AT#U11

AT#U12V没有该字段没有该字段读取模块固件的版本信息. 返回格式:AT##V[ 0~9][0~9 ] to host MCU, 这里的[][] 具体的版本信息,比如: AT##V08, 表示版本号是 0.8.Send:AT#V

Resp格式:AT##O [value:长度为2byte]

For example

AT##V08表示当前的版本号为0.8

AT##V11表示当前的版本号为1.1M没有该字段没有该字段读取模块的蓝牙地址SendAT#M

Resp格式:AT##M[value:6个字节]

For example

发送:AT#M

收到:AT##M[39D1DB823567]这里[]中的就是蓝牙地址,是原始的raw data ,这里标志这个设备的蓝牙地址是:

39:D1:DB:82:35:67C1个字节,用十进制数字ASCII码字符表示value的长度。0:设备不可发现

1:设备可被发现

Default 1设置设备是否可被发现。

模块默认是可被发现的。AT#C11 设置可被发现

AT#C10 设置不可被发现I2个字节,用十进制数字ASCII码字符表示value的长度,固定的值为21ibeaconinformation,包括:uuidmajorminortx_power设置广播包中的ibeacon信息。格式为:

uuid(16 byte)|major(2byte)|minor(2byte)|tx_power(1byte)。各个部分都是big-endianuuid的最高有效位,成为整个ibeacon信息的最高有效位,tx_power成为ibeacon信息的最低有效位。

系统默认广播包不是ibeacon格式的。

Value字段中的内容都是raw dataAT#I21[B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D 00 05 00 08 C5]

表示

UuidB9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D

Major5

Minor8

Tx_powerC5

AT#I00:只要长度不为21,则视为无效的ibeacon信息,会恢复默认的广播包格式Y1个字节,用十进制数字ASCII码字符表示value的长度。bit 0:是否指示模块正常启动;

bit 1:设置spp优先,该位为0,表示BLE优先保证;

bit 2:设置是否支持蓝牙无安全连接;

bit 3:设置是否调大发射功率;

默认值:3也即指示模块启动;Android下面spp优先;支持安全连接;标准发射功率;不自动更新连接参数;
value是按位来指示的,一个bit位表示一个功能;

如果设置了spp优先的规则,那么在Android下面,ble将无法连接。

如果设置了bit2,那么针对spp,如果手机端发起的是安全连接,则需要输入默认PIN code0000

如果设置了bit3的话,需要重启模块才能够生效
AT#Y10àPB4无功能,BLE优先,安全连接

AT#Y11à PB4 有功能,BLE优先,安全连接

AT#Y12àspp优先保证

AT#Y13àspp优先保证,PB4有功能

AT#Y14àPB4 无功能,BLE优先,无安全连接

AT#Y15à PB4 有功能,BLE优先,无安全连接
Z1个字节,用十进制数字ASCII码字符表示value的长度。bit 0: 设置是否ble自动更新连接参数;

默认值:2value是按位来指示的,一个bit位表示一个功能;
AT#Z11à设置自动更新连接参数

要想进入配置模式,host MCU需要如下图这么操作:

 

2.5.4未连接时的AT command模式

如果BM88没有被连接,并且没有进入deep sleep的话,它自动在AT command 模式下,如果已经被连接的话,则自动进入透传模式;

BM88启动成功后,会通过串口向host MCU发送AT#START,PB4会被拉低,host MCU收到这个后,就可以发送AT command了, 如果PA4被拉低了的话,此时收到的数据将会被丢弃,直到PA3也被拉低,此时收到的任何数据就会被当做raw data发送给手机端。

如果host MCU希望修改的参数立即生效的话,可以在所有的AT command后面添加一个AT#D,这样BM88就会快速热启动让参数生效.

所有修改的参数和配置都将被保存,后续断电上电后都将生效,除非再次修改。

 

Host MCU这段的程序设计时可以如下:

2.5.5强制断开所有连接

pin PB2可以用来给host MCU强制断开连接用, 改脚默认是H, 如果拉低超过10ms的话,就会被认为要断开连接, BM88进入standby 模式。

 

2.5.6 BLE连接进入低功耗

因为ios和Android上面,都没有更新连接参数的api给应用层调用,目前要想BLE连接进入低功耗,有两种方法:

  1. 通过写BM88内置的特征来触发BM88发起参数更新

    如果是UUID 模式1的话,49535343-6DAA-4D02-ABF6-19569ACA69FE可以用来触发更新连接参数;

    如果是UUID 模式2的话, 0xfff4可以用来更新连接参数;

    这个特征的value格式:

[0xff][connection interval min: 2字节小端][connection interval max: 2字节小端][connection latency: 2字节小端][connection surpervision timeout: 2字节小端]

上面的间隔的单位都是1.25ms。

取值必须满足如下的要求:

connectionsurpervision timeout > connection interval max *(1+connection latency)

BM88在检测到写这个特征的时候,就会去触发按照设置的参数来发起更改连接参数的请求,但是这个请求能不能成功是要看手机端接受不接收的。

  1. 通过AT commandAT#Z11来使能BM88自动连接参数更新

    BM88只要使能了这个功能,就会在ble连接状态下,发现有超过6s没有数据交互后,自动降低连接参数,使得BM88可以进入更低的功耗,这个参数一旦更新,后续如果再发送数据就是用新的连接参数来工作了。目前自动更新的连接参数是0x90。连接参数设置的越大,传输的速度越慢,具体的应用场景可以根据需要来确认是否启用这个功能。

2.5.7hostMCU怎么发送超过511个byte的大数据

因为我们的模块,从host MCU发往模块一个包最大只能发511个字节,在有些场景下需要发送超过这个的字节数。为了解决这个问题,需要多次发送,但是前后发送之间到底要间隔多长时间的话,host MCU可以用PB3来检测,PB3拉高的时候,表示正在发送,拉低表示发送完成。这样就可以在确保前面的数据发送完成后,再接着发送后面的数据。

如果数据透传的时候,在host MCU跟手机之间的数据传输没有确认机制,或者说不是一来一回的这种模式的话,最好使用PB3的状态来确认发送是否成功,否则可能会导致丢包。

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

UUID mode 1:

uuid name properties description
49535343-FE7D-4AE5-8FA9-9FAFD205E455 transparent Service
49535343-6DAA-4D02-ABF6-19569ACA69FE Change connect param Read/write Change the connection parameter to reduce the power when ble connected
49535343-1E4D-4BD9-BA61-23C647249616 Txcharacteristic notify Send data from BM88 by Notify.
2902 Client configuration Read/write Configuration for enable/disable Notification .

Default is 0,theApp in phone need write this value to 1, before it can receive data from BM88.49535343-8841-43F4-A8D4-ECBE34729BB3Rx characteristicwritetransmit data to bm88 by writing this characteristic’s value

UUID mode 2

uuid name properties description
0xfff0 transparent Service
0xfff4 Change connect parameter Read/write Change the connection parameter to reduce the power when ble connected
0xfff1 Tx characteristic notify Send data from BM88 by Notify.
2902 Client configuration Read/write Configuration for enable/disable Notification .

Default is 0,theApp in phone need write this value to 1, before it can receive data from BM88.0xff2Rx characteristicwritetransmit data to bm88 by writing this characteristic’s value

2.7BM88支持通过host MCU 进行在线升级固件

BOOT脚默认情况下是拉低的,如果拉高的话,就会进入升级模式。在此模式下,可以通过串口将固件刷到模块中。我们会提供串口升级的demo程序。只需要做简单的移植就可以使用了。2.8. BM88 pin description


 

pin description
PA4

BM88连接状态指示脚

H 没有任何连接存在.

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

PA3

BM88rx状态指示脚

Hàhost MCU不能发送数据给BM88;

Làhost MCU能发送数据给BM88;

WAKEUP 输入脚。

下降沿有效,如果PA3/PA4H/L的话, Host MCU在发送数据到模块之前需要先拉低WAKEUP脚,直到PA3/PA4恢复到L/L的状态BOOT0输入脚,常规情况下,拉低。

正常的应用模式,改脚拉低;

如果拉低,则进入固件升级模式,可以通过串口给模块升级固件。PB4拉高表示模块正常启动,可以用这个脚来进行故障检测。PB3输出引脚,拉高表示模块正在发送数据到手机端,拉低表示发送完成;PB2强制断开所有的连接,输入

Default: H

如果拉低超过10ms的话,就会断开所有的连接,使模块计入standby的模式PB1专有的配置模式的引脚,输入

Default: H

如果模块上电的时候,检测到改脚拉低的话,就会进入专有的配置模式LDO_EN拉低会给BM88断电,拉高上电。Tx/Rx串口,交叉连接到host MCU的串口Tx/Rx上。

 

Note:

  1. Host MCU BM88发送数据,一帧数据最长不能超过511个字节.

  2. 手机端往BM88发送数据,如果是BLE的话,一次最长不能超过512字节;
  3. Android下面,强烈推荐使用spp连接(默认配置是优先保证spp连接);因为在Android下面,在4.3以上的版本中,支持了BLE,但是有的手机上对双模的支持会有一些兼容性的问题,如果要想在Android的手机上只使用spp的话,那么就保持默认设置(BM88默认设置成spp优先,这样的结果就是在Android下面可能ble链接都会无法建立了,因为Android的手机的底层会自动定向到spp链接)。如果希望在Android下面低于4.3的版本自动使用spp链接,但是4.3以上的版本都使用ble的话,可以发送AT#Y1[bit1: 0]commandBM88设置成ble优先。

    目前默认设置的情况下,可能在极少的手机上(主要是部分小米,还有酷派的部分手机)会出现,无法有效的搜索并上报传统蓝牙设备,上层发起spp链接的时候,实际上底层发起的是BLE连接的情况,所以要克服这个问题,要么用spp连接优先的方式,保证spp连接都能正常使用,要么就是力所能及的使用BLE的连接。

转载请注明:BT + WIfi 技术交流文档 » Application Note of BM88(带天线) Module ver11(中文)

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

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

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