Page 1 of 1

【技术干货】NBIOT通用协议MCU对接指导文档

Posted: 2023年 Sep 4日 18:21
by liujt@tuya.com

该指导文档,针对MCUSDK的软件流程进行分析总结,可辅助开发者快速梳理通信流程,提高MCU通用对接开发效率,具体协议请参考Tuya IOT平台NBIOT栏目中的串口协议文档。(https://developer.tuya.com/cn/docs/iot/ ... t65q7ucbnr
一.涂鸦模组调试助手使用
在涂鸦IOT平台(https://iot.tuya.com/)创建产品的时候,以下配置非常重要:
1:确定产品工作模式即PSM/DRX,如下图:

psm_drx.png

2:确定连云方式(直连涂鸦云或非直连涂鸦云),如下图:

isp_mode.png

非直连指数据从设备经由运营商平台中转到涂鸦云平台(中国区域内基本使用该连接模式);
直连涂鸦云指数据从设备直接到涂鸦云平台(非中国区域内基本使用该连接模式);
3:如果连云方式为直连涂鸦云模式,还需要配置海外的NB模组配置表(主要配置连云服务器地址,PLMN及频段信息,可以找产品经理协助),如下:

NB模组配置表.png

4.选择需要使用的NB模组后,在“硬件开发”选项最下面有“开发资料”,用户可以将开发资料全部下载下来。为了用户快速体验以及调试使用NB模组,用户可以下载“涂鸦模组调试助手”来辅助前期调试。

涂鸦模组调试助手.png

使用“涂鸦模组调试助手”时候,选择“协议切换”->NB-IOT,“串口名”选择与NB模块通信的串口号,波特率选择9600或115200都可以(NB模组有自适应9600或115200波特率的能力),在“DP点文件”选项中加载从“开发资料”下载的“功能调试文件”,以上设置配置完成后,点击“点开”按钮,接着再点击“开始调试”,目前为止“涂鸦模组调试助手”的配置都设置完成,下图为配置完成的例子:

涂鸦模组调试助手_配置完成.png

设置完“涂鸦模组调试助手”后,在“基础功能”选择中,可以操作一些基础的查询指令,比如“获取imei”,“获取imsi”,“查询绑定状态”等等。

查询指令.png

在“DP CMD”中,可以选择用户在涂鸦iot平台中配置的dp点,dp类型有“记录型”与“非记录型”数据,继续设置dp点所对应的值,然后点击添加。在设备处于唤醒状态下,点击“上报”,就可以将数据上报到云端啦。(设备需要绑定到‘涂鸦智能’app中,4.1章节有介绍)。下图为“DP CMD”发送界面:

发送界面.png

二.波特率自适应说明
1)波特率:9600/115200(模组自适应9600与115200)
2)数据位:8
3)奇偶校验:无
4)停止位:1
5)数据流控:无
模组上电后,会以默认波特率(115200),发送“查询产品信息”(0x55 0xaa 0x00 0x01 0x00 0x00 0x00),MCU收到后,应按照协议格式及内容进行回复。模组会以115200波特率,500ms时间间隔,发送3次,如果3次后还没有收到MCU的回复,模组会再次以9600波特率,500ms时间间隔,发送3次。如果3次后,依然没有收到mcu回复,模组会以默认波特率115200进行通信。在自适应期间,模组成功收到mcu的响应后,会停止自适应,同时以自适应后的波特率与MCU进行通信。设备下次唤醒或上电时的默认波特率会以上次通信成功的波特率进行优先自适应。

波特率自适应.png

三.模组首次上电激活下载schema
NB模组与MCU波特率自适应完成后,MCU会收到NB设备上报的运行状态,下表为NB模组主动上报模组的运行状态协议格式,更多详细协议格式信息,参考“NB串口通信协议”文档。

设备运行状态.png

NB设备主动上报运行状态协议格式
下图为NB模组与MCU模组正常通信后,首次下载schema文件时的串口协议交互逻辑,建议按照“NB串口通信协议”进行交互通信:

交互逻辑.png

1、从上面通信过程中可以看到,在该阶段MCU需要给NB模组进行以下2条信息的回复:
MCU响应NB模组“查询产品信息”(01命令)(sdk已经做了)
MCU响应NB模组“报告设备的联网状态”(02命令,55 AA 00 02 00 00 01)(sdk已经做了)
2、NB模组在下载schema过程中,MCU有以下几点需要注意:
用户在没有收到“设备下载schema完成”(55 AA 00 BE 00 01 05 C3)前,不要强制断掉NB模组的电源或下发强制睡眠指令。
NB模组没有成功下载完成schema前,MCU发送dp点给NB模组,会导致数据发送失败。
下图为NB设备正在下载schema时候,MCU发送dp点给NB模组的流程:

下载schema.png

四.数据上报与下发(设备已激活且schema文件下载完成)
MCU接收到模组上报的“设备下载schema完成”(55 AA 00 BE 00 01 05 C3)指令后,就可以发送数据给模组了。
以下NB模组配置为PSM模式,采用非直连涂鸦云方式。
4.1 绑定设备
在应用商场或者app store上搜索“涂鸦智能”,下载完成后,打开APP,点击“添加设备”->“NB-IOT” ->“手动输入编号(设备imei号)”或“扫描二维码”,添加完成后,app上就会出现你所创建的设备。

创建的设备.png

用户按照上述步骤绑定设备时候,需要注意的是,如果NB模组没有下载schema或正在下载schema中(55 AA 00 BE 00 01 0F CD)去绑定设备,app会出现如下“绑定失败”提示:

绑定失败.png

模组绑定成功,NB模组开机,连接上涂鸦云后,NB模组与MCU会有以下交互:

绑定成功.png

4.2 模组开机或唤醒
用户在使用MCU对接NB模组时候,不同模组的开机方式有所区别,比如使用NM1/NM1-CT/NM1-GL系列模组时候,模组上电后,需要拉低power引脚一段时间模组才会开机,而NX1-CT与NE1模组上电就会自动开机。
MCU在开机或者唤醒NB模组后,接收到NB模组上报的“设备下载schema完成”指令(55 AA 00 BE 00 01 05 C3指令)后再进行数据上报,防止NB还未初始化完成而导致串口数据丢包。为防止NB自动进入睡眠,MCU可在上报数据之前进行睡眠锁定(禁止NB休眠),当所有上报工作完成且收到上报完成应答后再解除NB睡眠锁使其进入睡眠。

模组开机或唤醒1.png

NB模组在没有“睡眠锁定”,以及dp点上报业务完成后,NB模组会自动进入到深睡眠模式,进入到深睡眠模式前,NB模组会给MCU发送进入睡眠指令(55 AA 00 BE 00 01 06 C4),告诉MCU,模组即将进入深睡眠(PSM模式才会有深睡眠模式)。

模组开机或唤醒2.png

当NB模组进入深睡眠后,MCU可以通过下拉psm引脚唤醒设备(不同模组下拉唤醒时间有所不同,具体可以看模组硬件手册)。
建议用户在使用NB模组时候,不要对NB模组进行断电操作,NB模组处理完业务逻辑后,会自行进入到深睡眠模式(PSM模式才会有),NB模组在深睡眠的功耗在2ua左右。MCU通过psm引脚唤醒深睡眠的NB模组,NB模组联网速度会比NB模组断电后通过power引脚唤醒的速度更快,功耗会更低。
4.3 记录型数据与非记录型数据上报
4.3.1 记录型数据(08命令)数据上报:
mcu上报记录型数据成功,模组首先返回(55 AA 00 08 00 01 01 09)表示数据滞留成功。
若网络正常,数据会即时发送云端;
若设备短暂断网,NB模组会暂存下无法上报成功的数据,在下次网络恢复正常的时候模块会再次上传存储的数据。
每上报成功一条内容,模块就会返回一条 08 命令给MCU(55 AA 00 08 00 01 00 08),表示当前的记录型数据发送成功。
模块进入PSM或断电前,最多可以储存20条记录型数据。当超过 20 条后,模块会从最早储存的记录型数据开始循环覆盖。
下图为模组短暂断网后,MCU给NB模组发送记录型数据的交互流程:

记录型数据1.png

NB模组被唤醒后,NB模组会尝试进行搜网,搜网超时后,模组会进入深睡眠。下图为NB模组唤醒后,此时网络又恢复正常后,将上次休眠前暂存的记录型数据发送出去的交互流程:

记录型数据2.png

4.3.2 非记录型数据(05命令)数据上报:
该指令不做数据缓存,网络异常情况下会导致数据发送失败。所以建议MCU接收到NB模组上报的"下载schema完成指令"(55 AA 00 BE 00 01 05 C3指令)后再执行数据上报指令。
下图为MCU发送非记录型数据给NB模组的交互流程:

非记录型数据1.png

下图为NB模组处于网络异常情况下,接收到MCU模组发送的非记录型数据后,NB模组与mcu的交互流程如下:

非记录型数据2.png

在无网状态下发送非记录型数据,NB模组会给MCU返回发送失败信息。

五.NB模组OTA升级
NB模组在OTA升级期间,不需要mcu进行处理,mcu需要确保NB模组有电即可。下面展示的是“APP提醒升级”方式,进行OTA升级:

OTA升级1.png

在“涂鸦智能”app中打开待升级的设备,按照上图进行操作,NB模组升级时与MCU串口通信的整个流程如下:

OTA升级2.png

NB模组升级过程中需要注意以下几点:
1)MCU需要确保NB模组在升级完成前不断电,不然会升级失败
2)NB模组在升级过程中可以接收MCU下发的dp点数据
3)如果客户在调试阶段需知道ota文件现在下载的进度,可以发送查询命令“55 AA 00 C3 00 00 C2”查询当前设备下载的进度,NB会返回下载进度(55 AA 00 C3 00 02 01 58 1D 表示已经下载88%)

FAQ问题
1、为什么MCU都没来得及把数据发送给NB模组,NB模组就休眠了?
建议用户,在发送数据给NB模组前,将NB模组下发“睡眠锁定,禁止自动进入休眠”指令,等MCU发送完数据且收到响应后,再将NB模组进行“解锁睡眠锁”。

2、MCU将数据上报给NB模组,NB模组成功将数据上报给云端后,mcu需要对NB模组进行断电操作吗?
不建议用户在使用NB模组时候进行断电操作。NB模组处理完业务逻辑后,会自行进入到深睡眠模式(PSM模式才会有),NB模组在深睡眠的功耗在2ua左右。MCU通过psm引脚唤醒深睡眠的NB模组,NB模组联网速度会比NB模组断电后,通过power引脚唤醒的速度更快,功耗会更低。

3、为什么DRX模式下,APP端下发给设备的数据,设备不能即时接收到?
需要保证创建的产品PID选择了DRX模式,MCU在配置产品信息的时候是DRX模式,另外使用的SIM是DRX模式。

4、dp点上报过于频繁对于网络有什么影响?
由于NB网络属于低窄带,建议尽可能减少设备与基站之间的交互(将多个用户dp点整合成一条发送可尽量规避),另外将交互的频率也可适当降低,否则容易造成网络的并发后产生部分设备交互失败。