薛定谔的猫

介绍一种基于物联网的帧结构

0
阅读(29841)

 

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

PHY Header

PHY Payload

 

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节点。