티스토리 뷰

Development/ETC

Bluetooth Low Energy (BLE)

KimDoubleB 2021. 1. 21. 22:04

Bluetooth Low Energy (BLE)

BLE란?

 

과거부터 기기들간의 무선 연결은 주로 Bluetooth 기술을 사용해왔다. 이들은 기기간에 마스터, 슬레이브 관계를 형성하여 통신하는 Bluetooth Classic이라는 방식을 이용했다.  이 기술을 사용하면서 사람들이 걱정한 문제들은 ‘Bluetooth를 연결하면 배터리가 빨리 소모된다’, ‘사용하지 않을 때는 꺼놓아야한다’ 등 같은 배터리 관련 문제들이었다. 실제로도 무선을 연결하여 사용할 수 있는 편리함을 주었지만, 연결이 되어 사용되는 동안에는 배터리 소모량이 컸기 때문에 많은 불편함이 존재했다.

 

이러한 문제를 해결하기 위한 것이 Bluetooth Low Energy (BLE)이다(Bluetooth Smart라고 불리기도 한다). 2010년 표준 Bluetooth 4.0의 대표적인 특징이며, 기존보다 훨씬 적은 전력을 사용해 Classic과 비슷한 수준의 무선 통신을 할 수 있었다. 이렇게 Bluetooth의 최대 단점인 과도한 배터리 소모 문제를 해결하는 기술이었기에, 무선 기기들에 엄청나게 사용되기 시작하였다.

 

BLE는 어떻게 통신하는가?

 

BLE를 지원하는 디바이스들은 기본적으로 Advertise(Broadcast)와 Connection이라는 방법으로 외부와 통신한다.

 

Advertise mode (=Broadcast mode)

정보를 보낼 특정 디바이스를 지정하지 않고, 주변 모든 디바이스에게 signal을 보낸다. 즉, 주변 상황이 어떻건(디바이스가 있건 없건, 내 signal을 듣건 말건)간에 자신의 signal을 일방적으로 보내는 것이라고 생각하면 된다. 이 Advertisement signal은 주기적으로 보내게 된다.

 

Advertise 관점에서 디바이스의 역할을 구분해보자.

  • Advertiser (Broadcaster): Non-Connectable Advertising Packet을 주기적으로 보내는 디바이스
  • Observer: Advertiser가 보내고 있는 Non-Connectable Advertising Packet을 듣기 위해 주기적으로 Scanning하는 디바이스

 

Advertise 방식은 주로 디바이스가 자신의 존재를 알리거나, 적은 양(31Bytes 이하)의 User 데이터를 보낼 때도 사용된다. 한 번에 보내야 하는 데이터 크기가 작다면, 굳이 오버헤드가 큰 connection 과정을 거쳐 데이터를 보내기 보다, 단순히 advertise를 통해 한번에 보내는게 더 효율적이기 때문이다.

Advertise 방식은 signal을 일방적으로 뿌리는 것이기 때문에, 보안에 취약하다.

 

Connection mode

양방향으로 데이터를 주고받거나, advertising packet으로만 전달하기에는 많은 양의 데이터를 주고 받아야하는 경우, Connection mode로 통신을 한다. Advertise 방식처럼 ‘일대다’방식이 아닌 ‘일대일’방식으로 디바이스간 데이터 교환이 일어난다. 

디바이스간 Channel hopping 규칙을 정해놓고 통신을 하기 떄문에 Advertise보다 안전하다.

 

Connection 관점에서는 디바이스들의 역할이 다음과 같이 구분된다.

  • Central (Master)
    • Central 디바이스는 다른 디바이스와 Connection을 맺기 위해, Connection Advertising Signal을 주기적으로 Scan하다가, 적절한 디바이스에 연결을 요청한다.
    • 연결이 되고 나면, Central 디바이스는 timing을 설정하고 주기적인 데이터 교환을 주도한다. 여기서 timing이란, 두 디바이스가 매번 같은 channel에서 데이터를 주고 받기 위해 정하는 hopping 규칙이라고 보면 된다.

 

  • Peripheral (Slave)
    • Peripheral 디바이스는 다른 디바이스와 Connection을 맺기 위해, Connectable Advertising Signal을 주기적으로 보낸다. 이를 수신한 Central 디바이스가 Connection Request를 보내면, 이를 수락하여 Connection을 맺는다.
    • Connection을 맺고 나면 Central 디바이스가 지정한 timing에 맞추어 channel을 같이 hopping 하며 주기적으로 데이터를 교환한다.

 

 


Protocol stack

디바이스들은 Bluetooth로 통신을 하기 위한 Protocol stack을 가지고 있다. Bluetooth Signal Packet을 송수신할 때, Protocol stack을 거치면서 Packet들이 분석되거나 생성된다.

 

위 그림에서 볼 수 있듯, Protocol stack은 가장 아랫단부터 크게 Controller, Host, Application으로 나뉘어진다.

Connection 과정에서 필요한 부분인 Physical layer, Link layer, Generic access Profile(GAP), Generic Attribute Profile(GATT)에 대해서 알아보자.

 

Physical Layer

Physical Layer에는 실제 Bluetooth analog signal과 통신할 수 있는 회로가 구성되어 있어, Analog 신호를 Digital로 바꾸어주거나, Digital 신호를 Analog로 바꿔준다. 

 

Bluetooth에서는 2.4GHz 대역을 총 40개의 Channel로 나누어 통신을 한다. 40개의 channel 중 3개 channel은 Advertising channel로써 각종 advertising packet을 비롯하여 connection을 맺기 위해 주고받는 packet들의 교환에 이용된다.

 

Link Layer

Physical Layer의 바로 윗단에는 Link Layer가 있다. Link Layer은 하드웨어와 소프트웨어의 조합으로 구성되어 있다. 하드웨어단에서는 컴퓨팅 능력이 요구되는 작업들이 처리되고, 소프트웨어단에서는 디바이스의 연결상태를 관리한다.

또한 디바이스들의 Role을 정의하고, 이에 따라 변경되는 state를 가지고 있다.

 

Role

  • Master: 연결을 시도하고, 연결 후에 전체 connection을 관리하는 역할.
  • Slave: Master의 연결 요청을 받고, Master의 timing 규약을 따르는 역할.
  • Advertiser: Advertising Packet을 보내는 역할.
  • Scanner: Advertising Packet을 Scanning 하는 역할. Scanner에는 2가지 역할이 존재.
    • Passive Scanning: Scanner는 advertising packet을 받고, 이에 따로 응답하지 않는다. 따라서 해당 Packet을 보낸 Advertiser는 Scanner가 Packet을 수신했는지 알지 못한다.
    • Active Scanning: Advertising Packet을 받은 Scanner는 Advertiser에게 추가적인 데이터를 요구하기 위해 Scan request를 보낸다. 이를 받은 Advertiser는 Scan Response로 응답한다.
  • 이들은 Connection 전의 역할(Advertiser, Scanner)와 후의 역할(Master, Slave)로 분류된다.

 

State

Link Layer는 5가지 state를 가지고 있는데, 각 디바이스는 서로 연결이 되는 과정에서 이 state를 변화시킨다. 

다음과 같은 5개의 state가 존재한다.

  • Standby State: Signal packet을 보내지도, 받지도 않는 상태
  • Advertising State: Advertising Packet을 보내고, 해당 Advertising Packet에 대한 상대 디바이스의 Response를 받을 수 있고, 이에 응답할 수 있는 상태
  • Scanning State: Advertising Channel에서 Scanning 하고 있는 상태
  • Initiating State: Advertiser의 Connectable Advertising Packet을 받고난 후, Connection Request를 보내는 상태
  • Connection State: Connection 이후의 상태

 

Generic Access Profile (GAP)

GAP은 서로 다른 제조사가 만든 BLE 디바이스들간에 서로 호환되어 통신할 수 있도록 주춧돌 역할을 한다. 어떻게 디바이스간에 서로를 인지하고, Data를 Advertising하고, Connection을 맺을지에 대한 프레임워크를 제공한다. 

또한 GAP에서는 BLE 통신을 위해 Role, Mode, Procedure, Security, Additional GAP data format 등을 정의한다.

 

Role

  • Central: Link layer에서 Master 역할에 상응. 다른 디바이스의 Advertising Packet을 듣고, Connection을 시작할 때 시작된다. 
    • 메인 컴퓨터, 스마트폰, 태블릿PC의 역할
  • Peripheral: Link layer에서 Slave 역할에 상응. Advertising Packet을 보내서 Central 역할의 디바이스가 Connection을 시작할 수 있도록 유도.
    • 센서기능이 달린 디바이스들의 역할

 

Advertising 방법

  1. Advertising Data payload
  • Advertising data payload는 자신이 현재 여기 있다고 central devices들에게 알리기 위한 의무적인 것이다. 그냥 단순히 알리기만 하는 것을 의미한다.
  1. Scan Response payload
  • Advertising data payload와 비슷하나, Central devices가 advertising packet을 받으면 응답 packet을 전송하는 방식이다.
  • optional한 방식이며, 이를 통해 Central의 간단한 정보(이름 등)을 Peripheral device로 넘길 수 있다.

 

Advertising Process

이 그림을 보면 간략하게 Advertising process에 대해 알 수 있다.

  • Peripheral device는 정해진 advertising interval time이 있어, 그 시간마다 계속 Advertising data를 보내게 된다. 당연히 이 interval time이 길수록 전원을 더 아낄 수 있다.
  • 만약 Central device가 scan response payload에 해당한다면, advertising data를 받고 그에 응답하는 scan response request packet을 전송하게 될 것이다. 그러면 peripheral device도 그에 응답하는 데이터 packet을 전송하게 된다.

 

Broadcast Network Topology

그림에서 보다시피 Peripheral device는 여럴 central device가 scan할 수 있는 대역을 통해 데이터를 전송한다. 이러한 것이 BLE에서 Boradcasting 하는 것.

 

이를 통해 peripheral과 central device가 연결되면, advertising process는 일단 종료되고 더이상 advertising packet을 전송하지 않게 된다. 이제 연결된 상태 안에서 기기간 양방향으로 GATT 서비스를 이용해 통신하게 될 것이다.

 

Generic Attribute Profile (GATT)

BLE Data교환을 관리하는 GATT는 디바이스들이 data를 발견하고, 읽고, 쓰는 것을 가능하게 하는 기초적인 data model과 procedure를 정의한다.

디바이스간에 low-level에서의 모든 인터렉션을 정의하는 GAP과는 달리, GATT는 오직 data의 format 및 전달에 대해서만 처리한다.

 

Connected Network Topology

위 그림은 BLE 서비스가 연결된 상황에서 어떻게 작동하는지 보여준다.

 

일단 peripheral device와 central device간에 Connection이 설립되면 GAP에서의 advertising(one-way)와 달리 서로 양방향(both directions)으로 소통이 가능하다. 

 

하나의 peripheral device는 하나의 central device만 연결할 수 있는 반면, 하나의 central device는 여러개의 peripheral device를 연결할 수 있다.

  • 만약 2개의 peripheral device간에 송수신이 필요하다면, central device를 메일 박스처럼 중간 매개체로 사용해 송수신할 수 있다.

 

GATT transactions

  • Peripheral device: GATT server로 정의된다. Attribute(ATT) lookup data와 서비스 그리고 특징 등을 가진다.
  • Central device: GATT client로 정의된다. GATT server로 request를 보낸다.

 

모든 신호의 시작은 GATT client로부터 시작된다. 

먼저 Connection이 설립되면, Peripheral device는 central device에게 ‘Connection interval’을 제안하고, 그에 따라 central device는 매 connection interval마다 새롭게 받은 데이터가 있는지 확인하기 위해 재연결 과정을 수행한다.

 


통신의 Timing

 

Before Connection

Connection 전, 디바이스는 3개의 Advertising channel을 이용해 데이터를 주고 받는다. 이들은 이 3개의 channel을 기기 마다의 time interval로 hopping하게 된다. 서로의 hopping 규칙이 무조건 일치하지 않기 때문에, channel이 엇갈리게 되는 경우도 존재할 것이다. 하지만 hopping 과정이 매우 빨리 일어나기 때문에 앞의 문제 같은 경우보다 서로 같은 channel에 대해 Advertising과 Scanning하는 것이 더 많을 것이다.

 

After connection

Connection이 완료되면, 앞서 말했듯 advertising이 종료되게 된다. 이제 연결된 두 디바이스간에 연결 전 헷갈릴 수 있었던 hopping 규칙을 통일시킨다. 이렇게 처음에 정해줌으로써 매번 같은 채널로 동시에 hopping하면서 signal을 주고 받을 수 있게 된다. 이러한 hopping 과정은 둘 간의 connection이 종료될 때까지 계속 된다.

  • 아래 그림의 CONNECT_REQ에서 hopping 정보를 보내줘서 규칙을 맞추는 것.
  • CONNECT_REQ에는 timing에 관한 정보 4가지가 들어 있다.
    • Access Adress, CRC Info, Hop Interval, Hop Increment

 


전체 연결과정을 보자.

패킷 명은 아래 표 참조

 

320x100
반응형

'Development > ETC' 카테고리의 다른 글

[NS3] CSMA example  (0) 2021.01.23
[TCP] BIC-TCP  (0) 2021.01.23
Github 원하지 않는 개발언어로 등록된 경우  (0) 2021.01.22
ubertooth code 수정 - 2  (0) 2019.09.27
ubertooth code 수정 - 1  (0) 2019.09.27
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함