74
BLUETOOTH LE CONTROLLER [email protected] 윤경록

Bluetooth LE controller

Embed Size (px)

Citation preview

Page 1: Bluetooth LE controller

BLUETOOTH LE CONTROLLER

[email protected]

윤경록

Page 2: Bluetooth LE controller

ARCHITECTURE

Page 3: Bluetooth LE controller

PHYSICAL LAYER

Page 4: Bluetooth LE controller

PHYSICAL LAYER

BLE는 frequency hopping spread spectrum이라고부르는기술을이용하는데, 이기술에서 radio는각연결이벤트에서채널들사이를다음의식을이용하여뛰어다닌다.

channel=(curr_channel+hop) mod 37

여기에서 hop은매번새로운연결이구축될때마다다른값으로통신된다. 이럼으로써WiFi와이전버전의 Bluetooth와같이 2.4GHz 밴드를사용하는 radio의방해를효과적으로최소화할수있다.

변조기술로는다른저전력무선통신에서와같이Gaussian Frequency Shift Keying(GFSK)을사용하기때문에전송속도가 1Mbit/s로제한되게되었다. 그러나실제로는프로토콜스택에의한오버헤드로 application에서얻어지는throughput은훨씬적어진다.

Page 5: Bluetooth LE controller

PHYSICAL LAYER

Link Layer의 channels와Wi-Fi channel 간에위의그림과같이공존할수있도록구성되어있어서 advertising channel이Wi-Fi에의해방해받지않을수있다.

Page 6: Bluetooth LE controller

LINK LAYER

Link layer는복잡한프로토콜을감추고실시간성을유지하기위해하드웨어벤더가쉽게구현할수있는부분을독립시킨계층이다.

이계층은다음과같은기능들을포함한다.

Preamble, Access Address, and Air Protocol Framing

CRC generation and verification

Data whitening

Random number generation

AES encryption

Page 7: Bluetooth LE controller

LINK LAYER

Link Layer는다음과같은역할들을정의하고있다.

Advertiser: A device sending advertising packets

Scanner: A device scanning for advertising packets

Master: A device that initiates a connection and manages it later

Slave: A device that accepts a connection request and follows the master's timing

Page 8: Bluetooth LE controller

BIT STREAM PROCESSING

frequency shift keying 알고리즘은같은값의비트시퀀스가매우길면문제가생긴다. 예를들어 0000000b나 1111111b와같은비트스트림이송신되면수신기는송신기의 center frequency가왼쪽으로이동되었다고가정을하고이것은 frequency lock을놓쳤다고판단하는결과를초래해서(frequency shift하여다시 lock을했을때) 다음 1비트를잃어버리게된다. 그래서 Data whitening(7-bit linear feedback shift register, polynomial x^7+x^4+1)을통해같은값으로반복되는스트림을제거해준다.

Page 9: Bluetooth LE controller

LINK LAYER DEVICE FILTERING

White List

White List는 device address와 device address type(public or random)을저장한다.

디바이스를껐다켜면(reset) white list는지워진다.

호스트에의해설정된다

이설정으로연결어떤연결과관련된요청에호스트를깨우지않고 Link Layer가동작될수있다.

Page 10: Bluetooth LE controller

LINK LAYER DEVICE FILTERING

Advertising Filter Policy

Link Layer가Connectable Directed Advertising을이용하고있을때, advertising filter policy는무시된다.

그렇지않다면다음과같이호스트의설정에의해 advertising filter policy mode들을따라야한다.

white list에있는디바이스의Scan, Connection 요청만처리한다.

white list를쓰지않는다면(reset 직후) 모든디바이스의 scan, connection 요청을처리해야한다.

모든디바이스의 scan 요청을처리하고 white list에있는디바이스의 connection 요청만처리해야한다.

모든디바이스의 connection 요청을처리하고 white list에있는디바이스의 scan 요청만처리해야한다.

한번에오직하나의 advertising filter policy만적용될수있다.

Page 11: Bluetooth LE controller

LINK LAYER DEVICE FILTERING

Scanner Filter Policy

white list에 있는 디바이스로부터 온 advertising packet만 처리해야 한다. scanner의 device address가 없는 connectable Directed advertising packet은 무시해야 한다.

white list를 쓰지 않는다면(reset 직후) 모든 디바이스의 advertising packet을 처리해야 한다. scanner의 device address가 없는 connectable Directed advertising packet은 무시해야 한다.

Link Layer가 Extended Scanner Filter policy들을 지원한다면 다음의 mode들도 지원해야 한다.

white list에 있는 디바이스로부터 온 advertising packet만 처리해야 한다. Connectable Directed advertising packet의 Initiator Device Address가 Resolvable Private Address라면 무시하지 말아야한다.

white list를 쓰지 않는다면(reset 직후) 모든 디바이스의 advertising packet을 처리해야 한다. Connectable Directed advertising packet의 Initiator Device Address가 Resolvable Private Address라면 무시하지 말아야 한다.

한 번에 오직 하나의 scanner filter policy만 적용될 수 있다.

Page 12: Bluetooth LE controller

LINK LAYER DEVICE FILTERING

Initiator Filter Policy

white list에있는디바이스로부터온 connectable advertising packet은모두처리해야한다.

호스트에의해정의된특정한디바이스로부터온 connectable advertising packet은 white list에관계없이처리되어야한다.

한번에오직하나의 initiator filter policy만적용될수있다.

Page 13: Bluetooth LE controller

STATE MACHINE

Page 14: Bluetooth LE controller

STANDBY STATE

Link Layers에전원이들어가면 Standby State에서시작하고, Host layers가무얼시킬때까지계속그상태에머무른다.

다른모든상태에서돌아올수있는 Standby State는아무일도하지않지만매우중요한상태이다.

Page 15: Bluetooth LE controller

ADVERTISING STATE

Link Layer가 advertising packet을전송할수있도록한다.

또, Scan Request에대하여 Scan Response로응답할수있다.

디바이스가 Discoverable 하거나Connectable 하기를원한다면이상태여야한다.

그리고디바이스가다른디바이스들에게데이터를 broadcast 하기위해서도이상태여야한다.

이상태가되기위해서, 디바이스는송신기를달고있어야한다. 수신기도함께가지고있어도된다.

Advertising을멈춤으로써 Standby State로돌아갈수있고, Initiate State에있던디바이스의Connect Request를받으면Connect State로갈수도있다

Page 16: Bluetooth LE controller

ADVERTISING STATE

Advertising event는다음의타입중하나이다.

Advertising Event Type Related PDU Allowable response PDU

SCAN_REQ CONNECT_REQ

Connectable Unidirected Event ADV_IND Yes Yes

Connectable Directed Event ADV_DIRECT_IND No Yes

Non-connectable Undirected Event ADV_NONCONN_IND No No

Scannable Undirected Event ADV_SCAN_IND Yes No

Page 17: Bluetooth LE controller

ADVERTISING STATE

Advertising Interval

T_advEvent = advInterval + advDelay

advInterval은 20ms부터 10.24s 까지의범위에서 0.625ms의배수로정의된다.

advertising event type이 scannable undirected event이거나 non-connectable undirected event이면, advInterval은 100ms보다작아야한다.

advertising event type이 connectable undirected event이거나 low duty cycle mode의connectable directed event이면, advInterval은 20ms 이상일수있다.

advDelay는각 advertising event마다생성되는 0ms부터 10ms 사이의 pseudo-random 값이다.

Page 18: Bluetooth LE controller

ADVERTISING STATE

Advertising Interval

Page 19: Bluetooth LE controller

ADVERTISING STATE

Connectable Undirected Event Type

connectable undirected advertising event(ADV_IND)는 scanner와 initiator에게 scan request(SCAN_REQ)나 connect request(CONNECT_REQ)를 응답하게 한다.

Advertiser가 SCAN_REQ를 받았을 때, SCAN_REQ를 보낸 scanner가 advertising filter policy에 적합하다면 SCAN_REQ를 받은 것과 같은 advertising channel로 SCAN_RSP를 보낸다.

SCAN_RSP를 보냈거나, SCAN_REQ를 보낸 scanner가 advertising filter policy에 부적합했다면 다음 advertising channel을 사용하여 ADV_IND를 보내거나 advertising event를 끝낸다.

Advertiser가 CONNECT_REQ를 받았을 때, CONNECT_REQ를 보낸 initiator가 advertising filter policy에 적합하다면 State를 connection State로 전환하고 Slave 역할을 수행한다.

CONNECT_REQ를 보낸 initiator가 advertising filter policy에 부적합했다면 다음 advertising channel을 사용하여 ADV_IND를 보내거나 advertising event를 끝낸다.

Page 20: Bluetooth LE controller

ADVERTISING STATE

Connectable undirected advertising event(ADV_IND)의타이밍은다음그림과같다.

ADV_IND만있는경우

Page 21: Bluetooth LE controller

ADVERTISING STATE

Connectable undirected advertising event(ADV_IND)의타이밍은다음그림과같다.

ADV_IND의응답이있는경우

Page 22: Bluetooth LE controller

ADVERTISING STATE

Connectable undirected advertising event(ADV_IND)의타이밍은다음그림과같다.

ADV_IND의응답이있는경우

Page 23: Bluetooth LE controller

ADVERTISING STATE

Connectable undirected advertising event(ADV_IND)의타이밍은다음그림과같다.

ADV_IND의응답이있는경우

Page 24: Bluetooth LE controller

ADVERTISING STATE

Connectable Directed Event Type

connectable directed event(ADV_DIRECT_IND)는 ADV_DIRECT_IND에서 지시된

device address의 initiator에게 connection request(CONNECT_REQ)를 응답하게 한

다.

ADV_DIRECT_IND를 보낸 advertiser는 같은 advertising channel로 CONNECT_REQ

만 기다리고, SCAN_REQ는 무시한다.

이 advertiser가 CONNECT_REQ를 받으면 State를 Connection State로 바꾸고

Slave 역할을 수행한다.

그렇지 않다면 다음 advertising channel로 가서 ADV_DIRECT_IND를 보내거나

advertising event를 끝낸다.

Page 25: Bluetooth LE controller

ADVERTISING STATE

Low Duty Cycle Directed Advertising

Page 26: Bluetooth LE controller

ADVERTISING STATE

Low Duty Cycle Directed Advertising

Page 27: Bluetooth LE controller

ADVERTISING STATE

High Duty Cycle Directed Advertising

Page 28: Bluetooth LE controller

ADVERTISING STATE

Scannable Undirected Event Type

scannable undirected event(ADV_SCAN_IND)는 scanner에게 추가적인 정보를 advertiser에게서 얻기 위해 scan requenst(SCAN_REQ)를 보내게 한다.

ADV_SCAN_IND를 보낸 advertiser는 ADV_SCAN_IND를 보낸 advertising channel에서 SCAN_REQ를 기다린다.

SCAN_REQ를 보낸 scanner의 device address가 advertising filter policy에적합하다면 SCAN_RSP를 보낸다.

SCAN_RSP를 보냈거나 SCAN_REQ를 보낸 scanner의 device address가advertising filter policy에 부적합했다면 다음 advertising channel에서ADV_SCAN_IND를 보내거나 advertising event를 끝낸다.

Page 29: Bluetooth LE controller

ADVERTISING STATE

ADV_SCAN_IND를보내는타이밍은아래의그림과같다.

Page 30: Bluetooth LE controller

ADVERTISING STATE

ADV_SCAN_IND에대한응답으로 SCAN_REQ를받고 SCAN_RSP를다시보낼때의타이밍은아래의그림과같다.

Page 31: Bluetooth LE controller

ADVERTISING STATE

ADV_SCAN_IND에대한응답으로 SCAN_REQ를받고 SCAN_RSP를다시보낼때의타이밍은아래의그림과같다.

Page 32: Bluetooth LE controller

ADVERTISING STATE

Non-connectable Unidirected Event Type

Non-connectable Undirected Event를 Broadcasting이라고부르고데이터를방송하는데사용된다.

Page 33: Bluetooth LE controller

ADVERTISING STATE

Non-connectable Unidirected Event Type

Non-connectable Undirected Event를 Broadcasting이라고부르고데이터를방송하는데사용된다.

Page 34: Bluetooth LE controller

ADVERTISING STATE

Advertising and scanningadvertising은 20ms에서 10.24s 마다 전송되는 rate을 가질 수 있는데, 전송 rate이 빠르면빠를 수록 전력 소모가 커진다.

Page 35: Bluetooth LE controller

SCANNING STATE

이상태의디바이스는Advertising Channel packet을받을수있다.

Scanning State는다음과같은하부상태가있다.

Passive scanning: scanner는단순히 advertising packets를듣기만하고, advertiser는몇개의 packet을 scanner가받았는지절대알지못한다.

Active scanning: scanner가 advertising packet을받은뒤에 Scan Request packet을보낸다. 이걸 advertiser가받은뒤 Scan Response packet으로응답한다. 그러나이것이사용자데이터를 scanner가모든 advertiser에게보낸다는것을의미하는것은아니다. Scan response를보낸뒤 Standby 상태로돌아간다.

Page 36: Bluetooth LE controller

SCANNING STATE

Page 37: Bluetooth LE controller

SCANNING STATE

Passive ScanningAdvertiser로부터 packet을 받기만 하므로 broadcasting data를 획득하기 위해 이용된다고 볼수 있다.

Page 38: Bluetooth LE controller

SCANNING STATE

Active Scanning• SCAN_REQ는 ADV_DIRECT_IND와 ADV_NONCONN_IND에대해서는보내지지않는다.• advertiser의 device address가 scanner filter policy에적합하고ADV_IND나

ADV_SCAN_IND를보냈을경우 SCAN_REQ를보낸다.• SCAN_REQ는 SCAN_RES를받을때까지해당하는 advertiser에게계속보낸다.• SCAN_REQ 충돌(collision)을최소화하기위해철회(backoff) 절차를수행해야한다.• 철회(backoff) 절차에서는 SCAN_REQ의수를제한하기위해 backoffCount와 upperLinit 파라미터를쓴다.

• Scanning 상태가되면 upponLimit과 backoffCount는각각 1로설정된다.• ADV_IND나ADV_SCAN_IND를받아서 SCAN_REQ를보내게되면 backoffCount는 0이될때까지 1씩감소시킨다. SCAN_REQ는 backoffCount가 0이될때까지계속보낸다.

• SCAN_REQ에대하여 SCAN_RES를받으면성공, 못받으면실패인데, 두번연속해서실패하면최대 256값이될때까지 upperLimit을두배씩증가시킨다. 두번연속해서성공하면최소 1이될때까지절반씩감소시킨다.

• SCAN_RSP를받는게성공하건실패하건, backoffCount는 1부터 upperLimit 값사이의pseudo-random 정수로셋팅한다.

Page 39: Bluetooth LE controller

INITIATING STATE

다른디바이스에연결되려고초기화할때위치되는상태이다.

디바이스가이상태에있다가연결하려고하는디바이스의 advertising packet(ADV_IND, ADV_DIRECT_IND)을받으면Connect Request를보내고Connection State(Master)로전환된다.

이때 advertising packet을보낸디바이스는함께Connection State(Slave)로전환된다.

Page 40: Bluetooth LE controller

CONNECTION STATE

Initiating State에 있던 디바이스와 Advertising State에 있던 디바이스가 Connect Request를 주고 받은 뒤 위치하는 상태이다. 이 상태에도 다음과 같은 하부 상태가 있다.

Master: Master 역할을 가진 디바이스는 Initiating State에 있었다. 규칙적으로 Slave에 메시지를 보내야 한다. 이 메시지의 응답으로 Slave가 자기의 데이터를 Master에 보낼 수 있다.

Slave: Slave 역할을 가진 디바이스는 Advertising State에 있었다. Master가 메시지를 보내야만 응답으로 자신의 데이터를 보낼 수 있는데, 가끔 Master의 메시지를 무시함으로써 전력을 아낄 수도 있다.

Connection은 Creating와 Establishing의 단계로 이루어진다.

Creating 단계는 Initiator와 Advertiser가 서로 교통하여 Connection State에 들어서는 단계이고, Establish 단계는첫 번째 Data Packet을 받았을 때부터 Establish 단계라고 한다. Establish 된 Connection에서는 Supervision timeout(TLLconnSuperVision)을 사용하는데, Supervision timeout은 연결이 끊어지기 전 Data Packet 두 개를 받는 최대 시간으로, 10ms의 배수이며, 100ms ~ 32.0s 사이의 값을 갖고, (1 + connSlaveLatency) * connInterval * 2보다 커야만 한다.

Connection 상태에서는 오직 Data channel만 사용되고, 다른 상태에서는 advertising channel을 사용한다.

Page 41: Bluetooth LE controller

CONNECTION STATE

Page 42: Bluetooth LE controller

CONNECTION STATE

Connection Setup - Master Role

Master에서 바라본 transmitWindowOffset이 0이 아닐 때 LL connection setup

Page 43: Bluetooth LE controller

CONNECTION STATE

Connection Setup - Master Role

Master에서 바라본 transmitWindowOffset이 0일때 LL connection setup

Page 44: Bluetooth LE controller

CONNECTION STATE

Connection Setup - Slave Role

첫 번째 패킷을 받으면 CRC가 틀리더라도 Access Address가 맞는다면 Connection Event를시작하는 anchor point를 결정한다. 첫 번째 패킷을 받지 못하면 connInterval 뒤에 이어지는Transmit Window 동안 Master의 Data Packet을 받기를 기다린다. 아래의그림은첫번째패킷을받는시도(connEventCount=0)가실패한뒤두번째패킷을받는시도(connEventCount=1)가성공하여그때Connection의Anchor point를결정하는그림이다.

Page 45: Bluetooth LE controller

CONNECTION STATE

Closing Connection Event

• Master와 Slave가 주고 받아야 할 데이터가 더 이상 없거나,

•연속해서 CRC가 깨지면 연결을 종료한다.

Window Widening

Sleep Clock Accuracy들 때문에 Slave가 정확한 Master의 anchor point를 놓칠 수 있다. 그래서CRC의 매칭 여부와 관계없이 Master의 Packet을 받으면 Slave는 anchor point를 업데이트해야만 한다.

이 업데이트로 증가된 listening time을 window widening이라고 한다. window widening은다음과 같이 구할 수 있다.

• windowWidening = ((masterSCA + slaveSCA) / 1000000) * timeSinceLastAnchor

• windowWidening < ((connInterval / 2) - T_IFS us)

Page 46: Bluetooth LE controller

CONNECTION STATE

Data Channel Index Selection먼저 아래의 식으로 channel index를 구하고,

unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37

이 channel index가 channel map에서 unused로 설정되어 있다면 아래의 식으로 다시 구한다.

remappingIndex = unmappedChannel mod numUsedChannels

여기에서 numUsedChannel은 channel map에 used로 설정되어있는 채널의 수이다.

Page 47: Bluetooth LE controller

CONNECTION STATE

Acknowledgement and Flow Control• Master가연속된데이터의첫패킷(Connection Event)을보냈다.• Slave가다음시퀀스넘버를증가시켜서응답패킷을보냈으나

Master가받지를못했다.• Master가 Slave가아까보낸패킷을다시전송했다.• Slave가다시한번시퀀스넘버를증가시켜서응답패킷을보냈다.

이번엔받았다.• Master가연속된데이터의마지막패킷을보냈다.• Slave가다음시퀀스넘버를증가시켜서응답패킷을보냈다.

이번에도받았고, 더이상보낼패킷이없으므로 End Connection Event.

• Next Connection Event로 Master가단일데이터패킷을보냈다.• Slave가다음시퀀스넘버를증가시켜서응답패킷을보냈다. 더

이상 Master가보낼패킷이없으므로 End Connection Event.

Page 48: Bluetooth LE controller

MULTIPLE STATE MACHINES

Page 49: Bluetooth LE controller

DEVICE ADDRESS

Device address는 48비트로 이루어져 있다.

device_address {

bit address[48];

};

Page 50: Bluetooth LE controller

DEVICE ADDRESS

이 address를 전달하는 PDU의 헤더에 의해 지시되는 address의 type은 두 가지로,

public address이거나 random address이다.

// determination between public or random address

if (type_flag==0) {

address = { // public IEEE 802-2001 MAC address

u8 companny_id[3];

u8 command_assigned[3];

};

} else if (type_flag==1) {

address = {

bit flag[2];

bit random_device_address[46];

};

}

Page 51: Bluetooth LE controller

DEVICE ADDRESS

random_address는다음과같이다시 3가지의형식으로구분된다.

// determination between static or private random address

if (flag == '00b') {

random_device_address = {

// random part of non-resolvable address

bit nonresolvable_address[46];

};

} else if (flag == '01b') {

random_device_address = {

bit prand[22]; // random part of prand

bit hash[24]; // hash=ah(IRK, prand)

};

} else if (flag == '11b') {

random_device_address = {

// random part of static address

bit static_address[46];

};

}

Page 52: Bluetooth LE controller

DEVICE ADDRESS

static_address는전원이켜질때처음만들어져서전원이꺼질때까지유지되는정적인 address로,

만약에연결되었던디바이스중하나의전원이꺼졌다가켜져서그디바이스의 static_address가

바뀐다면이전의연결은더이상유효하지않게된다.

나머지두개의 device address를 private address라고부르는데, 각각은다시 non-resolvable private

address, resolvable private address로부른다.

non-resolvable address는 random address로모든비트가 0으로되어있거나 1로되어있어서는

안되고 public address와동일하지않기만하면된다.

resolvable address는 prand 부분과 hash 부분으로이루어져있다. 다만 prand 부분은 MSB로,

hash는 LSB로구성하여 concatenating(결합) 한다.

Page 53: Bluetooth LE controller

PACKET

BLE는 오직 하나의 패킷 형식과 두 타입의 패킷 만을 가지고 있다. 두 타입은 패킷은 advertising

packet과 data packet이다.

패킷 형식은 다음과 같다.

packet {

u8 crc[3];

u8 payload[length];

u8 length;

u8 header;

u8 access_address[4];

u8 preamble;

}

Page 54: Bluetooth LE controller

PACKET

Preamble

• Preamble은 0101010이나 10101010이다.

• Access address의 첫 비트가 0이면 01010101 시퀀스가 이용되고,

• access address의 첫 비트가 1이면 10101010 시퀀스가 이용된다.

• 이것은 패킷의 첫 9비트가 101010101이든 010101010이든 항상 교차 비트(alternating bit)가 된다는것이다.

• 이것으로 입력 신호 세기를 판단하여 auto gain control에 이용할 수 있다.

Access Address

• Advertising access address: 0x8E89BED6(01101011011111011001000101110001b)

• Data access address

• 0이나 1이 6개 이상 연속되지 않아야 한다.

• advertising channel packet의 access address가 아니어야 한다.

• 적어도 한 비트 이상 advertising access address와 달라야 한다.

• 각 8비트들은 반복된 패턴(같은 값)이면 안 된다.

• alternating bit sequence의 사용을 멈추기 때문에 24번 이상의 비트 전환이 있어서는 안 된다.

• 마지막 여섯 비트 중에 적어도 두 번의 비트 전환이 있어야만 한다.

• 위 조건들에 따라 약 231 개의 random access address가 가능하다.

• 이런 random access address 때문에 공격자가 연결 중인 두 개의 디바이스를 이 주소를 수신하는 것만으로 특정 지을 수 없어서 연결 기간 동안 디바이스의 프라이버시를 보장하는 기능도 있다.

Page 55: Bluetooth LE controller

PACKET

Header

header는 packet의 종류에 따라 advertising header와 data header로 구분된다.

Length

payload의 길이를 octet 값으로 표현한다.

• Advertising Packet Length

• 6 bits로 구성• 6 ~ 37의 값

• Data packet Length

• 8 bits로 구성• 0 ~ 255의 값

Cyclic Redundancy Check

• header, length, payload field를 계산한다.

• noisy 한 환경이므로 16-bit CRC는 신뢰성이 떨어지고,

• 32-bit CRC는 BLE에서 전송할 수 있는 데이터 크기 중 6 비트 데이터의 에러를 검증할 수 없다.

Page 56: Bluetooth LE controller

ADVERTISING PACKET

advertising_packet {

u8 crc[3];

u8 payload[length]; // 6~37 octets

u8 length;

u8 header;

u8 access_address[4];

u8 preamble;

}

Advertising packet은 다음과 같은 목적에 이용된다.

•완전한 연결 구축의 오버헤드를 필요로 하지 않는 어플리케이션을 위해 데이터를 방송하기위해,

• Slave를 발견할 수 있게 하고, 그 Slave에 연결할 수 있게 하기 위해 (여기에서 Slave는 아직Advertiser임)

Page 57: Bluetooth LE controller

ADVERTISING PACKET HEADER

advertising_packet_header {

bit rx_add;

bit tx_add;

bit rfu[2]; // reserved for future

bit advertising_packet_type[4];

}

Advertising Packet Type

Packet Name Value Description

ADV_IND 0000b General advertising indication

ADV_DIRECT_IND 0001b Direct connection indication

ADV_NONCONN_IND 0010b Nonconnectable indication

SCAN_REQ 0011b Active scanning request

SCAN_RSP 0100b Active scanning response

CONNECT_REQ 0101b Connection request

ADV_SCAN_IND 0110b Scannable indication

Reserved 0111b~1111b Reserved for future

tx_add, rx_add

tx_add, rx_add 필드들은 Advertising Packet

Type에 따라 정의되는데, 만약 주어진 Type에따라 정의되어 있지 않다면 나중을 위해예약된 필드로 본다.

Page 58: Bluetooth LE controller

ADVERTISING PDUS

Advertising PDUs은 다음과 같은 이벤트에서 사용되는 PDUs을 말한다.

PDU Description Example

ADV_IND connectable undirected advertising event “Hello, I'm Steve ”

ADV_DIRECT_IND connectable directed advertising event “Hello Robin, I'm Steve”

ADV_NONCONN_IND non-connectable undirected advertising event “Hello, I'm Steve”

ADV_SCAN_IND scannable undirected advertising event “Hello, I'm Steve”

Page 59: Bluetooth LE controller

ADV_IND

payload {

u8 advertising_data[]; // size of data is 0 to 31 octets

bit advertiser_address[48];

}

이 PDU에서 advertiser의 device address가 public이면 advertising header의 tx_add는 0,

random이면 tx_add는 1이다.

Page 60: Bluetooth LE controller

ADV_DIRECT_IND

이 PDU에서 advertiser_address가 public이면 advertising header의 tx_add는 0, random이면tx_add는 1이고, initiator_address가 public이면 rx_add는 0, random이면 rx_add는 1이다.

payload {

bit initator_address[48];

bit advertiser_address[48];

}

Page 61: Bluetooth LE controller

ADV_NONCONN_IND

이 PDU도 마찬가지로 advertiser_address가 public이면 advertising header의 tx_add는 0,

random이면 tx_add는 1이다.

payload {

u8 advertising_data[]; // size of data is 0 to 31 octets

bit advertiser_address[48];

}

Page 62: Bluetooth LE controller

ADV_SCAN_IND

이 PDU도 또한 advertiser_address가 public이면 advertising header의 tx_add는 0, random이면tx_add는 1이다.

payload {

u8 advertising_data[]; // size of data is 0 to 31 octets

bit advertising_address[48];

}

Page 63: Bluetooth LE controller

SCANNING PDUS

다음과 같은 PDUs을 scanning PDUs라고 부른다.

PDU Description Example

SCAN_REQ scanner가보내고 advertiser가받는다. “Hello Steve, I'm Robin. Could you please give me your information?”

SCAN_RES advertiser가보내고 scanner가받는다. “Hello Robin, I'm Steve. This is my resume, Mom wrote for me.”

Page 64: Bluetooth LE controller

SCAN_REQ

scanner_address가 public이면 advertising header의 tx_add가 0, random이면 tx_add가 1이고,

advertiser_address가 public이면 header의 rx_add가 0, random이면 x_add가 1이다.

payload {

bit advertiser_address[48];

bit scanner_address[48];

}

Page 65: Bluetooth LE controller

SCAN_RSP

advertiser_address가 public이면 advertising header의 tx_add가 0, random이면 tx_add가1이다.

payload {

u8 scan_response_data[]; // size of data is 0 to 31

bit advertiser_address[48];

}

Page 66: Bluetooth LE controller

INITIATING PDU - CONNECT_REQ

payload의 initiator_address가 public이면header의 tx_add는 0, random이면 tx_add는1이고,

advertiser_address가 public이면 header의rx_add는 0이고 random이면 rx_add는 1이다.

payload {

u8 link_layer_data[22];

bit advertiser_address[48];

bit initiator_address[48];

}

link_layer_data {

bit sleep_clock_accuracy[3];

bit hop[5];

u8 channel_map[5];

u8 timeout[2];

u8 latency[2];

u8 interval[2];

u8 window_offset[2];

u8 window_size;

u8 crc_init[3];

u8 access_address[4];

}

Page 67: Bluetooth LE controller

INITIATING PDU - CONNECT_REQ

link_layer_data의 각 필드는 다음과 같다.

Field Symbol Description

access_address AA Link Layer의 access address.

crc_init CRCInit Link Layer 연결을위한CRC 계산의초기값.

window_size WinSize transmitWindowSize를구하기위한값. transmitWindowSize = window_size * 1.25 ms

window_offset WinOffset transmitWindowOffset을구하기위한값. transmitWindowOffset=window_offset * 1.25 ms

interval Interval connInterval을구하기위한값. connInterval=interval * 1.25 ms

latency Latency connSlaveLatency를구하기위한값. connSlaveLatency = latency

timeout Timeout connSupervisionTimeout을구하기위한값. connSupervisionTimeout = Timeout * 10ms

channel_map ChM 사용되고사용되지않는채널을가리킨다. LSB로표현되고 37th, 38th, and 39th bit position

은예약되어(RFU) 있다.

hop Hop hopIncrement를구하기위한값. 5~16의범위에있는랜덤값.

sleep_clock_accuracy SCA 가장나쁜경우의 Master sleep clock accuracy를결정하기위해사용되는masterSCA를구하기위한값.

Page 68: Bluetooth LE controller

INITIATING PDU - CONNECT_REQ

masterSCA는 다음과 같이 결정할 수 있다.

SCA masterSCA

0 251 ppm ~ 500 ppm

1 151 ppm ~ 250 ppm

2 101 ppm ~ 150 ppm

3 76 ppm ~ 100 ppm

4 51 ppm ~ 75 ppm

5 31 ppm ~ 50 ppm

6 21 ppm ~ 30 ppm

7 0 ppm ~ 20 ppm

Page 69: Bluetooth LE controller

DATA PACKET

data_packet {

u8 crc[3];

u8 mic[4]; // optional

u8 payload[length]; // 0~251 octets, if mic is present.

u8 length;

u8 header;

u8 access_address[4];

u8 preamble;

}

MIC(Message Integrity Check)

•암호화 되지 않은 Link Layer 연결에서는 mic field가 필요 없고, 이 경우에는 payload의 크기는0 ~ 255 octets만큼 가질 수 있다.

•암호화 된 Link Layer 연결에서 Payload의 크기가 0인 경우에도 mic field가 필요 없다.

• MIC는 AES-128 CCM mode를 사용하여 계산한다.

Page 70: Bluetooth LE controller

DATA PACKET HEADER

data_packet_header {

bit rfu[3];

bit more_data;

bit sequence_no;

bit next_sequence_no;

bit link_layer_identifier[2];

}

Page 71: Bluetooth LE controller

DATA PACKET HEADER

link_layer_identifier

Value Description

01b 상위계층패킷의연속

10b 상위계층패킷의시작이거나완료패킷

11b Link Layer 제어패킷, 연결관리에사용된다

Page 72: Bluetooth LE controller

LL DATA PDU

• LL Data PDU는 L2CAP data를 보내는데 이용되는 data channel PDU이다.

• LLID 필드는 01b나 10b로 셋팅 되어야 한다.

• LLID 필드가 01b로 셋팅 되어 있고, Length가 0인 PDU를 empty PDU라고 부른다.

• LLID 필드가 10b로 셋팅 되어 있으면 Length가 0인 PDU를 보낼 수 없다.

Page 73: Bluetooth LE controller

LL CONTROL PDU

payload {

/* size of control_data is 0 to 26 octets

* as defined by opcode

*/

u8 control_data[];

u8 opcode;

}

Opcode Control PDU name From

0x00 LL_CONNECTION_UPDATE_REQ Master

0x01 LL_CHANNEL_MAP_REQ Master

0x02 LL_TERMINATE_IND Master/Slave

0x03 LL_ENC_REQ Master

0x04 LL_ENC_RSP Slave

0x05 LL_ENC_START_ENC_REQ Slave

0x06 LL_ENC_START_ENC_RES Master/Slave

0x07 LL_UNKNOWN_RSP

0x08 LL_FEATURE_REQ Master

0x09 LL_FEATURE_RSP Slave

0x0A LL_PAUSE_ENC_REQ Master

0x0B LL_PAUSE_ENC_RSP Master/Slave

0x0C LL_VERSION_IND Master/Slave

0x0D LL_REJECT_IND

0x0E LL_SLAVE_FEATURE_REQ

0x0F LL_CONNECTION_PARAM_REQ Master/Slave

0x10 LL_CONNECTION_PARAM_RSP Slave

0x11 LL_REJECT_IND_EXT

0x12 LL_PING_REQ Master/Slave

0x13 LL_PING_RSP Master/Slave

0x14 LL_LENGTH_REQ Master/Slave

0x15 LL_LENGTH_RSP Master/Slave

0x16 ~ 0xFF Reserved for future use

Page 74: Bluetooth LE controller

REFERENCES

정리: http://steveyoon77.kr/dokuwiki/doku.php?id=bluetooth