最新消息:

Application Note of BM90 Module

BM90 wkadmin 741浏览 0评论


Application Note of BM90 Module

 

Description

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

BM90是一款支持低功耗蓝牙4.2的透传模块.

1.1. BT 状态定义

1. Standby Mode: 在该状态下,BM90会发送可连接可发现的广播包

2. Linked Mode: BM90 被连接上了;

3.Sleep Mode: BM90会在连接和广播事件的间隔进入抄底功耗状态;

 

 

1.2. BM90工作模式定义

  • At command state: BM90在没有建立连接,并且没有进入深度睡眠的情况下,可以接收AT command,具体支持的AT command在专门的文档中进行描述.
  • Linked State: BM90已经准备被连接上,可以进行数据通信了.

2. 功能介绍

2.1. 支持的蓝牙Profiles

  • 蓝牙4.2: GAP, GATT, ATT, SMP and L2CAP. BM90 默认是周边设备(如果需要其他的角色,需要联系我们定制或更新相关的固件),预定义透传service,默认uuid的定义见下面的章节。但是支持uuid通过AT command进行修(具体参考AT command列表中AT#U的格式和定义)

 

2.2. uart 特性

uart波特率支持从 2400
1000000 bits/s 的所有波特率.

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

2.3. 低功耗

支持三种模式:

  1. 不睡眠(AT#W10)
  2. 浅睡眠(外设保持供电,串口依然正常工作) (AT#W11)
  3. 深睡眠(外设不被供电,串口不能唤醒模块,需要有专门的GPIO进行唤醒,唤醒信号为下降沿信号)
    (AT#W12)

    注,睡眠模式可以通过AT指令进行配置,具体参考AT指令的表格

Sleep模式

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

超过30s后,如果串口上没有数据,也没有被连接,超过wait time enter sleep就会进入睡眠;

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

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

在睡眠状态下,WAKEUP)_NDICATE脚维持拉低;

在睡眠状态下,可以被WAKEUP脚的下降沿信号唤醒,一旦是被WAKEUP脚,也会保持唤醒状态wait time enter sleep;

注:wait time enter sleep是可以通过AT指令设置的,默认为5s

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

如果当前在睡眠模式下,上位机如果要发送数据的话,可以先拉低WAKEUP脚,WAKEUP_INDICATE脚恢复拉高,此时可以外部MCU可以通过串口发送数据给BM90,否则串口数据会丢包。

注:在实际的使用过程中,为了方便简单,一旦外部的MCU想要进行数据通信的话,建议直接拉低WAKEUP脚,直到数据通信结束,恢复WAKEUP拉高,这样可以避免频繁的控制WAKEUP脚以及判断WAKEUP_INDICATE脚,而且这种频繁的判断有可能会出现误判。

 

2.4. 安全

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

BLE安全连接

  1. 默认是不需要配对的,无安全,空中数据是明文传递的;
  2. 简单的配对àAT#A11 设置需要配对,AT#A10取消配对,空中数据经过加密;
  3. 输入密码配对àAT#A12 密码配对,空中数据经过加密。在这种安全模式下,还需要使用AT指令进行密码设置,具体参考AT指令的表格。

 

注:每次修改安全模式,都会删除之前的配对信息,所以在验证的时候,手机端也需要删除之前的绑定信息。

2.5. Utility features

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

 

  • AT command(power on/standby) 模式:在该模式下,串口接收到的数据会被当做ATcommand来解析,如果合法会立即返回结果,但是指令相应的生效会视具体的功能有所不同,具体参考AT指令文档。设置的属性会被保存起来,一次设置永久生效。具体支持哪些指令以及指令的使用方式请参考AT command的列表文档。BM90在power on以及standby状态的时候,它自动工作在AT command 模式下;
  • 透传(linked)模式: 在透传模式下,串口接收到的数据会被原封不动的发送到蓝牙远端。如果蓝牙已经被成功连接的话,则自动进入透传模式;

 

2.5.2 睡眠与唤醒

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

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

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

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

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

 

2.5.3 强制断开所有连接

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

2.5.4 BM90唤醒host MCU

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

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

 

2.5.5 BM90串口数据发送状态指示

这里的n是由AT#E1n来设置的。N是包与包之间的最小间隔,默认是1ms,也就是说当检测到串口上超过1ms没有数据的时候,bm90会认为一个数据包结束,就会启动将数据发送到远端的过程。当开始发送的时候,会拉低SEND_STATE_INDICATE脚,发送完成后,拉高SEND_STATE_INDICATE脚。

 

2.5.6 AT Comman格式说明

命令:

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

code            must     命令码

param len        optional    命令参数的长度,以字节为单位,ASCII码字符,比如’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 数据从BM90发往远端
2902 Tx 特征的Client configuration描述符 Read/write 默认值为0,此时不会执行notify的动作,也就是不能将数据从BM90发往手机端.手机端应用需要将这个描述符的值写为1以后,才能表示手机已经准备好了接收notify的数据,所以BM90也就可以想手机notify数据了
49535343-8841-43F4-A8D4-ECBE34729BB3 Rx 特征 write 手机往BM90发送数据的特征

 

2.8. BM90 pin description

pin description
DIO5

输出,BM90连接状态指示脚

H 没有任何连接存在,此时模块处于广播状态.

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

DIO12(WAKEUP) 输入脚。

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

改脚如果一直维持拉低的话,模块将会不进入睡眠。DIO14(LED)输出,低电平的时候灯亮,高电平灯灭;

Standby的时候,灯闪烁(500ms闪一次),如果超过了进入sleep(开机后首次是30s,之后就是5s)的等待时间后,则进入了sleep,将停止闪烁,直到下次被WAKEUP脚唤醒;

Linked的时候,拉低,灯常亮;DIO4(SLEEP_INDICATE)输出,Sleep状态指示脚,低,表示当前在睡眠状态,高,表示唤醒。DIO3(SEND_STATE_INDICATE)输出

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

拉低:表示发送完成;

host MCU需要连续发送数据,中间没有对端的confirm的话,需要用该脚来判断前一包数据是否发送完成,防止host MCU不断的发送大数据,来不及发送完的话,累积后就会发生溢出而丢包。DIO13(WAKEUP_HOST_MCU)输出,拉高表示有数据要发送给host MCU,拉低表示数据发送完。

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

Default: H

如果拉低超过10ms的话,就会断开所有的连接,使模块进入standby的状态。RESET拉低BM90 reset,每部已经做了拉高处理。DIO8(Tx)&DIOB1(Rx)串口,交叉连接到host MCU的串口Rx&Tx上。DIO0(CTS)&DIOA6(RTS)默认没有打开流控,可以通过AT command打开.

打开流控:AT#F11

关闭流控:AT#F10

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

RTS 输出

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



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

CTS 输入

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



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

如果不需要串口流控的话,这两个脚可以悬空;BOOT内部已经拉低了,如果不需要做boot loader升级的功能,改脚可以悬空

 

 

注:

BM90串口接收缓冲最大512字节,所以host MCU一包最大只能发送512个字节,否则会出现溢出的情况。或者串口打开流控,以防止溢出;

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

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

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

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

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