原创 CSMA-CA算法源代码

2009-7-14 10:25 4957 11 11 分类: 消费电子

/*******************************************************/
* CSMA-CA算法

/*******************************************************/

CSMA-ca算法用在CAP期间传送data或者MAC command之前(ohlkw)
在CFP期间beacon frame,acknowledgment frame和data frame将不使用这个算法。

在使用了beacon的PAN中,MAC层将使用slotted CSMA-CA算法来在超帧的CAP期间传送数据,相反,没有使用beacon的PAN将使用unslotted CSMA-CA算法在超帧的CAP期间传送数据。这两种情况都将基于一种backoff周期的基本单位( aUnitBackoffPeriod)。(ohlkw)
在slotted的CSMA-CA算法中,每个设备的backoff period间隔将与PAN coordinator的超帧的间隔时间对齐。也就是说每个终端设备的第一个backoff周期必须和PAN coordinator的beacon对齐。
在unslotted CSMA-CA算法中,每个设备的backoff period周期并不与其他设备的backoff period相关,也就是说,每个设备的backoff period是独立的,不与其他设备对齐,包括PAN coordinator。

每个设备每次传送都将维护3个变量:
(ohlkw)NB:意思是CSMA-CA传送数据时backoff所需要的时间。(NB is the number
of times the CSMA-CA algorithm was required to backoff while attempting the current transmission),每次传送前NB都将清成0.
(ohlkw)
CW:竞争窗口的长度,我理解为CAP的长度。看原文不是很明白,看了流程图后大概明白,我想我们可以把CW理解为尝试次数,我们循环判断当前频道是否空闲,当判断到了一定次数后该频道依然忙则跳出循环,返回当前忙的状态,CW就是这个判断次数,默认为2次。不知道这样理解对不对。
这个CW之用在CSMA-CA模式下。(ohlkw)

BE: backoff exponent,就是backoff的指数。也就是表示在传送数据前需要等待的backoff个数。
下面是段伪代码,大概表明如何设置BE(ohlkw)
if(macBattLifeExt == FALSE)
{
     BE = macMinBE;
}
else
{
     BE = lesser(2, macMinBE); // set BE between 2 and macMinBE
}

注意: 如果macMinBE被设为0,那么冲突避免将在算法的第一次循环时被终止。(ohlkw)

经管在对频道进行评估的这段时间RX是被打开的,但是我们依然会将这段时间收到的数据包丢弃。
(ohlkw)
稍微总结下:首先CSMA-CA是在数据发送前进行的,他的工作就是对当前频道做出评估,是否可以进行传送。也就是利用芯片提供的CCA功能。
基于时间槽,基本时间单位是backoff period(slotted CSMA-CA)。
这个过程是在CAP间进行的
协议P144的流程图比较能够说明问题了。


李珂崴
Wonder Lee  

更多资料与技术讨论请联系:

上海无线龙通讯科技有限公司

联系人:司文铠

QQ876692208

MSN:siwenkai@hotmail.com

TEL13816689475

email:wxlsiwenkai@yahoo.com.cn

skype:sparksi01

公司网址:www.wxlsoc.com

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条