참고자료: https://www.bluetooth.com/specifications/specs/core-specification-5-3/
LE Data Physical Channel PDU의 Header
- 자세한 내용은 "Data Physical Channel PDU" 참고
LE에서 Acknowledgment와 Flow control이 사용되는 연결
- ACL connection
- CIS(Connected Isochronous Stream)
LE에서 Acknowledgment와 Flow control에 사용되는 파라미터
- transmitSeqNum (1 bit): 전송하는 패킷에 대한 식별에 사용
- nextExpectedSeqNum (1 bit): 상대 디바이스에서 전송한 마지막 패킷에 대한 ACK나, 재전송 요청에 사용
LE에서 Acknowledgment와 Flow control 운영 흐름
- 전송 Device에서는 ACK을 받으면 transmitSeqNum을 변경하고, SN에 할당한 후, 패킷을 전송한다
- 수신 Device에서는 수신한 패킷의 CRC ckeck 문제가 없어서 재전송이 필요 없으면, nextExpectedSeqNum을 변경하고, NESN에 할당 후, PDU를 전송한다 (ACK)
- CIS Data PDU에서는 flush가 발생하면, 재전송 과정을 중단하고, 새로운 PDU를 전송한다
- Spec에서 ACL 관련해서는 flush 설명이 없는 것으로 보아, ACL에는 flush가 없는것 같다 (개인생각)
LE에서 SN/NESN flow diagram
LE에서 SN/NESN과 ACK/NAK 흐름도
LE에서 Acknowledgment와 Flow control 운영 설명
- ACL connection 또는 CIS가 처음 생성될 때, transmitSeqNum = 0 , nextExpectedSeqNum = 0 이다
- LE Coded PHY에서 전송된 Data Physical Channel PDU를 재전송할 경우, coding scheme은 같아도 달라도 상관없다
- Data Physical Channel PDU가 재전송을 기다리는 상태에서, PHY Update가 발생하면, 재전송할 때 업데이트된 PHY를 사용해야 한다
- Data Physical Channel PDU를 재전송할 때, LLID, SN, CP, CTEInfo, payload는, 마지막 전송된 PDU와 같아야 한다
- CIS Data PDU를 재전송할 때, LLID, SN, NPI, payload는, 마지막 전송된 PDU와 같아야 한다
- PDU가 전송될 때, Header의 SN은 transmitSeqNum값으로 변경되지만, 재전송할 때에는 변경되지 않는다
- PDU를 수신 후, 수신한 PDU의 SN과 nextExpectedSeqNum이 다르면 재전송된 PDU이어서 nextExpectedSeqNum가 변경되지 않고, 같으면 새로운 PDU이어서 nextExpectedSeqNum이 변경된다
- PDU가 전송될 때, Header의 NESN는 nextExpectedSeqNum값이 된다
- PDU를 수신 후, 수신한 PDU의 NESN과 transmitSeqNum이 같으면 NAK이어서 재전송을 하고, 다르면 ACK이어서 transmitSeqNum은 변경되고 새로운 PDU를 전송한다
- 수신한 패킷이 invalid CRC match이면, 재전송 요청을 위해 nextExpectedSeqNum을 변경하지 않는다
- CRC check를 통과한 Data Physical Channel PDU의 SN, NESN, MD가 사용되어야 한다
- CRC check를 통과한 CIS Data PDU의 SN, NESN, CIE, NPI가 사용되어야 한다
- 수신한 PDU payload의 SN이, 전에 수신한 SN과 동일하면, 전에 수신한 PDU payload이므로 버려진다
- 송신 Link Layer에서 flush 발생 시간까지, 특정 payload number에 대한 CIS Data PDU를 전송하지 못하거나, 전송한 PDU에 대한 ACK를 받지 못했으면, 재전송을 중단하고, transmitSeqNum을 변경한다
- 수신 Link Layer에서 flush 발생 시간까지, CIS Data PDU를 수신받지 못하거나, 수신한 PDU에 대한 ACK를 할 수 없으면, 재전송 요청을 중단하고, nextExpectedSeqNum을 변경한다
- CIS Data PDU에서는 flush가 발생하면 ACK로 인정되어서, 연속된 두 개의 CIS Data PDU는 다른 data를 갖아도, 같은 SN을 가질 수도 있다
- 모든 CIS Data PDU에서 transmitSeqNum과 cisPayloadCounter0은 같은 값을 가진다
'블루투스 > LE Link Layer' 카테고리의 다른 글
LL Control PDU Payload (0) | 2023.02.09 |
---|---|
LE MD(More Data) field (0) | 2023.02.07 |
Data Physical Channel PDU (0) | 2023.02.04 |
Initiating PDU Payload (0) | 2023.02.04 |
Scanning PDU Payload (0) | 2023.02.04 |