CC1310 15.4 stack应用总结

在没有任何支援(反正没有得到任何回应)的情况下终于基本搞完一个项目了,1310实现了星型网络,负责网络的组建和管理,比如加入网络,网络号变更,在线检测等。总结一下15.4stack应用的一些东西吧。

1 三个模式

15.4stack实现了3种模式:beacon,non beacon,以及跳频(FH)模式。beacon模式是同步模式,大概是说主机周期性发送beacon,节点设备根据beacon同步,感觉收发通信都在一个beacon周期内完成,所以说它适合哪种上下行数据对延时要求比较高的场合;non beacon是非同步模式,据说适用于下行数据量远小于上行数据的场合;fh模式可以跳频,说起来还没怎么搞清楚如何跳频的,只是觉得切来切去挺复杂,一开始看上了它的省电性能,后来速度慢,没玩了。

2功耗

论功耗就要看节点设备是否sleepy了,本以为只有fh模式下分sleepy 和non sleepy的,后来发现全特么都有sleepydevice,根据RXON_IDLE宏来确定是否sleepy。这点坑了我好久,谁让它文档只有在FH模式下才明确提出来呢。若有sleepy 设备,感觉FH最省电,节点设备定时醒来poll主机,是否有数据,有则发送;non beacon模式次之,因为只要连上了,sleepy时也是没有数据传输的,同样的定时醒来做polling;beacon就最耗电了,因为至少定期发送beacon帧。若是只有non-sleepy的节点设备,似乎差别不大。在我做的这玩意里,1310电流怎么折腾都不大,大的是另一个玩意,上电就上百ma,1310的耗电都忽略了,省事。

3各个模式的实现及问题

        没有sniffer 工具,没有,没。。。有。。。。。

        都是在sdk的示例程序上玩的,可是死活玩不出beacon mode。按照一般做法,设定config.h和features.h的各个宏后,理论上应该就是beacon模式啊。sensor连上collector后就没有定期的beacon了,所以后来都没法通信,百思不解。。也许,是因为没有设置beacon payload(根据文档说明要设置)?然鹅这不是示例程序吗,应该很完整吧,后来不玩这个模式了。

        最先玩的是fh,一开始接手时就这个模式的原版工程。fh下的sensor都设定为sleepy 模式,加上一开始认为sleepy省电,一直认为这是最好的实现方式。问题是,sleepy设备太慢了,休眠一段时间起来poll主机,主机再发命令,和项目需求不符。终于改了polling interval,可是不能太短,短了整个系统崩了。。这涉及到很多东西,我了解的太少了,各种config打头的宏整的我头晕,文档没有说明白。搞来搞去,连接多个节点时都有这样那样的问题,比如数据通信偶尔失败。感觉是多个设备有收有发导致网络繁忙冲突了。。

        后来玩的non beacon模式,一样的设置config.h 和feature.h相关宏。然后吸取了fh的相关教训,痛下决心研究和各种碰壁,终于实现了non beacon和non sleepy device的系统。

4 细节

 (1)sensor设备地址的选择

          sleepy通信需要short addr,non sleepy通信需要extended addr,可是怎么实现?一开始我被原版的FH+sleepy 设备完全限制住了,msg发送函数是short addr。天真的以为在config.h里设置RXON_IDLE为true就好,然并卵,系统时通时不通,改出一脸懵。后来知道了,原版sensor的msg发送函数是阉割的,只适用于sleepy模式下 的短地址,看了示例程序才终于确认,当然也是理解逐渐加深才确认的。当然,后来是non beacon模式下实现了non sleepy的数据收发,再后来才觉得fh模式下也差不多这样。

(2)数据发送的ack

        其实可以设定不要ack,只要能确定数据可以准确到达目的地。至少不要ack可以减少网络吞吐量。但是多个sensor节点时还是加上ack比较好。至少可以在无ack时来个retry。

(3)indirect和direct发送

        文档里也有这些描述,三个模式都搞了庞杂的图表来讲解。可是少了最关键的一句提示:在对方是sleepy 设备时,用indirect 发送,此时数据应该只是被压入队列,等设备poll时发送出去;如果对方是non sleepy设备,用direct发送,因为人家是always on的,随时能收到。所以看例程,sensor to collector是direct,collect to sensor时,若sensor 是non sleepy,则direct,否则indirect。

(4)广播

        这个特别说一下,因为通常会出现主机向所有设备发送一个命令的情况。三个模式下的实现不相同。

        beacon模式,设置beacon payload(在哪里设置呢?例程为啥没看到。。。要自己添加上去吗?),在periodic 的beacon帧里把广播msg发出去,完美!

        fh模式,例程就有,一开始一度以为只有fh能有广播发送,就因为例程只明确支持fh模式的广播。因为fh可以设置一个广播间隔,每间隔固定时间所有sensor都进入广播channel侦听广播。

        non beacon模式,就是fh模式的广播代码,去掉fh的判断。但是有个前提:接收广播的必须是non sleepy 设备,不然它sleep状态下收不到。

        另外,fh和non beacon模式下的广播发送不用ack,这是肯定的,哪个广播需要回应啊。只是后来才明白。

       

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值