友讯达模块学习记录
1. 软件功能的使用
-
设备可以设置为3种模式 (Master/slaver/repeater(中继) )
-
下图的信息设置,这里就是C字段 和CI 字段中间部分 表示设备制造信息,
M1、M2是
制造商域
,ID1~ID4 表示的是身份识别域
具体的帧结构如下: Data存放的是具体要发送的数据,C-Field 字段表示 是主机发给从机的标识符(当然也可以自定义),
-
RSSI 是接收信号强度,注意:L 字段表示字段长度,在发送数据的时候不会把
L字段写进去
,在接收时自动计算出数据帧的长度,并添加L 字段。 如果在接收时,勾选了RSSI 强度,L字段会把 RSSI 所占用的 1字节长度加进去。如下图所示 -
L 字段计算长度时不包含 它自己和CRC、START、STOP位,
VM_BUS帧结构
L字段表示整个包的长度(除去它自己),
C-field字段就是该软件中数据包类型的字段,可以参考下方数据接收的案例
2. 对WMBus 数据帧字段的解释
模式: 正常模式,安装模式,监听模式
- 正常模式:只接收存在于Slave 的列表中的终端,其余的自动过滤掉。
- 安装模式:它将接受所有的安装请求数据包。
- 监听模式:接收所有数据包
-
C 模式(”紧凑模式“)
-
T 模式(”频繁发送模式“)
-
工作模式的设置
-
寄存器地址设置
配置选项 寄存器地址 16进制设置值(返回值) 默认值 注意 工作模式 0x01 0 : S2
1 : T1
2 : T2
3 : S1
4 : R
10 : C1
11 : C20x01 AT命令配置 工作模式 "ATG" 0x00 - 0x04
0 : S2
1 : T1
2 : T2
3 : S1
4 : R
10 : C1
11 : C2掉电
-
Slaver 可以和Master 通过地址寄存器来进行绑定,
-
使用寄存器进行帮绑定Slaver
配置项 寄存器地址 设置值(返回值) 默认值 注意事项 -
使用AT 指令来绑定
设置角色信息
-
通过寄存器来设置
-
通过AT指令来设置
WM_BUS 使用遇到的问题和解决方案
-
Q:设置主从,slaver 发送数据主机为何收不到?
A:Master 必须绑定Slaver 的 M字段和 A字段,否则Slave 发送的数据 Master 会视而不见
-
Q:为什么Master 和Slaver 可以乱发数据?(直接上电相互发送数据,都可以接收到)
A:工作模式默认位Listing 模式,该模式可不会管你是不是主从,只要有数据它都会接收到。
-
A:这里的通讯协议只是一个手段,但是里面的数据格式和类型都是可以随意的,只是在于解析数据的时候确保该数据能被人区分。因此,我理解为主从设备互相发的消息都能被接收到,只是接收之后是否存放在本地的地址。
such as:
这里并没有开始接收数据,但是该软件还是收到了Master 发送的消息。只是没有存到本地而已
-
Q:那么如果有多个Master 呢,多个Master发布信息,但是Slaver 都会挨着接收,难道一定要接收了之后解析过M字段 和A字段 之后才能判断是不是我的Master?
做个流程图:T1 模式,接收数据之类 ,等待回复。姚哥那边设备做slaver ,我这里的模块发送消息,要让那边能接收到。
- 初始化阶段
- 使用AT 或者 ATJ 进入 配置模式/寄存器配置模式
- 安装模式设置为0 正常模式,
- 模块角色设置为Slaver
- WMbus 模式设置为T1或者C1,T1和C1有点像,T1是频繁发送模式。C1是紧凑模式
- 波特率就是用默认的19200
- 数据获取阶段
-
使用读寄存器读取到类似于下图的这块编码,方便Master 绑定子设备(如果是寄存器配置模式,也许能直接拿到返回值)
-
发送数据,应该是0x35这个数据发送寄存器
- 今天遇到的问题以及方案
- Master 发送数据的时候,如果是Listing 可以随机收到Slaver 发送的帧
读取/设置模块当前工作模式
读取/设置模块当前角色信息
开始/结束接收数据