有源RFID系统中可靠通信的研究
2.3 防冲突处理
有源RFID系统实现的重点是防碰撞算法的实现。目前。这类算法的实现方法有空分多址(SDMA)、频分多址(FDMA)、码分多址(CDMA)和时分多址(TD-MA)等。该设计方案中采用ETSI 302 208标准中基于载波侦听(CSMA)的方法。CSMA是一种分布式介质访问控制协议,在读写器覆盖范围内,各有源电子标签都能独立地决定数据帧的发送和接受。
每个有源电子标签在发送数据帧之前,首先要进行载波监听,只有介质空闲时,才允许发送帧,与FDMA和TDMA相比,能更好地利用资源。因为这种通信方式在发送数据之前,一直在检测空气中是否存在相同频率的载波,如果有相同频率的载波,就不发送数据;如果空气中没有相同频率的载波,则表明现在的空间资源没有被占用,可以发送数据。这样,不仅提高了空间资源的利用效率,同时也提高了通信的可靠性。
利用CC2510支持传输前自动清理信道访问(CCA)的功能,实现CSMA。电子标签初始化完成后,程序进入主循环程序。电子标签开始载波监听,当CCA不为1时,表示空气中没有相同的载波数据时便发送相应的数据,各个电子标签采用竞争的方式发送。CSMA发送流程图如图3所示。本文引用地址:https://www.eepw.com.cn/article/157305.htm
2.4 重传机制
重传机制主要采用ACK(acknowledge)方式,即发送方为发送的每一数据包设置缓存和相应的重发定时器,若在定时器超时之前收到来自目的节点对此数据包的ACK控制包,则认为此数据包已经成功地传送。此时,取消对该数据包的缓存和定时,否则,将重发此数据包,并重新设置定时器。对于每个数据包,接收方都需要反馈ACK。
重传机制主要由以下功能函数实现。Init()函数用于设备初始化,设置DMA、时钟等;Send()函数用于发送数据包;ackTimeolJt()函数用于没有在规定时间内收到ACK,而重发数据包;waitForAck()函数用于等待接受ACK,既定时间内,收到ACK标示为T,反之标示为F;aekReceived()函数用于收到ACK,取消重传;Receive()函数用于接收规定格式的数据包;dataCheck()函数用于检测数据的完整和可靠;sendAck()函数用于送ACK反馈给发送方。重传机制程序流程图如图4所示。
评论