개발/BLE

BLE 란?

FA1976 2016. 7. 7. 14:16

1. BLE란

BLE는 BlueTooth Low Energy의 약어로서 블루투스 4.2버전부터 지원하기 시작했다.

용도는 기존의 블루투스 BR/EDR에 비해 저전력으로 사용하는데 적합하도록 설계되었다.

블루투스 스마트 레디 는, 듀얼모드라고도 불리우며  BR/EDR + BLE 를 의미한다.

블루투스 스마트 는, 싱글모드라고도 불리우며  BLE 를 의미한다.



최근, BLE를 이용한 제품들이 많이 나오고 있다. 미아 방지를 위한 제품도 나와있고, 쇼핑센타에서 제품 광고에도 사용되고 있다(예 시럽) 또한 가정에서도 IoT에도 적용이 되고 있으며, 저전력이라는 장점으로 많은 곳에 활용이 되는 추세이다.


2. BLE 개발에 관하여

BLE를 개발하기 위해서는 기본적으로 Protocol을 이해 해야 한다. 물론 BLE 칩 제조사에서 제공해주는 API를 이용하게 되겠지만, 기초적인 내용을 이해하지 못한 상태에서는 개발하는데 상당히 어려움을 겪게 될것이다. 따라서 기본적인 Protocol은 이해하고 가야 한다.


3. BLE Protocol Architecture


본인은 블루투스 BR/EDR은 개발해본 경험이 없기때문에 BLE Protocol Stack이란것을 처음 보았다. BLE 프로토콜은 크게 HOST와 Controller란 영역으로 나뉘어져 있다.


Controller는 MCU로 따지면 레지스터 단이라고 생각해도 좋다. PWM 출력을 내보내기 , 포트 출력을 내보내기 등등과 같이 하위단이라고 이해하면 되겟다. 그러나 MCU와는 달리 Controller는 직접 사용자가 제어할수는 없다. BLE 칩 업체에서 제공해주는 API에 의해서만 제어가 가능하다.

MCU를 직접 제어한 사람들일경우 답답할수도 있겠지만 어쩔수 없다. 도저히 알 방법이 없다.


HOST는 BLE 프로토콜 스택의 상위단으로서 어플리케이션이 올라가는 부분이라고 생각하면 되겠다. 물론 아무렇게 나 자유롭게는 불가능하고 BLE 칩 업체에서 제공해준 API를 이용하여 BLE 통신을 제어하도록 되어 있다.


BLE 프로토콜 스택은 이렇게 두가지 영역으로 나뉘어져 있으며, 이외의 일반 포트 제어는 BLE 칩회사마다 제공해주는 MCU 데이터 시트를 이용하여 직접 제어하면 되겠다. LED를 켠다던지, 스위치 입력을 받는다던지 하는 부분은 BLE 프로토콜 스택과는 전혀 상과없는 부분이기에 별도의 데이터시트를 제공한다.

TI 사의 CC254x의 경우엔 MSP430 8bit MCU가 내장되어 있으며, 일반 포트도 제공된다. 다른 BLE 칩회사도 동일하다.

Sliab의 경우엔 무려 32bit 이며 일반 포트도 TI사보다 2배는 많다. 가격도 비슷한데...


4. BLE Protocol Stack 의 Controller 구성요소 3개.

 

1. PHY (Physical Layer) : Radio operating. 2.4GHz ISM밴드, 1Mbps adaptive frequency hopping GFSK (Gaussian Frequency Shift Keying).

 

2. LL (Link Layer) : RF state 제어. 

RF State 5 = standby, advertising, scanning, initiating, connected.

Advertiser 는 connection 아닌 상태에서 데이터 전송한다.

Scanner 는 advertiser 를 Listen 한다. 

Initiator : Advertiser 에 반응하여 connection  요청하는 측을 Initiator 라 한다.

initiator 의 연결요청에 Advertiser 가 수락(accepts) 하면 advertiser 와 initiator 는 connceted 상태가 된다.

connection 된 경우 기기는 master, slave 중의 어느 하나의 역할을 하게되며, initiator(connection을 개시한) 가  master이며, advertiser (initiator 가 연결요청한 것에 수락한) 가 slave 이다.

 

* 참으로 BLE를 공부하면서 느낀건데 용어 통일이  잘 안되어 있다. Central이라고 할때도 있고 마스터라고 할때도 있고 스캐너라고 할때도 있고 그래서 정리해봤다.


- Central = Master = Client = Scanner

- Peripheral = Slave = Server =Advertiser


3. HCI(Host Contoller Interface) : Host 와 Controller 사의 통신수단을 제공한다. software API 로 제공될 수 도 있고(Host와 Controller 가 1개의 칩내에서 구현된 경우), UART, SPI, USB 등일 수도 있다(Controller 만 별도로 칩으로 구현된 경우).standard  HCI Command , events 는 Bluetooth Core Spec 에 정의되어있다.  


* 최근 나오는 칩들은 MCU와 통합된 상태로 나오기때문에 Host와 Controller가 1개의 칩으로 구성되어 나온다. 만일 한개의 칩으로 구성되어 있지 않는 칩을 사용한다면 그냥 같다 버리셈~ 통합된 칩이라도 1.3$ 정도 밖에 하지 않으니 따로 분리되어 있는걸로 개발하는 어처구니 없는 일은 없길 바란다.


5.BLE Protocol Stack 의 Host  구성요소 5개.

 

1. L2CAP (link logical control and adaption protocol)

상위 계층으로 data encapsulation services 를 제공한다.

 

2. SM (security manager)

pairing and Key distributuiion 방법을 정의하고 있으며, 다른 기기와  secure connect & data 교환이 가능하게 해준다.

- Encryption and Authentification.

- Pairing and Bonding. Pass Key and Out of band bonding.

- Key Generation for a device identity resolution, data signing and encryption.

- Pairing method selection based on the IO capabiltity of the GAP central and GAP Peripheral device.

 

3. GAP (generic access protocol)

application , profiles  과 직접적 interface 되어 , 기기 discovery, connection-related service 를 핸들링한다. 또한, GAP 은 security 를 initiation  한다.

 

4. ATT (attribute protocol)

다른 기기로 "attributes" 라는 데이터를 노출시킨다.

 

5. GATT (generic attributes protocol)

ATT를 이용하는 sub-procedure  를 정의하는 프레임워크이다.

BLE 기기간의 모든 통신은 GATT sub-procudure 로 핸들링되므로, application and/or profiles 는 GATT를 직접적으로 이용하게 된다.


어려운 얘기를 쭉늘어 놓았는데, 실제 어플리 케이션을 개발하면서 많이 다루는 부분은 GAP,ATT,GATT이고 어떤 데이터를 클라이언트가 서버에 요청하거나 서버가 클라이언트에 데이터를 줄때 사용되는것이 GATT이다.


예를 들면 아래와 같다 (그냥 그러러니 하셈, 지금은 내용까진 이해할필요없으니까요)



간단하게 BLE란 무엇이고 BLE 프로토콜 스택이 무엇인가에 대해서 알아봤다. 좀더 심도 있는 내용은 다음번에 다시 정리 해야 겠다.


<참조 블로그>

링크

'개발 > BLE' 카테고리의 다른 글

Measuring Bluetooth® Low Energy Power Consumption  (0) 2016.07.11
Reprogramming the CC2540 USB Dongle in the CC2540DK  (0) 2016.07.11
약어정리 - octets  (0) 2016.07.07
약어 정리 - MTU  (0) 2016.07.07
CC2540 Timeout Terminate  (0) 2016.07.06
CC2540 Disconnect the Connection Immediately  (0) 2016.07.01
CC2540 Supervision Timeout  (0) 2016.07.01
CC2541 Peripheral Sample Code  (0) 2016.06.30