• 物联网工程师开发服务平台

BLE AT 透传固件

BLE-AT 数据透传固件,是由 MXCHIP 开发的,运行于 EMB1xxx 单模BLE模块的默认固件,可实现模块与其它智能设备的数据透明传输功能。用户可以方便、快速地通过低功耗蓝牙(BLE)实现数据的收发以及其相关参数的配置。本文介绍基于 EMB系列 低功耗蓝牙模组的 BLE AT 透传固件使用方法。

目录

  1. 固件简介
  2. 工作模式及模式切换
    1. 工作模式简介
    2. 模块上电后的工作模式
    3. 工作模式切换
    4. 模块出厂默认设置
  3. 快速开始
    1. 数据透传模式
      1. 模式简介
      2. 模式选择
      3. 建立连接
      4. 模块串口发送数据至客户端
      5. 客户端发送数据至模块串口
      6. 低功耗模式
      7. 简易参数配置
    2. 参数配置模式
      1. 获取参数
      2. 设置参数
      3. 保存参数
      4. 模块重启
      5. 验证参数
  4. 透传固件升级
    1. 固件升级工具
    2. EMB1036固件升级
      1. BLEKit-1036简介
      2. EMB1036固件升级流程
    3. EMB1061固件升级
      1. BLEKit-1061简介
      2. EMB1061固件升级流程

固件简介

目前,已支持BLE-AT透传固件的模组型号包括:EMB1036EMB1061EMB1060(与1061用法相同)。

固件版本号说明:

EMB_AT

此固件包含五种工作模式:

  • Boot模式
  • 数据透传模式
  • 指令模式(参数配置模式)
  • 测试模式。
  • 固件升级模式。

其中:

  • 数据透传模式是主要功能模式。
  • 指令模式中,用户可通过 AT 指令配置相关参数,模块重新上电,配置数据才能生效。
  • Boot模式,是一个过渡模式,此模式接受用户的指令进入指定模式或者自动进入数据透传模式。
  • 测试模式是不对用户开放的,仅用作公司内部生产测试时使用。
  • 固件升级模式是为了方便用户为模组升级最新透传固件开发的。

工作模式及模式切换

工作模式简介

1.透明传输模式

固件根据预先设置的参数(默认或者用户在指令模式下设置)初始化数据透传服务并开始执行30s的高频率广播(有限可发现模式)。如果用户没有在30s内建立连接,那么设备会自动进入低频率永久广播(一般可发现模式)。 当用户使用其他BLE设备与此模块建立连接,则可以看到模块支持的所有服务。此时若从串口输入数据,在BLE客户端就可以看到收到的数据。同理,BLE客户端发送的数据将会在模块串口中显示出来。

注意:在最新版本(ATV1.6或以上)透传模式时,与模组已连接的BLE设备可以通过新的GATT服务配置设备名以及发射功率两个参数。详情参见下文。

2.指令模式

在指令模式下,可以通过 AT 命令配置模块参数。详细描述见: BLE-AT指令使用

3.BOOT模式

在BOOT模式下,可以通过串口接受用户指令以进入指定的模式。

4.测试模式

在测试模式下,通过串口命令执行生产测试的功能。(此模式不对用户开放)。

5.固件升级模式

在固件升级模式下,可以通过用户串口为模块升级最新的透传固件。

模块上电后的工作模式

固件在上电的前 1s 内为 BOOT 模式,此时用户通过串口输入相应指令即可引导固件进入不同的工作模式,如表所示。

串口指令 工作模式
##<CR> 测试模式
**<CR> 配置模式
$$<CR> 固件升级模式
-- 不输入任何指令,自动进入数据透明传输模式

工作模式切换

1. BOOT模式 -> 透明传输模式

模块上电后1s内不输入任何指令就会自动进入透明传输模式。

2. BOOT模式 -> 命令控制模式(设置模块参数,自定义服务UUID等)

模块上电后1s内输入**<CR>指令即可进入命令控制模式,此时串口返回+OK=ATMODE<CR><LF>(固件版本小于ATV1.2.0)或者+OK=AT<CR><LF>(固件版本不小于ATV1.2.0)。

3. BOOT模式 -> 测试模式

模块上电1s内输入##<CR>指令即可进入测试模式,此时串口返回+OK=TESTMODE<CR><LF>(固件版本小于ATV1.2.0)或者+OK=QC<CR><LF>(固件版本不小于ATV1.2.0)。

4. BOOT模式 -> 固件升级模式

对于EMB1036,模块上电1s内输入$$<CR>指令即可进入固件升级模式。此时串口返回+OK=SFUP<CR><LF>(固件版本不小于ATV1.2.0)。

对于EMB1061,模块在上电时保持BOOT引脚为高电平,即可进入固件升级模式。此时串口没有任何返回。

注意:除上述之外的其他转换方向不做支持,但是当处于命令控制模式,可以输入特定指令请求模块reset。所以,透传模式与命令模式、测试模式之间不可以互相转换,在命令模式中设置的模块参数等要在模块reset之后才能生效。

模块出厂默认设置

MXCHIP EMB1036模块出厂默认设置:

  1. 串口设置:波特率115200、数据位8、停止位1、校验位 None,流控 None
  2. 设备名:MXCHIP_EMBXXXX(xxxx为模块编号)(注意:设备名最长不能超过16个字节)
  3. 广播参数:高频率广播(40ms间隔,有限可发现模式,30s时长),低频率广播(640ms间隔,一般可发现模式,100s时长。如果广播停止后,在透传模式时会自动重新开始一般可发现模式广播)
  4. 发射功率:4dbm(不同模块支持的最大值可能不同,EMB1036最大为4dBm)
  5. 透传服务UUID:1B7E8251-2877-41C3-B46E-CF057C562023
  6. 透传服务RXD Port特性UUID:8AC32D3F-5CB9-4D44-BEC2-EE689169F626
  7. 透传服务Rx Length特性UUID:777EE75C-B198-446B-AE9A-7CA1E4E64F1F
  8. 透传服务TXD Port特性UUID:5E9BF2A8-F93F-4481-A67E-3B2F4A07891A}
  9. 透传服务Tx Length特性UUID:3DA26C14-6F8E-4542-8DC8-6D6AEA960774

模块出厂设置如下,如果此设置不能满足您的要求,那么您可以使模块进入指令模式之后,使用 BLEAT 指令集 做出相应的修改。

注意,这些修改需要模块重新上电才能生效!

快速开始

数据透传模式

1.模式简介

数据透明传输模式是将模块串口收到的数据通过蓝牙链接发送到客户端设备,也可以接受来自客户端发送的数据并通过模块串口中输出。MXCHIP的低功耗蓝牙透传模式是通过自定义GATT服务实现的,当客户端设备与蓝牙模块建立连接之后,可以搜索到如下服务(图中使用iPhone 的LightBlue应用测试):

ble_device_info

图中看到UUID为1B738251-2877-41C3-B46E-CF057C562023的主服务即为透传主服务。其中包含四个主要的特性,分别为:

  1. RXD Port:接收数据端口特性。接受来自模块串口发送的数据,接收到的字节序与对方串口发送的字节序相同,类似于FIFO。注意,接受端设备必须注册Client Characteristic Descriptor(即客户端特性描述符,详见蓝牙核心规范)为Indicate。在LightBlue中如何注册后文有详述。
  2. Rx Length(bytes):已接收数据长度特性。此特性描述了RXD Port特性已收到数据的长度,单位:uint32_t,数值为16进制,以小端模式存储。每次新连接建立会从零开始计数。
  3. TXD Port:发送数据端口特性。通过此特性可以发送数据到模块并在串口中显示,字节序同RXD Port。
  4. Tx Length(bytes):已发送数据长度特性。此特性描述了TXD Port特性已发送数据的总长度,单位:uint32_t,数值为16进制,以小端模式存储。每次新连接建立会从零开始计数。

测试透传时需要做如下准备:

  1. 准备一台BLE设备,示例为已经安装了LightBlue的iOS设备。
  2. 能够正常工作的模块
  3. USB转串口的转接板

注意:从固件版本ATV1.2.0开始,模块串口支持硬件流控。模块端串口建议设置为"使能硬件流控",这样可以完全避免数据的丢失。大数据量传输中,必须使用串口硬件流控。

2.模式选择

  1. 首先请使用串口转接板将模块的用户串口接入PC并使用串口助手软件打开相应串口。对于1036此过程请保持模块Pin 1悬空。为模块上电(3.3v),此时模块会有1s的boot时间,如果此时串口输入相应指令,模块将进入相应的工作模式。

    注意:EMB1061进入固件升级模式请阅读工作模式转换章节。

  2. 由于我们此时要使用透传模式,不输入任何命令,模块将在1s后自动进入数据透传模式。

3.建立连接

  1. 当模块进入数据透传模式后,将根据预设的参数开始广播(30s,有限可发现),如果设备在30s后还没有建立连接,将进入永久一般可发现模式的低频率广播模式。
  2. 打开iOS设备的蓝牙开关并进入lightblue应用中,刷新,将看到一个名为MXCHIP_EMBXXXX(XXXX为相应模块的编号,比如模块为EMB1036,此时设备名就为MXCHIP_EMB1036)。
  3. 点击此设备名,将于模块建立BLE连接,可能需要接收配对请求,请确认。
  4. 当连接建立成功以后,设备将自动停止广播。

4.模块串口发送数据至客户端

(1)当连接建立成功,lightblue会自动获取设备支持的所有服务(Service)以及服务支持的所有特性(Characteristic),您将会看到如图。

ble_device_info

(2)其中RXD Port就是接收数据的地方,TXD Port就是要将数据发送到串口的地方。至于Rx/Tx Length分别表示接受到和发送的数据长度,都是以uint32_t为单位16进制数,小端模式。

(3)现在点击RXD Port进入此特性,您将看到关于此特性的详细信息。现在点击“Listen for notification”按钮(注册Client Configuration Descriptor,详细请参考蓝牙核心规范),看到其变为“Stop listening”,说明注册成功。

注意,注册CCD这一步骤一定要做,不论是在用什么客户端与模块连接!!。

RXD_port1

(4)点击右上角的hex按钮,选择UTF-8 String。

(5)在PC上打开串口工具,选择COM口(连接用户串口的USB转接板),设置115200波特率,8bits数据位,1bit停止位,无校验位无流控,Open串口。

(6)现在可以使用此串口工具发送数据,比如输入“hello world”点击发送,将会在lightblue中RXD Port特性下看到发送过来的数据。

device_to_client

(7)您也可以打开Rx Length特性,点击read again按钮,此时将看到0x0B000000,表示此时收到11个字节的数据。如图。

RXD_port2 rx_length

5.客户端发送数据至模块串口

(1)当客户端设备与模块建立连接了,那么在LightBlue可以点解TXD Port进入特性详情页,点击右上角Hex,进入将其设为UTF-8 String。

(2)在TXD Port详情页,点击Write new value按钮,进入编辑模式,此时输入“I’m fine”,如图。

client_string

(3)点击键盘中的Done,就将数据发送到了模块的串口上,如图:

device_receivedata

(4)也可以lightblue中进入Tx Length特性中,点击read again获取最新发送的数据长度,如图,发送数据长度为20字节。

tx_length

6.低功耗模式

EMB1036的低功耗模式主要分为两种,一种为sleep,一种为Deep Sleep。只有模块处于数据透传模式时才有可能进入这两种模式。

当模块的RF不活动并且有足够的时间,那么系统就会自动进入sleep模式。进入sleep模式的条件为:系统处于空闲,或者系统存在连接但是连接上没有数据收发,或者Advertisement中每一个广播包间隔时间足够。

Deep sleep模式由用户通过WAKEUP(Pin 21)引脚手动控制。此引脚模块内部已经设置为上拉,当检测到下降沿时将触发一次进入deep sleep模式的请求。如果模块成功进入deep sleep模式,那么请保持此引脚为低电平。当将其拉高(引脚检测到上升沿)时模块会被唤醒。

当WAKEUP引脚检测到下降沿中断时,如果此时系统不存在连接也不存在RF射频活动(无连接),那么将进入Deep Sleep模式。如果系统存在连接,那么无法进入Deep sleep。Deep Sleep模式只有在透传模式时才会被支持。其他模式下不支持Deep Sleep。

注意,当系统进入Deep Sleep后,RAM中所有数据将不被保存,APP的状态也不再保存。此时可以将WAKEUP引脚拉高,以便唤醒系统。这种唤醒很类似于Reset,不同的是,硬件外设(比如GPIO)的状态在DeepSleep模式下可以完全保持,直到系统被唤醒。

7.简易参数配置

当固件版本不小于ATV1.6时,透传模式下,与模组建立连接的BLE设备也可以通过一个特定的GATT服务配置模组的某些简单常用参数,参数在配置后立即生效。目前支持的参数有:设备名发射功率

当与模组建立连接后,即可看到ConfigurationService,如下图,其中Config NameConfig TxPower即为两个相关的characteristic:

ConfigurationService

用户BLE设备可以向Config NameConfig TxPower两个characteristic写入相关内容,以便配置相应的参数。

注意: 参数被写入成功后立即生效。对于Config NameConfig TxPower二者,配置之后,等到下一次开启广播时即可看到效果。

设备名配置

ConfigurationName

ConfigurationName_ING

注意:可以通过读取此characteristic的值判断是否配置成功。

ConfigurationName_RESULT

发设备功率配置

发设备功率的配置过程与设备名操作一致,不同之处仅仅是写入的数值不同而已。

注意:不同的设备的发射功率范围不同,所以并非可以设置任意值。如果设备不支持某个指定的数值,那么读取此characteristic的结果将是0xFF。

指令模式

指令模式可以用于设置蓝牙模块一些指定的参数,只有处于此模式下AT指令集才是有效的。用户使用AT指令配置完成之后,建议输入一个AT+SAVE指令以保存已经配置的参数,接着AT+REBOOT即可。模块将使用用户配置好的参数重启。

注意,如果在最后一个AT+SAVE命令和AT+REBOOT命令之间还有设置类指令,那么这些指令配置的数据将会丢失。

命令主要可以完成以下工作:

  1. 获取设备地址,固件版本号等等信息
  2. 设置或获取包括设备名、广播参数、连接参数、发射功率、UART等配置信息
  3. 重启模块
  4. 恢复出厂设置
  5. 设置透传服务UUID以及其包含的四个特性的UUID值,注意这些UUID值必须是128-bit,16-bit已经被保留使用,用户不可设置。

1.获取参数

获取参数的流程就以获取固件版本为例。首先确保设备进入指令模式,如图:

into_configmode

注意:图中字样"ATMODE"在新版本中已经简化为"AT",用户发现新版本不同时无需惊讶。

现在可以在串口工具中输入AT+FMVER指令获取当前版本号,请注意命令的完整格式,具体参考AT指令相关文档。如图:

version_get

其它支持获取参数的指令都可按照此流程进行,也可通过MCU与此串口连接并发送接收相关信息。

2.设置参数

设置参数就以设置UART参数为例。

注意,当前EMB1036模块固件版本已经支持UART的波特率以及硬件流控的设置,其它参数(校验位、数据位数、停止位数等)均不支持。所以使用AT+UARTCFG获取当的串口参数,只有波特率以及硬件流控有效,其它的均无效。配置参数时,除波特率和硬件流控以外其它参数请都设置为0。如图:

config_uart

注意:当前的默认设置,波特率为115200,通过指令获取的结果也是如此。

下面通过此命令设置波特率为57600,如下(设置完成之后需要通过AT+SAVE指令保存,保存可以作为重启前最后一条指令进行,以免多次发送SAVE指令,从而延长Flash的读写寿命),如图:

config_bps

已经设置成功,现在保存重启。

3.保存参数

at_save

4.模块重启

模块重启可以通过指令也可以直接硬件复位。

at_reboot

5.验证参数

由于串口波特率被修改,现在需要重新设置串口工具的参数才能与模块通信。如下:

reset_compara

可以看到,串口波特率已经设置为57600,此时可以通过“**”指令进入配置模式,如图,可以获取当前串口设置参数:

get_uartconfig

其它指令都可以按照类似流程进行,比如:可以设置设备名称,设置主服务的UUID等等。

具体详细信息请参考: BLE AT指令使用

透传固件升级

本节主要讲述用户如何使用MXCHIP提供的固件升级工具为各模块升级透传固件。目前只包括EMB1036以及EMB1061两款模块,并且当前的模块中的固件版本必须不小于ATV1.2.0。

固件升级工具

MXCHIP专门为BLE模块提供一个固件升级PC工具,如图:

ble_upgrade_tools

图中每一个可选区域功能已经用红字标出,用户必须分别选择模组类型、模组串口号以及固件文件之后,才可以升级固件。一旦开始升级,过程不可撤销。

将鼠标指针悬停在固件按钮上,稍后将会显示已经选择的文件的路径。如果没有选择,工具将显示请选择固件文件等字样。

ble_upgrade_tools_file

注意:后续版本可能会有所变化,但是基本操作流程不会有太大变化。后期如有更新,将在此处更新说明。

EMB1036固件升级

BLEKit-1036简介

BLEKit-1036是MXCHIP专门为EMB1036设计的开发板,方便用户开发。如图:

blekit_1036.jpg

图中1为Reset按键,2为USB供电以及Debug串口,3为用户串口RX/TX,4为EMB1036模组

EMB1036固件升级流程

  • 通过USB线为模块供电,并且通过串口转接板将用户串口与PC相连接(在设备管理器确认其串口号)。如下图:

blekit_1036_connected.jpg

  • 将拨把开关1拨到OFF,并且Reset模组。在PC上通过串口助手之类的工具(比如格西烽火)打开用户串口对应的串口号,其波特率为115200,8位数据位,1位停止位,无校验位,无流控。如下图:

    注意:如果模块的波特率不是115200,那么必须先通过指令模式将其串口设置为115200,才能固件升级。

blekit_1036_usercom.png

  • 确认拨把开关1拨到OFF并且再次Reset,在reset之后立刻通过已经打开的串口助手工具发送$$<CR>命令(发送命令必须在Reset模组后1s以内,如果不熟悉,可以多操作几次)。如果操作成功,那么可以看到串口助手接收到+OK=SFUP

blekit_1036_sfup.png

  • 关闭串口工具以释放串口,因为后面升级工具需要用到此串口工具。

  • 打开固件升级工具,如上文所述,选择模组为EMB1036,选择用户串口号(例如COM12),点击固件按钮选择需要升级的固件文件(必须是MXCHIP提供的合法固件文件,否则升级不会成功并且造成模组Flash崩溃,后果自负)。

blekit_1036_upgrade_tools.png

  • 点击升级按钮,将弹出一个提示对话框,提示用户在此之前必须先令模组进入BootLoader模式。点击确认即可。即可开始升级。升级成功后,模块将自动Reset并从最新固件运行。

注意:升级过程不可撤销,禁止用户使用非常手段(比如杀死进程)关闭升级工具,否则可能造成不可预料的后果。

blekit_1036_upgrade_warning.png

blekit_1036_upgrade_busy.png

blekit_1036_upgrade_pass.png

  • 如果升级过程中出错,将会弹出相应的对话框提示,用户可以根据提示进一步处理问题。问题解决,可以重新按照流程升级固件。如有无法解决,请咨询MXCHIP。

注意:此升级功能仅支持EMB1036的固件版本为ATV1.2.0及以后,用户可以通过指令模式的AT+FMVER指令获取当前固件的版本信息。

EMB1061固件升级

BLEKit-1061简介

BLEKit-1061是MXCHIP专门为EMB1061设计的开发板,方便用户开发。如图:

blekit_1061.jpg

注意:与EMB1036不同的是,EMB1061仅仅提供一个硬件UART,所以,图中的USB供电口同时作为唯一的串口(透传固件的指令,数据以及升级固件都使用此串口)

EMB1061固件升级流程

  • 通过USB接口为开发板供电。从设备管理器在中查看其对应的串口号。

  • 进入BOOTLOADER模式。确认模块已经供电后(USB端口旁有一个红色LED亮起),按住BOOT按钮不能释放并且通过Reset按钮将模组复位,再释放BOOT按钮。如果操作成功,那么EMB1061将进入BootLoader模式。

  • 打开固件升级工具软件,并选择模组为EMB1061,选择用户串口号以及固件文件。

  • 选择要升级的固件文件(点击固件按钮),如果一切正常,那么此时将看到升级按钮变亮。表示可以升级。此时鼠标悬停在固件按钮上将看到已经选择的固件的绝对路径。如图:

blekit_1061_upgrade_tools.png

  • 点击升级按钮,将弹出一个对话框以提示用户确认模块现在已经处于BootLoader模式。点击确认,即可开始升级,如图:

blekit_1061_upgrade_busy.png

blekit_1061_upgrade_pass.png

  • 升级成功后,模块将自动Reset并从最新的固件运行。如果升级过程中出错,工具将弹出相应错误提示,用户可以根据提示进一步处理。

注意:升级过程不可撤销,禁止用户关闭升级工具,否则可能造成不可预料后果。

文本导读目录