分享

BLE 数据包重传机制

 iamlijin 2019-05-15

处于连接态的两个BLE终端使用简单的“停等”机制进行通信,如下图所示,



图一 BLE 数据包重传流程图

每个BLE终端都维护两个1 bit参数:transmitSeqNum和nextExpectedSeqNum,分别指

示当前传输的数据包序号和下一个期待接收的数据包序号,它们与Packet中的SN和NESN字段一起维护Master和Slave之间的重传机制。

transmitSeqNum和nextExpectedSeqNum在connect建立时都初始化为0。

发送数据包时,对于SN字段,若数据包为新传,则设置为自身transmitSeqNum取值,否者与上一次传输一致;对于NESN字段,始终设置为自身nextExpectedSeqNum取值。

接收数据包时,transmitSeqNum和nextExpectedSeqNum按照如下原则进行更新: 

1  若SN字段与自身nextExpectedSeqNum一致,则表明该数据包为重传, nextExpectedSeqNum不变;否者为新传,并且需要将自身nextExpectedSeqNum取反。

 2  若NESN字段与自身transmitSeqNum一致,则表明接收到NACK,即上一次自己 发送的数据包失败,需要重发;否者表明收到ACK,需要发送新的数据包,并且将将自身transmitSeqNum取反。 

3  若接收到的数据包CRC错误,则不更新transmitSeqNum和nextExpectedSeqNum, 并重发上一次自己发送的数据包(判定收到了NACK) 以下处理流程如下图所示,



图二 数据包发送方和接收方处理流程图

如此设计,Master和Slave之间的“停等”重传机制可良好运转。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多