原创 一个简单的通信协议(点对多点,灵活组队)

2008-10-30 00:52 3312 9 10 分类: 通信

用2430最诱人的地方应该还是ZigBee,但是有时候用ZigBee就像用宰牛刀杀鸡样,根本就没有那个必要,而且用ZigBee会降低实时性。用一般的时分多址(TDMA)就会显得简单而高效。


自己写的协议,应该是类于星状网的通信协议吧,所以下面的叙述的时候依然以网络来描述它。


这个网络的特征是由一个RX节点和1-250TX结点,RX结点类于ZigBee的网关吧,它要负责组网、维护和信息采集。而TX受控于RX,并且只能与一个RX通信,不能和别邻近RX通信。网络有网络标识和网络地址,前者用来区分各个网络,而后者用来区分一个网络内的不同设备。网络建立成功后不再接收新TX的加入。


 


先来说网络的建立,第一个网络第一次建立,设备上电后RX向TX发出重新配置网络广播(RE_CONFIG)次数应该保证所有在工作的TX点都能收到这一指令,告知TX将进行重新组网,而TX的接到这一指令后,将自己的参数清除,并将自己的网络标号写为GROUP_NEW,然后再次进入监听状态,RX在成功广播了RE_CONFIG后,也将自己的网络标号切换到GROUP_NEW,然后广播开始配置网络命令TX_START_APPLY_ID,实质是告诉TX,在READY_TIME后可以开始申请自己的网络地址(不同于网络标识哈),广播成功后,RX进入监听状态,而TX进入发送状态,TX在接收到TX_START_APPLY_ID指令READY_TIME后开始申请地址,申请地址的指令为ASK_FOR_ID,申请地址时,TX需要生成一个随机数,并且加入到发送的数据包中,也就是ASK_FOR_ID后的一个字为TX生成的随机数,后面作为校验用。当TX发送成功后,开始一个同步延时,在RX一方,一旦接收到ASK_FOR_ID,则分配一个地址,然后回复分配地址指令,格式是:SET_ID+g_id+id随机数,SET_ID为为指令,g_id是网络标识,id是分配给最后一个申请ID的TX的ID号,而随机数是由TX在ASK_FOR_ID指令中发来的。TX接收到SET_ID后,如果指令后第2字的随机数和它发出ASK_FOR_ID时的随机数一样,则完成了地址申请,并退出地址申请,不然就再次发ASK_FOR_ID指令,最多可以发10次,如果第10次仍然失败,则开启加入网络失败标志(如点亮一个红色的LED灯),然后进入睡眠。RX在SET_ID_TIME内一直处于接收状态,超时后,不再接收TX的申请,将已经加入网络的设备信息保存(可掉电的),切换网络标识为g_id,并退出网络建立的状态。同样的是TX在接收到正确的SET_ID指令后,将网络标识g_id和自己的id号保存(可掉电的),然后退出地址申请,进入设备正常工作模式。


网络维护,信息采集这两个事件合2为一了,网络建成后,RX周期性的向TX发READ_YOUR_INFO的指令,TX在接收到这一指令后向RX发出REPLY_INFO,(应用中REPLY_INFO可追加数据)。由于不能保证无线通信每次都能准确无误的通信成功,所在RX连续ERROR_COUNT_MAX后才宣告TX已经离开网络。


这样的网络建立成功以后任意重启设备,都不需要再重启设备。但是有几个问题还没有解决:


1,在第一个网络建立后,建立第二个网络时如何知道自己的网络标识(g_id)。


2,为什么网络建立后不可以再有TX加入网络。


3,当使用现场已经有一个网络在工作,如何避免新组建网络的RX不会去影响已经在工作的TX。


4,代码分块。


我是这样做的:


a) 已经有的RX定时去扫描新RX,新RX在发RE_CONFIG指令之前,应该有APPLY_G_ID_TIME时间去和已经存在的RX偿试通信,如果APPLY_G_ID_TIME时间内不能收到网络标识为g_id的RX回复,则说明这个g_id可用。


b)使用中如果在TX有可以输入自己的网络标识或者可以任意加入网络,则RX可以开放,在网络建立以后仍然接收并处理ASK_FOR_ID指令。


c)让TX在启动的ALLOW_RECONFIG_TIME内接收RX的RE_CONFIG指令,超时后如果没有加入网络则继续接收RE_CONFIG,反之则不再接收RE_CONFIG指令。


d)尚无良策。


 


最后说数据包的格式,


DESTADDR(1)+SRCADDR(1)+GROUP_ID(1)+DATA_TYPE(1bit )+resaved(7bit)+LEN(1)+SDATA(LEN)+CRC(2)


括号里的数字如无单位,则单位是BYTE。DATA_TYPE可以取DATA和COMMAND,而最后的SDATA为数据,长度由LEN指定,最后一字为CRC检验字。


---------------------END----------------

文章评论1条评论)

登录后参与讨论

用户397244 2009-3-23 21:29

谢谢
相关推荐阅读
emot 2016-06-29 23:39
想在网上直播来讲讲zigbee,大家怎么看
近来发现zigbee热度不减,不才想把所了解的zigbee都跟大家分享,大致按照这个来做。请大家提些建议,是不是还有特别重要但我遗漏的。先来攒些人,人够了我们就开。 --------------...
emot 2015-09-24 07:06
BLE 空中升级谈(二)
BLE 空中升级谈   -- CC2541 的产品开发中OAD注意事项(续)   TI CC2541支持多个硬件,多个软件对它进行空中升级,可以有不同的组合,硬件有    ...
emot 2015-09-24 07:01
BLE 空中升级谈
BLE 空中升级谈   -- CC2541 的产品开发中OAD注意事项     现在的智能设备(可穿戴,智能家居,智能玩具等)是越来越多了,大公司的产品颜值高,功能强大而完备的应该说是比比皆是,这里...
emot 2015-05-19 10:27
寻找共事的朋友[深圳科技园 嵌入式软件 可穿戴]
岗位职责:嵌入式软件工程师 招聘人数:2 简历语言要求:中文 语言能力:英语 掌握程度:熟练 工作地点:深圳南山科技园 工作待遇:面谈   工作职责: 1. 与硬件工程师合作完...
emot 2014-05-06 08:41
CC2530的通信速率实测
首先要说的是这里的测试包括了zigbee与非zigbee两种情况,测试zigbee的通信速率建议使用TI协议栈ZSTACK-2.5.1A(swrc126.zip)中的TransmitApp来进行测...
emot 2014-01-17 18:08
XBee与 RBee ZigBee透明传输模块互传测试
XBee与 RBee ZigBee透明传输模块互传测试   本次测试的目标是为了初步探索ZigBee透明传输模块的传输速率峰值范围,同时也要检查不同公司模块之间的兼容性。测试的目标是 由美国Digi提...
我要评论
1
9
关闭 站长推荐上一条 /2 下一条