BLE5.2 CIS Data Flush Point点SN和NESN变化机制探讨

首先申明一下,以下理解不一定正确,都是根据Core5.2 Spec和LL.TS.p17 Spec的理解,如有误欢迎大家提出来,可以发我邮箱tuyafei007@gmail.com。

1.FT点后SN和NESN变化机制举例1:

 

 

2.FT点后SN和NESN变化机制举例2:

备注:
1.可以看到S在第一个Event的SubEvent4发送CIS NULL PDU,不应该发CIS Empty PDU,因为CIS Empty PDU属于CIS Data PDU,存在刷新点,那么对端如果没有到该笔数据的话,势必需要S重发,看起就不合理了。
2.请注意,如果S根本没有接收到数据包,它就不能发送,因为它不知道时序。对S来说三个黑盒这里应该是收到了M的数据包但是CRC是错误的,因为图示S这种情况下都向M发包了,说明肯定之前收到了M的数据包了。
至于如何知道接收到的对端数据对应的CisPayloadNum:
以M向S发的CIS Data PDU举例,比如在CIS Event1开始处才收到一笔NEW包(CIS Event0期间收到的包CRC均是错误的),收到的这笔数据的SN我们可以知道是0,那么可以推断出来这笔数据的CisPayloadNum是2或者0,即要么是P2,要么是P0包,如果是P2的话,那么S此时肯定已经收到P1了,但是我们目前只收到1笔NEW包,如果是P1包SN判断又不满足,因为P1包的SN为1,所以只能是P0包,也就是CisPayloadNum0。

3.发送和接收sn和nesn流程图(参考Core5.2 | Vol6,Part B,Page 2995):

4.FT点前后local sn和local nesn变化机制(参考Core5.2 | Vol6,Part B,Page 2997): 

When the transmitting Link Layer either does not send a CIS Data PDU or sends one but does not receive an acknowledgment for that PDU by the time the flush point occurs (see Section 4.5.13.5), the transmitSeqNum shall be incremented by one and the PDU shall not be retransmitted after the flush point.

当发送链路层不发送CIS数据PDU或发送一个但在刷新点(Flush Pointer)发生时未接收到该PDU的ACK时,transmitSeqNum应增加1,并且PDU不应在刷新点之后重新发送。 

When the Link Layer expecting to receive a CIS Data PDU either does not receive that PDU or fails to acknowledge the PDU by the time the flush point occurs, the nextExpectedSeqNum shall be incremented by one and the Link Layer shall not expect the PDU to be retransmitted after the flush point.

当期望接收CIS数据PDU的链路层要么没有接收到该PDU,要么在刷新点发生时未能ACK PDU时,nextExpectedSeqNum应增加1,并且链路层不期望PDU在刷新点之后被重新传输。

5.ACK Sequence(参考LL.TS.p17 | Page835):

 参考文档:

 [1] Core Specification, Versions 5.2

 [2] LL.TS.p17 Specification

 

posted @ 2020-04-14 09:42  twxbtx  阅读(758)  评论(0编辑  收藏  举报