介绍一种基于物联网的帧结构
0赞|
Preamble |
Sync |
Length |
Dest |
Source |
Key |
Frame type |
ACK |
Node type |
Seq |
Net dest |
Net src |
Net control |
Ttl |
Pay load |
FCS |
|
HW |
HW |
1 |
1 |
1 |
2 |
1 |
1 |
1 |
1 |
1 |
0-54 |
HW |
|||
|
Network header |
Payload |
|
Mac Header
|
Mac Payload
|
Preamble and sync:前导码和同步码由CC1100硬件来实现。
Length:整个Frame的长度,从Dest到Payload不包括Length本身的长度1个字节。
Dest:目标节点的地址,8位的随机数。
Source:源节点的地址,8位的随机数。
Key:用户网络自定义密码,由地址分配时由Sink获取下发。程序编写时由MAC层自动添加,并接收验证。
Frame type:数据Frame的类型,5个bit。
ACK:1个bit,是否要求ACK回应。
Node type:2个bit,发送节点类型。BB=0,CH=1,CM=2,SINK=3。
Sequence:Frame的序列号(0x01-0xfe),用于避免发送重复Frame,随机产生。
Net Dest:目的节点的网络号,SINK=1,其他BB节点位(0x02-0xfe)。
Net Source:源节点的网络号,SINK=1,其他BB节点位(0x02-0xfe)。
Data type:2bit,簇间=1,簇内=2。
Router:1bit,0不需要路由,1需要路由。
Payload:应用层数据,0-54个字节
FCS:CRC校验,硬件完成。
Frame 类型表
|
Frame Name |
Value |
Comments |
|
FRAME_JOIN |
0x01 |
CM入网请求 |
|
FRAME_JOIN_ACK |
0x02 |
BB发回给CM的入网请求回应 |
|
FRAME_HELLO |
0x03 |
SINK建立网络发送Hello Frame |
|
FRAME_HEALTH |
0x04 |
BB上报给SINK(CM上报BB)的状态报告 |
|
FRAME_SENSOR_DATA |
0x05 |
CM上报(BB上报Sink)的传感器数据 |
|
FRAME_DATA_ACK |
0x06 |
CM上报数据的ACK |
|
FRAME_COMMAND |
0x07 |
SINK发送的控制命令 |
|
FRAME_COMMAND_ACK |
0x08 |
BB接到控制命令的ACK |
|
FRAME_ADDR_REQ |
0x09 |
BB地址请求 |
|
FRAME_ADDR_AUTH |
0x0A |
Sink地址授权 |
|
FRAME_ADDR_ACK |
0x0B |
BB对地址授权的ACK |
CM入网请求Frame,发送方式为广播,需要BB回应,入网请求回应Frame 格式参见Join Reply Frame 格式表如表3.4所示,Payload 为Sensor的类型。支持Sensor类型为16种。
Join Reply Frame 格式表
|
Frame Type |
ACK |
Node type |
Seq |
Sensor Type |
|
FRAME_JOIN |
1 |
NODE_CM |
0x01-0xfe |
0x00---0x0f |
BB接收到CM的入网请求后,如果队列已满,回复时Reply=0,否则,Relay=1,同意CM加入;CM在收到BB的ACK后,记录BB ID,如果被拒绝,则把BB ID加入到黑明单中。
SINK发送广播Hello Frame,Hello Frame格式参见Hello Frame 格式表如表3.5所示。BB收到Hello Frame记录到SINK的下一跳路由,等待固定时间间隔后,然后转发出去。Seq=0预留给Hello Frame,Net Dest=0xff,表示为广播类型,Net Src=0x01,代表源节点位SINK类型,Data Type=1,表示为簇间Frame,Router=1表示需要路由。Pay Load 中包括Hop_cnt和BB ID,Hop_cnt为跳数,BB ID为上一跳的网络号。
Hello Frame 格式表
|
Frame Type |
ACK |
Node Type |
Seq |
Net Dest |
Net Src |
Data Type |
Router |
Ttl |
Pay Load |
|
FRAME_HELLO |
0 |
NODE_SINK |
0x01-0xfe |
0xff |
0x01 |
1 |
1 |
1 |
2 |
BB发送给SINK的状态报告,BB收到Health Frame记录到邻BB的下一跳路由,等待固定时间间隔后,然后转发出去。BB发送给SINK的Health Frame格式参见Health Frame格式表(BB向SINK状态报告)如表3.6所示, CM发送给BB的Health Frame格式参见Health Frame格式表(CM向BB状态报告)如表3.7所示。Seq=0预留给Hello Frame,Net Dest=0x01,表示为目的节点为SINK类型,Net Src=0x02-0x0f,代表源节点位BB类型,Date Type=1,表示为簇间Frame,Router=1表示需要路由。Pay Load中包括BB ID、CM_NUM、CM_LIST,BB ID为上一跳的网络号,CM_NUM为目前存活的CM数量,CM_LIST为目前存活的CM列表。
Health Frame 格式表(BB向SINK状态报告)
|
Frame Type |
ACK |
Node Type |
Seq |
Net Dest |
Net Src |
Data Type |
Router |
Ttl |
Pay Load |
|
FRAME_HEALTH |
0 |
NODE_BB |
0x01-0xfe |
0x01 |
0x02-0x0f |
1 |
1 |
1 |
不确定 |
Health Frame 格式表(CM向BB状态报告)
|
Frame Type |
ACK |
Node Type |
Seq |
|
FRAME_DATA_ACK |
0 |
NODE_CM |
0x01-0xfe |
CM定时向BB发送状态报告,使BB知道自己的状态,并更新在线CM列表。
CM发送给SINK的数据Frame,CM上报的Sensor Frame格式见Sensor Frame 格式表(CM上报的传感器数据)如表3.8所示。Sensor Data为4个字节,表示采集到的传感器数据,传感器类型为16种(0x00-0x0F),CM发送数据后会等待BB的ACK,有时,上层的命令也会随着ACK发送下来。
8 Sensor Frame 格式表(CM上报的传感器数据)
|
Frame type |
ACK |
Node Type |
Seq |
Sensor ID and Type |
SensorData |
|
FRAME_SENSOR_DATA |
1 |
NODE_CM |
0x01-0xfe |
0x0000---0xff0f |
0x00000000-0xffffffff |
BB把固定时间内CM节点采集的数据融合在一起,然后通过路由,发送给SINK,如果数据包超过64字节,BB就采取分段发送的方式,每段发送不超过64个字节的数据。BB上报的Sensor Frame格式见Sensor Frame 格式表(BB上报的传感器数据)如表3.9所示。
Command Data Content:具体的数据内容描述。
Seq:Sensor节点的id号,1个字节。
Sensor type:传感器类型,1个字节。
Sensor data:传感器数据,4个字节。
Sensor Frame 格式表(BB上报的传感器数据)
|
Frame Type |
ACK |
Node Type |
Seq |
Net dest |
Net src |
Data Type |
Router |
Ttl |
Data len |
Command Data content |
|
FRAME_SENSOR_DATA |
0 |
NODE_SINK |
0x01-0xfe |
0x01 |
0x02---0x0 |
1 |
1 |
1 |
0x00-0xff |
|
BB 收到数据后,会发ACK给对应的传感器节点,否则,传感器节点会重复发送数据给BB,直到BB回应。BB向对应传感器节点发送的Data ACK Frame格式见Data ACK Frame 格式表(CM上报数据的ACK)
Data ACK Frame 格式表(CM上报数据的ACK)
|
Frame Type |
ACK |
Node Type |
Seq |
|
FRAME_DATA_ACK |
0 |
NODE_ BB |
0x01-0xfe |
SINK发送控制命令给CM,SINK记录有CM对应的网络号,CM的Frame序列号,CM ID 为命令的目标Id,Command 1个字节,Command Value为2个字节。这个命令通过路由,最终达到对应的BB节点。SINK发送给BB的Command Frame格式见Command Frame格式表(SINK发送给BB的控制命令)BB收到控制命令,会通过Seq查找CM列表,找到对应的CM ,在把这个数据发送。BB发送给CM的Command Frame格式见Command Frame格式表(BB发送给CM的控制命令)
Command Frame格式表(SINK发送给BB的控制命令)
|
Frame Type |
ACK |
Node Type |
Seq |
Net dest |
Net src |
Data Type |
Router |
Ttl |
CM ID |
Command |
Command Data |
|
FRAME_COMMAND |
1 |
NODE_SINK |
0x01-0xfe |
0x02- 0x0f |
0x01 |
1 |
1 |
1 |
0x00-0xff |
0x00-0xff |
0x0000-0xfffff |
Command Frame格式表(BB发送给CM的控制命令)
|
Frame Type |
ACK |
Node Type |
Seq |
Command |
Command Data |
|
FRAME_COMMAND |
0 |
NODE_BB |
0x02-0xfe |
0x00-0xff |
0x0000-0xfffff |
Command Data:控制命令具体数值。
CMD_SET_INTERVAL:采集时间间隔。
CMD_CHANGE_CHANNEL:变换信道。
CMD_SET_CONTROL:设置控制字。
SINK发送控制命令给CM,SINK记录有CM对应的网络号,CM的Frame序列号,Command 1个字节,Command Value为4个字节。这个命令通过路由,最终达到对应的BB节点。
