实验箱通信协议V12刘明星.docx
《实验箱通信协议V12刘明星.docx》由会员分享,可在线阅读,更多相关《实验箱通信协议V12刘明星.docx(26页珍藏版)》请在冰豆网上搜索。
实验箱通信协议V12刘明星
产品名称
配置管理编号
文档编号
版本
V1.1
密级
智能实验箱
协议说明书
拟制:
日期:
审核:
日期:
审核:
日期:
批准:
日期:
版本历史
版本
日期
描述(修改原因)
作者(修改者)
V1.0
2012.3.23
草案初稿
徐朝农
V1.1
2012.6.11
根据八篇章的实验指导书,添加最新实验协议
林伟刁博宇
V1.2
2013.8.24
添加气体传感器、红外避障传感器实验协议
刘明星
目录
1、引言4
1.1、编写目的4
1.2、技术术语4
1.3、参考资料4
2、总体设计5
2.1、需求概述5
2.2、框架结构5
3、无线Zigbee通讯协议5
3.1、报文格式5
3.1.1、示例1:
传感器上传数据包格式6
3.1.2、示例2:
传感器控制命令包格式6
3.2、数据类型(Pkt_Type)定义规则7
3.3、数据类型定义规则8
3.3.1.1、传感数据类型(sensor_type)8
3.3.2、命令类型定义9
3.3.3、配置信息11
4、有线测试床协议12
4.1、在程序下载态时的协议12
4.2、在非程序下载状态的协议13
4.2.1、报文格式13
4.2.2、报文类型(Pkt_Type)定义规则13
4.2.3、命令类型定义14
4.2.4、配置信息的数据负荷定义15
5、典型工作流程16
5.1、灯的状态指示16
5.2、终端节点工作流程16
5.3、PAD工作流程16
6、地址分配方案17
1、引言
本文档针对智能实验箱节点定义出接口,将连接软硬件部分,为下一步的系统设计提供依据。
本文档重点描述框架结构以及功能需求,不涉及具体应用。
1.1、编写目的
根据项目开发需求,定义网关节点的接口和架构,本文档实现如下说明:
Ø无线Zigbee部分
⏹节点上报报文的数据结构
⏹命令报文的数据结构
⏹配置报文的数据结构
⏹节点无线地址的规定
⏹各类传感器编号规则
⏹CRC16定义算法
Ø有线部分
⏹命令报文的数据结构
⏹节点有线地址的规定
⏹配置报文的数据结构
1.2、技术术语
UART:
UniversalAsynchronousReceiver/Transmitter
TCP/IP:
TransmissionControlProtocol/InternetProtocol
UDP:
UserDatagramProtocol
Sink:
协调器节点
PAD:
上位机,这里代表上位机来进行描述
ACK:
回复信息
Node:
传感器节点
RFID读头:
低频13.56M/身份证卡读卡设备
1.3、参考资料
1.《NOKIA-CSDL说明文档》
2.《TCP-IP详解卷一:
协议》
3.《节点与协调器通信协议(V2.0)》
2、总体设计
分为两类通讯协议:
无线Zigbee通信和有线测试床通信。
无线Zigbee通信针对各类实验;有线测试床通信针对实验程序下载、传感板与2530子板与程序之间的配对检查,节点复位控制。
2.1、需求概述
根据节点的设计需要,无线通信采用Zigbee协议,有线测试床通信采用以太网协议(对节点来说为串口)。
有线通信与无线通信互不相干
2.2、框架结构
3、无线Zigbee通讯协议
3.1、报文格式
数据传输结构,如图所示。
字节数2
1
8
8
1
2
1
1
LEN-22
2
前导码
消息类型
TYPE
目的地址
Destination
源地址
Source
包序号
SN
数据长度
Len
包类型
Pkt_Type
冗余位
Reserved
数据指针
效验码
CRC16
*data
同步头
协议层
数据负载
CRC
HEAD
playload
footer
Ø同步头:
通讯数据包同步字节,包含前导码和帧起始分隔符。
前导码为两字节定义为“0xAA44”
ØType:
1byte上行数据为0x01,下行数据为0x02
ØDest_ID:
8bytes目标地址。
ØSource_ID:
8bytes源地址。
ØSeq:
1byte报文流水号(主要为了判断传感报文的乱序到达)
ØLength:
2byte整个报文的长度(以字节为单位)
ØPkt_Type:
1byte包类型。
分为Pkt_Type_Ind和Pkt_SubType_Ind两个部分。
ØReserved:
1byte冗余位。
可以考虑用于区分同一个mac上的系统类型的不同传感器。
Ø帧尾(CRC):
CRC16效验部分,检测数据包中的数据的完整性。
3.1.1、示例1:
传感器上传数据包格式
typedefstruct_UART_PACKET
{
uint8head1;//0xaa前导码
uint8head2;//0x44
uint8type;//上下行数据标识0x01表示上行,0x02表示下行数据
uint8dest[8];//目的地址8个字节Zigbee的MAC地址
uint8src[8];//源地址8个字节Zigbee的MAC地址
uint8sn;//数据包序号
uint8len[2];//len[0]存放高字节,len[1]存放低字节,len指示负载长度
uint8Pkt_Type;//数据包类型0x10表示普通传感器数据包
uint8Reserved;//冗余位
uint8data[3];//数据指针data[0]表示传感器类型(sensor_type),如0x01为温度,见3.3.1定义
uint8crc[2];//CRC16算法数据
}UART_PACKET;
3.1.2、示例2:
传感器控制命令包格式
typedefstruct_UART_COMMAND
{
uint8head1;//0xaa
uint8head2;//0x44
uint8type;//上下行数据标识
uint8dest[8];//目的地址
uint8src[8];//源地址
uint8sn;//数据包序号
uint8len[2];//len[0]存放高字节,len[1]存放低字节,len指示负载长度
uint8Pkt_Type;//数据包类型0x20表示普通传感器控制命令包
uint8Reserved;//冗余位
uint8data[2];//数据指针字节数可以变化见3.3.2定义
uint8crc[2];//CRC16算法数据
}UART_COMMAND;
3.2、数据类型(Pkt_Type)定义规则
在数据结构中数类型为一个字节,因此本规则将定义这一个字节数据每一位所代表的意义,如同所示:
ØPkt_Type_Ind:
描述了此数据包的类型,参见下节。
ØPkt_SubType_Ind:
描述了各种命令类型中实施的具体命令类型。
注:
Data_type:
根据Pkt_Type_Ind中的类型定义相应的业务类型或者子类型
Pkt_Type_Ind(4Bit)
Pkt_SubType_Ind(4Bit)
0001:
传感数据类型类
0000:
普通传感数据
(在处理上没有优先级)
0001:
事件型传感数据
0010:
命令类型类
0000:
普通传感器控制命令
0011:
命令ACK类
0000:
普通传感器控制命令ACK
0001:
保留
0010:
保留
其他:
无效
0100:
配置信息
0001:
节点上传自己的地址和传感板ID信息
0010:
配置信息确认ACK回应(暂不实现)
0011:
节点上传自己的网络地址
0100:
节点上传mac地址和PanID
其他:
保留
其他
其他
备注1:
包优先级说明,根据包的作用确定其优先级取值,优先级取值越小代表优先级越大,例如优先级取值为1,其优先性高于优先级取值为2,当前优先级映射中保留优先级1~5用来以后映射,对应关系如上表所示。
备注2:
所有命令ACK回应都是原始命令中的Pkt_Type_Ind改为0011,其他不动。
备注3:
配置信息ACK回应都是原始命令中的Pkt_SubType_Ind改为0010,其他不动
例如:
(1)、当Pkt_Type_Ind=0001时
Sensor_Type与Sensor_data具体定义如下:
data_Type:
1byte传感数据类型。
对于普通传感器类型,具体定义见6.1.1描述。
(2)、当Pkt_Type_Ind=0010时
Pkt_SubType_Ind=0000、0001时无效。
Pkt_SubType_Ind=0011时,
data_Type:
1byte请求命令类型,具体如下:
0x01:
请求分配节点ID,此时Data域无效。
3.3、数据类型定义规则
3.3.1.1、传感数据类型(sensor_type)
根据现有的传感器定义出如下表格。
可根据传感器数据手册定义另行修改
传感器
类型
备注
0x00(保留,6.2.1节中使用)
温度
0x01
湿度
0x02
电压
0x03
三轴角速度X轴
0x04
三轴角速度Y轴
0x05
三轴角速度Z轴
0x06
光照
0x08
两字节数据
开关
0x1C
比如窗帘继电器
三轴加速度X轴
0x19
三轴加速度Y轴
0x1A
三轴加速度Z轴
0x1B
气体传感器(CO2和O2)
0x1E
前2个字节为CO2值,后2个字节O2值
语音识别
0x23
识别一个短句,输出一个数值。
短句事先录入,与数值是一一对应的关系。
短句编号示例:
“1号”:
0x11“2号”:
0x12
“红灯”:
0x21“绿灯”:
0x22
“亮”:
0x31“关”:
0x32
交流电机
0x24
暂时未规定数据
直流电机
0x25
暂时未规定数据
超声测距
0x26
数据为一个整数,表示距离
扬声器
0x27
LED灯
0x28
点对点通信
0x29
红外避障传感器
0x2D
状态值0x01有障碍区,0x00无障碍区
广播通信
0x30
射频信号强度
0x31
数据为一个1字节整数,表示功率
组包实验
0x32
源节点上报路由
0x33
数据为2字节整数,第一个为源节点号,第二个为目标节点号
目标节点上报路由
0x34
数据为2字节整数,第一个为源节点号,第二个目标位
协调器控制
0x35
指定路由实验
0x36
动态自组网
0x37
两个字节表示父亲的网络地址
设定功率
0x38
网络地址
0x39
两个字节表示网络地址
MAC地址和PANID
0x40
10个字节前8个表示MAC,后面PANID
时间同步报文
0x41
四个字节表示当前时间
3.3.2、命令类型定义
在UART数据包当发送命令时,数据域中的传感器类型和命令格式如下图所示:
普通传感器的命令类型定义如下:
传感器
测试用传感器类型
备注
传感器节点本身
Node_Reset:
1(1字节命令,无参数)
温度
湿度
电压
三轴角速度X轴
三轴角速度Y轴
三轴角速度Z轴
三轴加速度X轴
三轴加速度Y轴
三轴加速度Z轴
气体传感器
Switch_Off:
0(无参数)
Switch_On:
1(无参数)
红外避障传感器
Switch_Off:
0(无参数)
Switch_On:
1(无参数)
开关
大灯
Switch_Off:
0(1字节命令,有1个字节参数)
Switch_On:
1(1字节命令,有1个字节参数)
交流电机
(1)ACMotor_Foward:
1(1字节命令,无参数)
(2)ACMotor_BackWord:
2(1字节命令,无参数)
(3)ACMotor_ContinuousForward:
3(1字节命令,1字节参数,如下)
ACMotor_ContinuousForward+Spped
(1字节命令+1字节速度参数)
(4)ACMotor_ContinuousForward:
4(1字节命令,1字节参数,如下)
ACMotor_ContinuousBackward+Spped
(1字节命令+1字节速度参数)
(5)ACMotor_Stop:
5(1字节命令,无参数)
直流电机
(1)DCMotor_Foward:
1(1字节命令,无参数)
(2)DCMotor_BackWord:
2(1字节命令,无参数)
(3)DCMotor_ContinuousForward:
3(1字节命令,1字节参数,如下)
DCMotor_ContinuousForward+Spped
(1字节命令+1字节速度参数)
(4)DCMotor_ContinuousForward:
4(1字节命令,1字节参数,如下)
DCMotor_ContinuousBackward+Spped
(1字节命令+1字节速度参数)
(5)DCMotor_Stop:
5(1字节命令,无参数)
超声测距
Switch_Off:
0(无参数)
Switch_On:
1(无参数)
扬声器
Play0:
(参数为乐谱内容,后面前两个字节为乐谱数据域长度,不包括自身)
Pause1:
无参数
Stop2:
无参数
LED灯
On:
1
Off:
0(参数:
0x01表示黄灯,0x02表示红灯,0x03表示绿灯)
语音识别
On:
0
Off:
1
点对点通信
0x29
On:
1表示点对点实验(协调器向所有节点广播启动命令,但只有1,2号节点能够解析并启动点对点通信)
Off:
0(停止命令同上)
广播通信
0x30
On:
1表示广播实验
Off:
0(协调器向所有广播,但只有123能够解析命令包,启动点对点通信)
射频信号
0x31
射频功率
0x32
参数为功率值一个字节
源节点上报路由
0x33
目标节点上报路由
0x34
数据为2字节整数,第一个为源节点号,第二个目标位
协调器控制
0x35
第一个字节为实验内容:
0x01为广播实验
0x02为Zigbee组包实验后接3个字节为点灯控制命令
0x03为射频信号强度实验
0x04为Zigbee地址与参数实验
0x05为指定路由实验参数为1号节点的MAC和2号节点MAC
0x06时间同步实验后面一个字节参数为0x01开始,0x00停止
指定路由实验
0x36
0x010x00发给1号节点启动实验
0x01网络地址发给2号节点启动试验
0x00停止实验
动态自组网
0x37
0x01发给4号节点,启动周期发包
0x00停止
设定功率
0x38
1个字节的功率值协调器和端设备都可以改
时间同步实验
0x41
0x00一个字节表示停止
3.3.3、配置信息
当节点发送配置信息时,数据域中格式如下图所示:
DataType
Data
DataType
Data
其中,DataType定义为:
信息类型
数据类型取值
数据备注
Mac地址
0x02
Mac地址(8字节)
传感器板ID
0x03
5字节
程序版本
0x04
1字节
传感板ID定义:
厂商ID
传感器板ID
信息类型
数据类型取值
数据备注
厂商ID
0x01
深联
1字节
其他
保留
传感器板ID
0x01
六轴传感板
4字节
0x02
超声波+光+温湿度+扬声器传感板
0x03
语音板
0x04
电机控制板
0x05
RFID板
0x06
气体传感器板
0x07
保留
程序版本定义如下:
程序内容
版本ID
实验一
0x01
实验二
0x01
实验三
0x01
实验四
0x04
实验五
0x01
实验六
0x06
实验七
0x07
实验八
0x08
保留
4、有线测试床协议
4.1、在程序下载态时的协议
采用串口协议:
波特率115200bps,8位数据位,1位停止位,1个起始位。
分为两步:
(1)进入bootloader模式,用户端发送
SOF(1byte)
LEN(1byte)
CMD(1byte)
其中:
SOF:
帧的起始字节,恒定为0xFE;LEN:
恒定为0x00;CMD:
恒定为0x4F。
(2)用户端发送
SOF(1byte)
LEN(1byte)
CMD1(1byte)
CMD2(1byte)
DATA
FCS(1byte)
SOF:
帧的起始字节,恒定为0xFE;
LEN:
DATA字段的长度;
CMD1:
恒定为0x4D,表示远程的控制命令;
CMD2:
具体的操作命令,包括:
●0x01:
写flash,DATA字段的前两个字节存放写flash的首地址(其中DATA[0]存放地址的低字节,DATA[1]存放地址的高字节),DATA字段剩余部分长度不可超过64字节,存放要烧写的程序片段。
●0x02:
读flash,DATA字段的前两个字节存放读flash的首地址(DATA[0]存放地址的低字节,DATA[1]存放地址的高字节),可以读取此首地址开始的连续64个字节数据
●0x03:
如果确定节点上应用程序代码可用,可发送该命令取消节点上电后对应用程序文件的校验,减小节点启动时间
FCS:
存放CMD1、CMD2、DATA三个字段的crc校验值。
处理完用户命令后,节点返回的响应数据包格式如下:
SOF(1byte)
LEN(1byte)
CMD1(1byte)
CMD2(1byte)
DATA
FCS(1byte)
SOF:
帧的起始字节,恒定为0xFE;
LEN:
DATA字段的长度;
CMD1:
恒定为0x4D,表示远程的控制命令;
CMD2:
响应包中CMD2值=(命令包中CMD2)or0x80,具体响应如下:
●0x81:
对写flash命令的响应
●0x82:
对读flash命令的响应,DATA字段的第2个和第3个字节存放已读flash的首地址,DATA[1]存放地址的低字节,DATA[2]存放地址的高字节。
其后存放读取到的64个字节数据
●0x83:
对0x03命令的响应
DATA:
该字段的第一个字节指示命令执行后的状态:
●0x00:
成功
●0x01:
失败
FCS:
存放CMD1、CMD2、DATA三个字段的crc校验值。
4.2、在非程序下载状态的协议
4.2.1、报文格式
数据传输结构,如图所示。
与3.1相同
4.2.2、报文类型(Pkt_Type)定义规则
在数据结构中数类型为一个字节,因此本规则将定义这一个字节数据每一位所代表的意义,如同所示:
ØPkt_Type_Ind:
描述了此数据包的类型,参见下节。
ØPkt_SubType_Ind:
描述了各种命令类型中实施的具体命令类型。
注:
Data_type:
根据Pkt_Type_Ind中的类型定义相应的业务类型或者子类型
Pkt_Type_Ind(4Bit)
Pkt_SubType_Ind(4Bit)
0001:
保留
0010:
命令类型类
0000:
节点、传感控制命令
0011:
命令ACK类
0000:
节点控制命令ACK
0001:
保留
0010:
保留
其他:
无效
0100:
配置信息
0001:
PAD请求节点的配置信息(无数据负荷)
0010:
配置信息确认ACK回应(无数据负荷)(暂不实现)
0011:
节点上传自己的配置信息(数据负荷见4.2.4)
其他
其他
备注1:
所有命令ACK回应都是原始命令中的Pkt_Type_Ind改为0011,其他不动。
备注2:
配置信息ACK回应都是原始命令中的Pkt_SubType_Ind改为0010,其他不动。
4.2.3、命令类型定义
在UART数据包当发送命令时,数据域中的传感器类型和命令格式如下图所示:
普通传感器的命令类型定义如下:
传感器
测试用传感器类型
备注
传感器节点本身
0x00
Node_Reset:
1(1字节命令,无参数)
温度
3.3.1定义,以下同
湿度
电压
三轴角速度X轴
三轴角速度Y轴
三轴角速度Z轴
三轴加速度X轴
三轴加速度Y轴
三轴加速度Z轴
开关
灯
扬声器
Switch_Off:
0(1字节命令,无参数)
Switch_On:
1(1字节命令,无参数)
有参数(1字节,0x00表示语音识别,0x01表示黄灯,0x02表示红灯,0x03表示绿灯,0x04表示扬声器)
交流电机
(1)ACMotor_Foward:
1(1字节命令,无参数)
(2)ACMotor_BackWord:
2(1字节命令,无参数)
(3)ACMotor_ContinuousForward:
3(1字节命令,1字节参数,如下)
ACMotor_ContinuousForward+Spped
(1字节命令+1字节速度参数)
(4)ACMotor_ContinuousForward:
4(1字节命令,1字节参数,如下)
ACMotor_ContinuousBackward+Spped
(1字节命令+1字节速度参数)
(5)ACMotor_Stop:
5(1字节命令,无参数)
直流电机
(1)DCMotor_Foward:
1(1字节命令,无参数)
(2)DCMotor_BackWord:
2(1字节命令,无参数)
(3)DCMotor_ContinuousForward:
3(1字节命令,1字节参数,如下)
DCMotor_ContinuousForward+Spped
(1字节命令+1字节速度参数)
(4)DCMotor_ContinuousForward:
4(1字节命令,