中移动 NB-IoT (M5310-A)学习笔记

2023-11-08

一. 来自“M5310-A硬件设计手册V1.5”

  • DCE:Data Communication Equipment
    DTE:Data Terminal Equipment

 

  • 模块的三种工作模式:
模式 描述
Active 模块处于活动状态;所有功能正常可用,可以进行数据发送和接收;模块在此模式下可切换到 Idle 模式或 PSM 模式。
Idle 模块处于浅睡眠状态,网络保持连接状态,可接收寻呼消息; 模块在此模式下可切换至 Active 模式或者 PSM 模式。
PSM 模块只有 RTC 工作,网络处于非连接状态,不可接收寻呼消息; 当DTE(Data Terminal Equipment)主动发送数据或者定时器T3412(与周期性更新相关)超时后,模块将被唤醒。
  • 不同模式下模块功耗示意:

 

  • NB-IOT主要用到两种节电技术,分别是PSM(Power Saving Mode)eDRX(Extended DRX)

 

  • PSM:模块在PSM下的最大耗流为5uA。PSM 主要目的是降低模块功耗,延长电池的供电时间。

    ①模块进入PSM的过程如下:模块在与网络端建立连接或跟踪区更新(TAU)时,会在请求消息中申请进入PSM,网络端在应答消息中配置T3324 定时器数值返回给模块,并启动可达定时器。当  T3324 定时器超时后,模块进入PSM。
    模块在针对紧急业务进行连网或进行公共数据网络初始化时,不能申请进入PSM。

    ②当模块处于PSM模式时,将关闭大部分连网活动,包括停止搜寻小区消息、小区重选等。但是T3412定时器(与周期性TAU更新相关)仍然继续工作。

    ③进入PSM后,网络端将不能寻呼模块,直到下次模块启动连网程序或TAU时,才能发起寻呼。

    ④模块有两种方式退出PSM,一种是DTE主动发送上行数据,模块退出PSM;另外一种是当T3412定时器超时后,TAU启动,模块退出PSM。

    ⑤注意区分两个定时器:T3324 定时器是定时进入PSM,T3412定时器是定时启动TAU。

 

  • eDRX(增强型不连续接收)技术:通过延长DRX时间,减少终端的DRX次数和频率,从而达到节电目的。
    ①eDRX可工作于空闲模式和连接模式。
    ②连接模式下,eDRX把接收间隔扩展至10.24秒。
    ③空闲模式下,eDRX将寻呼监测和TAU更新间隔扩展至超过40分钟。
    ④eDRX节电效果相比PSM差些,但它提高了下行通信链路的可到达性,较为适合保持长连接等的应用。

 

  • 模块有两个串口:调试串口和主串口。
    主串口:TXD(发送数据到DTE设备的RXD端)、RXD(从DTE设备TXD端接收数据)、RI(振铃提示)
    调试串口:DBG_TXD(发送数据到DTE的串口)、DBG_RXD(从DTE的串口接收数据)
  • 模块作为DCE,并按照传统的DCE-DTE方式连接。
  • 主串口特点:
    8个数据位,无奇偶校验,1停止位。
    用于AT命令的发送。
    支持波特率:9600、115200。
  • 调试串口:
    仅用于软件调试。
    波特率为921600bps。
    会自动向外面输出log信息。
    log信息需要专门的软件抓取解析。

 

二. 来自“M5310-A AT使用流程实例”

  • 模组上电初始化是模组进行正常数据通信业务之前的必须要步骤,在初始化中,模组将会完成网络搜索、驻网、附着等流程。
  • 中移动模组上电初始化建议流程图:

 

  • 目前M5310-A已支持Band3/Band5/Band8/Band20/Band28频段。模组本身支持自适应工作频段功能,也支持锁定频段功能。
    锁频操作的串口指令(锁定 为 Band 5和 Band 8):
    AT+NBAND=5,8
  • UDP连接测试:
    AT+NSOCR="DGRAM",17,0,1                   //创建一个socket(17是UDP的协议标号,0表示随机产生的本地socket编号)
    AT+NSOST=0,183.230.40.158,5022,2,1024    //编号为0的socket向地址183.230.40.18的端口5022,发送2bytes数据,数据是1024
    //创建socket时,最后一位设置为1时,模组会缓存接收到的数据。然后用下面命令,对socket 0中缓存区读4bytes数据
    AT+NSORF=0,4
    AT+NSOCL=0               //关闭socket 0   
  • TCP连接测试(失败):
    AT+NSOCR="STREAM",6,0,1                   //创建一个socket(假设返回的是socket 0)
    AT+NSOCO=0,183.230.40.158,5021        //连接到远程服务器(在这里失败,显示 +NSOCLI: 1,之后进行任何操作均为ERROR)
    AT+NSOSD=0,2,3132                               //发送数据
  • 上面的查了一下,该返回值应该是说明该socket被关闭,需要重新开始流程。可能是连接错误或者超时。猜测应该是该开发板不支持TCP。(关系也不大,主要用的可能还是中移的OneNET平台,TCP可能不太用到)

 

三. 来自“M5310-A OneNET平台接入流程指导手册”

  • AT+MIPLCREATE
    ①作用:该指令用于在模组端(即M5310-A)创建一个通讯设备实体,同一时间一个终端只允许存在一个通讯设备主体。
    ②命令格式:AT+MIPLCREATE=<totalsize>,<config>,<index>,<currentsize>,<flag>
    ③参数解释:
        a.totalsize:表示config 部分的长度,按ASCⅡ计数
        b.config:具体的设备配置数据
        c.index:配置数据分片参数
        d.currentsize:当前分片部分数据长度
        e.flag:配置数据流结束符
    ④使用例子:
     AT+MIPLCREATE=49,130031F10003F2002304001100000000000000123138332E3233302E34302E34303A35363833000131F30008C000000000,0,49,0
    (中间部分为注册码,所有同一类型的终端设备都可以使用同一个同一设备注册码进行配置)
    ⑤返回值:
    (ref是设备实例ID,用于后续操作)
    +MIPLCREAT:<ref>
    OK
  • AT+MIPLDELETE
    ①作用:用于在模组端删除一个通讯设备实体
    ②命令格式:AT+MIPLCREATE=<ref>
  • AT+MIPLADDOBJ
    ①作用:用于在模组端添加一个待订阅的object及其所需的instance。
    ②命令格式:AT+MIPLADDOBJ=<ref>,<objid>,<inscount>,<bitmap>,<atts>,<acts>
    ③参数说明:
    a. ref:设备实例ID
    b. objid:Object ID
    c. inscount:实例个数
    d. bitmap:实例位图,字符串格式,每一个字符表示为一个实例,1表示可用,0表示不可用。
    e. atts:属性个数,默认设置为0即可。
    f. acts:操作个数,默认设置为0即可。
    ④使用例子:
    AT+MIPLADDOBJ=0,3303,1,"1",1,0
    AT+MIPLADDOBJ=0,3304,1,"1",1,0  
  • AT+MIPLDELOBJ
    ①作用:用于删除一个已经订阅的object及其所属的instance。
    ②命令格式:AT+MIPLDELOBJ=<ref>,<objid>
  • AT+MIPLOPEN
    ①作用:用于在模组端向OneNET 平台发起注册登录请求。
    ②命令格式:AT+MIPLOPEN=<ref>,<lifetime>[,<timeout>]
    ③参数说明:
    a. lifetime:本次注册平台的生命周期,单位是s
    b. timeout:注册的超时时长,可选参数,默认为30,单位为s
    ④使用例子:
    AT+MIPLOPEN=0,3000,30
  • AT+MIPLNOTIFY
    ①作用:用于在模组端向OneNET 平台上报指定资源的数据。
    ②命令格式:AT+MIPLNOTIFY=<ref>,<msgid>,<objid>,<insid>,<resid>,<type>,<len>,<value>,<index>,<flag>[,<ackid>]
    ③参数说明:
        a. ref:设备实例ID
        b. msgid:该resource所属的instance observe操作时下发的msgid
        c. objid:Object ID
        d. insid:Instance ID
        e. resid:Resource ID
        f. type:上报资源的数据类型(1-string,2-opaque,3-integer,4-float,5-bool,6-hex_str)
        g. len:value值的长度
        h. index:指令序号。可以发N条报文,从N-1到0降序编号,0表示本次Notify指令结束
        i. value:上报数据。
        j. flag:消息标识,指示第一条或中间或最后一条报文。
    ④使用例子:
    AT+MIPLNOTIFY=0,0,3303,0,5700,4,4,"29.8",0,0
    AT+MIPLNOTIFY=0,0,3304,0,5700,4,4,"29.8",0,0
  • AT+MIPLUPDATE
    ①作用:用于在模组端向OneNET平台发起设备存活时间更新请求。
    ②命令格式:AT+MIPLUPDATE=<ref>,<lifetime>,<withObjectFlag>
    ③参数说明:
    a. ref:设备实例ID
    b. lifetime:更新的lifetime值,单位是s
    c. withObjectFlag:是否需要同时更新注册的Object对象
  • AT+MIPLCLOSE
    ①作用:用于在模组端向OneNET平台发起设备注销请求。
    ②命令格式:AT+MIPLCLOSE=<ref>

 

  • +MIPLREAD
    ①作用:(OneNET平台请求MCU读取消息)平台下发Read数据读取操作时,模组收到服务器请求后,将通过串口上报该消息到MCU。
    ②命令格式:+MIPLREAD=<ref>,<msgid>,<objid>,<insid>,<resid>
    ③参数说明:
        a. ref:设备实例ID
        b. msgid:消息ID
        c. objid:Object ID
        d. insid:Instance ID,-1时需要读取该Object下所有资源
        e. resid:Resource ID,-1时需要读取该instance下的所有资源。
  • AT+MIPLREADRSP
    ①作用:MCU完成相应的Read操作后,向平台回复Read操作结果。
    ②命令格式:AT+MIPLREADRSP=<ref>,<msgid>,<result>[,<objid>,<insid>,<resid>,<type>,<len>,<value>,<index>,<flag>]
    ③参数说明:
        a. result:1-读取操作正确完成;11-Bad Request;12-Unauthorized;13-Not Found;14-Method Not Allowed;15-Not Acceptable。
        b. type:指定读取资源的数据类型,数字代表意义同上面的type。
        c. len:value值的长度
  • +MIPLWRITE
    ①作用:(OneNET平台请求写数据到终端)模组收到平台下发的数据后,通过串口上报该消息。
    ②命令格式:+MIPLWRITE:<ref>,<msgid>,<objid>,<insid>,<resid>,<type>,<len>,<value>,<flag>,<index>
  • AT+MIPLWRITERSP
    ①作用:MCU完成相关Write操作后,向平台回复Write操作结果。
    ②命令格式:AT+MIPLWRITERSP=<ref>,<msgid>,<result>
  • +MIPLEXECUTE
    ①作用:平台下发Execute执行操作到模组,模组再通过串口上报给MCU。
    ②命令格式:+MIPLEXECUTE:<ref>,<msgid>,<objid>,<insid>,<resid>[,<len>,<cmd>]
    ③参数说明:
    a. len:本次报文写入的命令长度
    b. cmd:字符串类型,下发的命令
  • AT+MIPLEXECUTERSP
    ①作用:MCU执行完Execute操作后,向平台回复Execute操作结果。
    ②命令格式:AT+MIPLEXECUTERSP=<ref>,<msgid>,<result>

 

四. STM32控制测试

  • 直接把命令发送到相应串口即可,使用比较方便。
  • 注意可能存在一些命令如:AT+MIPLNOTIFY=0,0,3303,0,5700,4,4,"29.8",0,0
    而串口函数一般也是传入字符串,这时候可能出现嵌套双引号问题。这种情况下,可以利用C语言的转义符,把里面一层的双引号前面加上\ 转义。
  • 注意波特率、停止位、数据位的设置要和 M5310-A 一致,即波特率9600,停止位1,数据位8。
  • 在测试时候,可以这样连线,方便调试:STM32的Tx -- M5310-A的Rx;M5310-A的Tx接电脑串口的Rx。
  • 实际应用可能要把相应的操作封装为一个API,比较方便后续STM32的板上开发。

 

N. 杂七杂八的思考

  • OneNET平台支持多种协议的接入,但实际上不管用什么协议,目的都是为了数据的传输,只是适用场景不同而已。如LWM2M(NB-IOT)、EDP、MQTT、HTTP、TCP等。
    那么不管用什么协议,设备端和云端对数据做的无非还是类似于数据库的基本操作,增删查改,只是不同协议的API 存在一定差异。因此我要掌握的大概就是:硬件端怎么实现、应用端怎么实现这些增删查改的操作。
  • 既然OneNET支持这么多种协议的接入,某种意义上好像就能实现所谓的统一,也和OneNET 的名称符合。但有个问题就是,采用OneNET的平台终究会存在一定的疑虑,例如中移物联网靠谱吗?相比起专门做云服务器的厂家来说稳定吗?
    不过目前看来开发接入的便利性、和自由可控,两者好像只能选其一。要稳定、自由可控,可以选择类似阿里云、腾讯云的服务器,然后自己去完成相关的API编写,理论上也能实现“统一”,可如果仅仅以一人之力,现实吗?

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中移动 NB-IoT (M5310-A)学习笔记 的相关文章

  • python中[:,2]是什么意思

    这是numpy的切片操作 一般结构如num a b c d 分析时以逗号为分隔符 逗号之前为要取的num行的下标范围 a到b 1 逗号之后为要取的num列的下标范围 c到d 1 如果是这种num b c d a的值未指定 那么a为最小值0
  • 农业土壤墒情监测系统解决方案

    一 方案概述 土壤墒情监测系统能够实现对土壤墒情 土壤湿度 的长时间连续监测 用户可以根据监测需要 灵活布置土壤水分传感器 也可将传感器布置在不同的深度 测量剖面土壤水分情况 系统还提供了额外的扩展能力 可根据监测需求增加对应传感器 监测土
  • Java如何将date日期格式转换为时间戳

    可以使用Java中的java util Date类的getTime 方法将日期转换为时间戳 例如 import java util Date public class Main public static void main String
  • Advanced Installer汉化版教程(打包程序,安装包制作)

    Advanced Installer汉化版教程 转载 打包程序 安装包制作 下载地址 http www crsky com soft 6776 html 1 新建一个安装工程 2 详细的设置工程文件 A 设置产品信息以及在控制面板里的一些信
  • C++扫雷制作(新手上路)

    文章目录 前言 制作软件 代码结构 结构体 刷新屏幕 创建雷区 游戏过程 按钮的制作 总结 前言 在熟读C primer plus 之后 为了进一步熟悉C 编程 制作了一个简易版扫雷 有何不足 有何见地 请大家评论留言 以下是游戏图片 制作
  • vue+elementUI的el-form的回车键登录,监听键盘来触发事件

    vue elementUI的el form的回车键登录 监听键盘来触发事件 1 当只有一个el input的时候 可以用elementUI的自带的回车键触发提交事件 但是有时候会同时触发刷新页面 这样可以在el form上添加 submit
  • [转]Linux存储入门:简易数据恢复方案--分区和LVM实战

    数据恢复有没有简易方案 IT工程师一般都知道如何操作和使用文件和目录 但是 对于系统如何构建出 抽象出文件和目录 一般就不熟悉了 至于更下层的概念 可能大家知道最多的就是驱动了 所以 为了规避这点 可行的简易方案之一 就是以黑箱方式使用te
  • 51. N-Queens

    The n queens puzzle is the problem of placing n queens on an n n chessboard such that no two queens attack each other Gi
  • 数据分析与可视化-R语言分析 (选择练习)

    1 多选题 可以运行R语言的操作系统包括 选项 A Linux B Windows C Mac OS D Android 答案 Linux Windows Mac OS 2 单选题 可以命令将R语言升级到最新版本 选项 A fleshR B
  • vue 的事件修饰符(v-on, v-model)

    先谈谈我对vue 的一些指令的理解吧 v bind 顾名思义是绑定的意思 但是只能绑定属性 语法糖 而 v on 是绑定一个事件 语法糖 v model 是双向数据的绑定 只能用于表单中 而值得一说的v model 相当于是 v bind
  • linux系统数据盘挂载

    前言 挂载前 最好是新的服务器 不要安装宝塔 我之前先安装宝塔 再挂载就有点费劲 需要考虑原来文件是否受损 当前教程属于新服务器下 先挂载数据盘 挂载步骤 查看磁盘信息 gt gt 将数据盘分区 gt gt 格式化数据盘 gt gt 创建一
  • Python怎么输出换行

    python怎样输出换行 Python怎么输出换行 0 摘要 由于特殊的输出要求 我们在使用print 函数时 不希望输出结束后自动换行 1 print 指定结束符 Print hello end Print world result he
  • Linux------网络基础1

    文章目录 计算机网络的发展历程 网络协议 计算机网络分层体系结构 局域网通信的原理 IP地址和 MAC地址的区别 TCP IP体系结构 计算机网络的发展历程 简单的了解一下就行 图就不提供了 1 最开始 计算机之间是相互独立的 不能沟通交流
  • python3.6 安装pyltp

    当时安装pyltp一直报错 缺少balabala 安装了都没有什么暖用 so成功后安利一下 1 安装wheel 下面两个文件针对不同的python版本下载一个即可 pyltp 0 2 1 cp35 cp35m win amd64 whl p
  • 2021年7月,关于技术和未来

    近期研究了一段时间梅花易数 作为一个从小接受唯物主义教育的社会主义接班人 自然曾经一度对这些所谓的封建迷信是不屑一顾的 后来随着年龄增长 才开始慢慢觉得应对这些传承下来的古老文化保持敬畏 然而 直到最近真正仔细研究了后才发现 梅花易数居然有
  • k8s 之 volume sc pv pvc 详解

    数据卷概述 Kubernetes Volume 数据卷 主要解决了如下两方面问题 数据持久性 通常情况下 容器运行起来之后 写入到其文件系统的文件暂时性的 当容器崩溃后 kubelet将会重启该容器 此时原容器运行后写入的文件将丢失 因为容
  • PWM移相

    PWM移相可以从两方面考虑 1 如果能够移动时基 那么移动时基是一种最简便的方法 2 如果没办法移动时基 那么改变比较值也是一种可行的办法 C2000系列DSP的ePWM模块对PWM移相有相关的应用说明 如下图所示 来源于2803x芯片手册
  • Qt实现跨窗口信号槽通信

    多窗口通信 如果是窗口类对象之间互相包含 则可以直接开放public接口调用 不过 很多情况下主窗口和子窗口之间要做到异步消息通信 就必须依赖到跨窗口的信号槽 以下是一个简单的示例 母窗口 mainwindow h ifndef MAINW
  • L1-7 前世档案

    L1 7 前世档案 网络世界中时常会遇到这类滑稽的算命小程序 实现原理很简单 随便设计几个问题 根据玩家对每个问题的回答选择一条判断树中的路径 如下图所示 结论就是路径终点对应的那个结点 现在我们把结论从左到右顺序编号 编号从 1 开始 这

随机推荐

  • 单机 steam_好玩不贵,一个人可以玩很久,steam百元单机游戏推荐

    steam市场上的游戏有琳琅满目 从一块钱到几百块的游戏充斥在市场中 如何在众多游戏中挑选自己喜欢适合的游戏呢 今天就来推荐一下2款百元左右的单机游戏 包你满意 1 缺氧 目前steam售价 本体58元 本体 7DLC Klei survi
  • 线性方程组解的分析:唯一解,无穷多解以及无解

    本文将总结关于线性方程组解的知识点 线性方程组 定义1 线性方程组 我们将形如下式的方程组称为线性方程组 a11x1 a12x2 a1nxn b1a21x1 a22x2 a2nxn b2 am1x1 am2x2 amnxn bm 9 9 a
  • window10配置OpenGL ES3.0

    1 下载书籍源码 地址 GitHub danginsburg opengles3 book OpenGL ES 3 0 Programming Guide Sample Code 2 下载mali opengl es模拟器 下载地址 建议下
  • allegro如何通过dra文件生产psm文件

    1 dra文件是可以用allegro打开的封装文件 但是要想被pcb调用 需要psm文件才可以 想要通过dra生成psm文件很简单
  • @ComponentScan注解进行扫描的几种方式。

    方式一 扫描包 返回是String的数组 所以可是多个包路径 也可是一个包路径 完整写法是 单个 ComponentScan basePackages xxx 多个 ComponentScan basePackages xxx aaa 注意
  • 2020美赛F奖论文(一):摘要、绪论和模型准备

    全文 2020美赛F奖论文 一 摘要 绪论和模型准备 2020美赛F奖论文 二 传球网络模型 PNM 的建立和影响因子分析 2020美赛F奖论文 三 足球团队指标和基于机器学习的球队表现预测 2020美赛F奖论文 四 模拟退火算法驱动的结构
  • 神经网络七:神经网络设置层的数量和尺寸

    本文就现在神经网络中层的数量和尺寸 分析其中的优缺点 在此特声明 本文的内容是来自 CS231n课程笔记翻译 神经网络笔记1 下 智能单元 知乎专栏 因本人有时会查阅这些相关的知识点 一直翻文档比较麻烦 特从文档中摘录复制写到博客中 其中的
  • Mac M1系统 miniconda安装、配置conda环境,及在conda环境中安装激活QIIME2

    Mac M1系统 miniconda安装 配置conda环境 及在conda环境中安装激活QIIME2 1 适配版本的miniconda软件安装包下载 windows MAC LINUX Miniconda Conda documentat
  • JavaScript——将json数组填充进excel表并下载保存

    今天遇到的一个问题就是 获取到猫眼电影票房总榜的数据后 怎么把他们填充进excel中 本文参考了另一篇博客 地址如下 https blog csdn net qq 34623560 article details 79928248 本文对其
  • flowable(九) 通过ui部署流程图

    下载xml模型 登陆到flowable modeler后台 上传部署 登陆flowable admin地址 ok
  • React基础(肆)———状态和循环渲染

    一 状态 什么是状态 import React Component from react export default class App extends Component state mytext 收藏 myShow true rend
  • 问题 C: 括号匹配

    题目描述 给你一个字符串 里面只包含 四种符号 请问你需要至少添加多少个括号才能使这些括号匹配起来 如 是匹配的 是匹配的 是不匹配的 是不匹配的 输入 第一行输入一个正整数N 表示测试数据组数 N lt 10 每组测试数据都只有一行 是一
  • 调试最长的一帧(第14天)

    看看流程 可见分页数据库的更新也是和场景的筛选绘制是同时进行的 再看看大图 第14天要进行左下角的 依照惯例 跟过去 现在开始步入正轨 发现第0个fileName为空 这是有问题的 创建pagelod时修正为 这次进来了 在这里删除 放入r
  • HTML5+CSS3D酷炫相册

    HTML5 CSS3D酷炫相册 图片预览 目录结构 源码 HTML
  • 2:数据结构复习线性表(一般集合的并集:链式解决方案)

    线性表的合并 例2 1 求解一般集合的并集问题 问题描述 已知两个集合A和B 现要求一个新的集合A AUB 例如 设 A 7 5 3 11 B 2 6 3 合并后 A 7 5 3 11 2 6 问题分析 可以利用两个线性表LA和LB分别表示
  • 数组最大连续子序列和

    题目 给定一个数组 其中元素可正可负 求其中最大连续子序列的和 这题是一道非常经典的面试题 会经常出现在各种面试中 具体有好几种不同时间复杂度的解法 那么最好的方法是用动态规划方法来求解 第一种 时间复杂度为O n 3 暴力法求解 三层循环
  • events.js:183 throw er; // Unhandled 'error' event 相关问题解决办法

    在启动项目的时候可能会出现以下问题 出现原因 出现这个问题的主要原因是因为端口被占用了 解决办法 查询端口号是否被占用 netstat aon findstr 8000 找到对应程序 tasklist findstr 9060 再任务管理器
  • 2015款Mac笔记本安装Windows10系统到外置移动硬盘教程

    终于把2015年的15寸Macbook Pro笔记本安装上了Windows10操作系统 并且是在外置的移动硬盘上安装的 运行的效果和用户体验也是非常棒 之前网上购买了加密的视频 但是这个视频必须是windows系统 还不能是虚拟机里面的系统
  • QT关键问题解决之paintevent理解

    基础概念 paintEvent QPaintEvent 函数是QWidget类中的虚函数 用于ui的绘制 会在多种情况下被其他函数自动调用 比如update 时 运行时机 一个重绘事件用来重绘一个部件的全部或者部分区域 下面几个原因的任意一
  • 中移动 NB-IoT (M5310-A)学习笔记

    一 来自 M5310 A硬件设计手册V1 5 DCE Data Communication EquipmentDTE Data Terminal Equipment 模块的三种工作模式 模式 描述 Active 模块处于活动状态 所有功能正