CSMA/CA组网算法浅谈

10 篇文章 10 订阅

一直在做物联网这块,前几年只是写应用层,对于组网的一些算法只能说知道,具体

的实现不是很了解。最近正好有个小型的物联网项目,于是就自己写了一套组网算法,

经过尽半年的测试,磕磕碰碰总算上线了,记录下,也算是给自己的一个阶段性总结

吧。

一、算法选择

首先根据时间来划分,分为TDMA算法和CSMA/CA算法;根据有无中心节点,又可分

为有AP网和无AP网络;根据多跳路由算法,又可分为集中式组网和分布式组网。

考虑到我的网络应用场景和数据速率,我首先选择了基于CSMA/CA的分布式组网方案,

减少网关的路由算法复杂度,根据最优父节点和下一跳算法来减少路由表大小和数据包

长度。CSMA/CA适合于小型的数据速率低,数据不频繁的网络。TDMA适合于高速的网

络(个人理解)。

二、CSMA/CA算法理解

     CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance) 即载波侦听多路访问/冲突避免。

采用该协议要求设备要主动避免冲突而非被动侦测的方式来解决冲突问题。避免冲突的方法主要有两个: 
       1)监听窗口机制,监听到信道空闲时,并不是立即发送,而是等待一段时间再发送数据(本次讨论重点)。 
       2)多主冲突,用RTS/CTS解决(不是本次讨论重点);

协议的主要流程如下: 
      1)首先检测信道是否有使用,如果检测出信道空闲,则等待一段随机时间后,才送出数据。 
      2) 接收端如果正确收到此帧,则经过一段时间间隔后,向发送端发送确认帧ACK。 
      3) 发送端收到ACK帧,确定数据正确传输,在经历一段时间间隔后,再发送数据。


1、监听窗口算法

数据要发送之前,首先设置一个监听窗口,窗口期内如果收到数据则处理接收数据,同时从新获取监听窗口。

在监听窗口结束时候,再次读取芯片状态,判定芯片是否正在解调一个数据包(也可以用RSSI值来判定),如

果正在接收,则放弃本次发送,等待接收完成再去获取一个监听窗口。这就是监听窗口的作用,同时也是CSMA/CA

算法的核心思路。

实现:

1)要有一个随机种子,可以用真随机数发生器,也可以用AD采样值也可以用上电不初始化的一块RAM值当做

随机种子,运用rand()函数获得随机数;

2)监听窗口的单位为能够识别一个信号的最小周期,这个查看手册都有这个指标,窗口时间=rand()*一个窗口单位时间;

3)在冲突比较严重时候,可以开启两个窗口,第一个监听窗口长一些,第二个监听窗口短一些;

4)以上只是解决了单向发送数据问题,如果数据是双向的,还可以根据业务层去划分竞争窗口的优先级;

2、应用注意点

1、在接收时候,注意过滤掉接收缓存队列重复数据包;

2、在发送时候,过滤掉发送缓存队列的的重复数据包;

3、发送时候可以增加退避算法,就是如果上次发送成功,则本次发送增加退避窗口;如果上次发送失败,则本次不增加

退避窗口;如果更加智能,则可以实时统计发送成功率,然后根据发送成功率判定是否增加退避窗口;主要是为了解决同

一个传感器数据连续上报成功,其它传感器数据上不来情况;

4、增加发送失败维护逻辑,防止射频端死机;

5、增加接收失败维护逻辑,防止射频端死机;

6、单次通信失败,不能作为从新组网依据,否则在多个传感器时候,会有大量的上线/掉线情况;要做冗余设计;

7、如果发送间隔设置很短,可以去掉ACK机制;如果间隔时间长,增加ACK机制(程序可以根据设定间隔,自动改变)。

3、SX1278

1、测试发现,在信号良好情况下,一次通信成功率大概在97~99%;

2、测试发现0x18寄存器提示正在解调数据,但是有8%左右的概率是误收,并不能解调出数据;

3、监测RSSI发现,会偶尔出现一个很小的值,官方解释是把干扰当做信号解调了;

4、监测发现,不同的频点,在距离近的时候,能够收到数据;

5、如果射频前端打静电,则RF不能收也不能发,但是SPI可以抄读寄存器,读取RSSI值是一个很小的定值;只能复位芯片

    才能恢复。

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值