본문 바로가기
블루투스/LE Link Layer

LE - Acknowledgment / Flow control

by 테크쟁이 2023. 2. 5.
반응형

참고자료: https://www.bluetooth.com/specifications/specs/core-specification-5-3/

 

LE Data Physical Channel PDU의 Header 

- 자세한 내용은 "Data Physical Channel PDU" 참고

Header - LE 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 flow diagram

 

LE에서 SN/NESN과 ACK/NAK 흐름도

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