본문 바로가기

IoT Communication/Bluetooth

블루투스 (bluetooth) 패킷 구조

 지난번 블루투스 스택에 대하여 포스팅한지 벌써 6개월이 넘었다... 그동안 너무 바빠서 포스팅 해야지 하면서 계속 미루다가 다시 마음을 잡고 쭉쭉 포스팅을 해보려고 한다!! 앞으로 블루투스 스택과 오늘의 포스팅인 블루투스의 패킷구조를 포함하여 아두이노를 이용한 간단한 실습들을 정리해서 올려보려고 한다. 그럼 오늘은 오랜만에 워밍업으로 간단한 블루투스의 패킷 구조에 대하여 알아보도록 하겠다!!

 

 

1. 블루투스 패킷 구조

 

 블루투스의 표준 규정은 Bluetooth SIG (Special Interest Group) 에서 규정하고 있고, 모든 블루투스를 사용하는 기기들은 이 표준 스펙을 따름으로써 원활하게 장비들간 통신 및 데이터 전송이 가능하다. 이러한 블루투스의 specification은 블루투스 공식 사이트에서 열람 가능하다. 앞으로의 모든 내용은 이 Core Specifications을 기반으로 설명하도록 하겠다.

 

출처: https://www.bluetooth.com/specifications/bluetooth-core-specification/

 

Core Specifications | Bluetooth® Technology Website

At the core of everything Bluetooth The Bluetooth® Core Specification defines the technology building blocks that developers use to create the interoperable devices that make up the thriving Bluetooth…

www.bluetooth.com


BLE Packet Format v4.2


 위의 그림은 BLE 4.2 기준 패킷 구조 이다. 크게 4가지로 나뉜다. 각각에 대하여 알아보면 다음과 같다.

 

- Preamble: 1 Byte로 구성되어 Receiver에서 비트동기에 사용되며, Access Address의 LSB가 1이면 01010101b, Access Address의 LSB가 0이면 10101010b 로 설정된다.

 

* Access Address를 알아보기 전에 블루투스에서는 2가지 모드에 따라 패킷의 구조가 약간씩 다르다. 비콘 형태로 자신의 위치를 주기적으로 알리는 비콘모드에서는 Advertising packet 구조를 사용하며, 서로의 장비가 커넥션이 이루어진 상태에서 서로 데이터를 전달하는 상태에서는 Data Packet 구조를 사용한다. Access Address와 PDU는 이 상태에 따라서 약간씩 패킷의 구조가 달라진다!! *

 

- Access Address: 4Bytes로 구성되어 Advertising Packet은 0x8E89BED6 으로 모두 동일하며 Data Packet 은 전체 4Bytes에서 랜덤하게 생성가능하다.

 


Advertising Channel PDU / Data Channel PDU Packet format


- Protocol Data Unit (PUD): Access Address가 Advertising Packet과 Data Packet으로 나뉜거와 동일하게 PDU 또한 Advertising과 Data 관점으로 패킷 구조가 나뉜다.

  • Advertising Channel PDU: 위의 그림과 같이 2 Byes Header를 포함한 총 39 Bytes의 길이를 가지며, 최대 37 Bytes의 Payload format은 다시 Data Payload와 Advertising Address로 나뉘게 된다. Advertising Address 부분에서 Mac Address가 들어오게 된다. 또한 Data Payload는 length, AD type, AD Data로 구성되며, 이는 뒤에서 실제 raw data 확인을 통해 알아보도록 하겠다.
  • Data Channel PDU: 보통 데이터채널의 경우 BLE 디바이스들끼리 커넥션이 이루어진 후 서로간의 데이터 전송 부분에서 사용이 되는 패킷 구조이며 헤더를 포함한 최대 길이는 257 Bytes를 차지한다. 이는 추후에 자세히 다루도록 하겠다.

 

2. nRF connect를 통한 패킷 구조 확인

 

 앞서 Advertising Channel PDU에서 Daya Payload는 최대 31 Bytes 이며, length, AD type, AD data로 구성된다고 말했다. 그럼 이번에는 과연 이게 무엇이고 실제 비콘을 스캔했을 경우 데이터 포맷이 어떻게 구성되는 실제 확인을 해보도록 하겠다. 실제 체크를 위해서 ESP32 보드를 사용해 비콘 형태로 만들었으며, 스캐너는 스마트폰에 nRF 사의 nRF Connect 어플을 설치하여 확인 하였다. 


nRF Connect 어플을 활용한 비콘 스캔 (BLE Packet Format 확인)


 위의 그림은 ESP32 보드를 활용해 블루투스 코드를 포팅 했을때 nRF Connect 어플에서 스캔 했을때 뜨는 raw data 정보이다. (해당 코드는 이후 PM7003 미세먼지 데이터 수신 포스팅 부분에서 설명하도록 하겠다.) 앞서 패킷구조에서 Data Payload 에서 1개의 데이터 구조는 차례대로 Length, AD type, AD data (value) 로 구성된다. 위의 그림에서 Length 는 총 31 bytes 이다. 전체 raw data 를 쪼개서 보면 다음과 같다.

 

020104 / 03FF0012 / 03FF001D ~ / 051220004000

위 처럼 전체 raw data는 Length, AD type, AD data의 순으로 나타낼 수 있다. 또한 Length는 모두 합치면 31 bytes가 된다.

AD type는 Generic Access Profile을 나타내며 아래의 사이트를 들어가면 각각이 어떠한 역할을 하는지 알 수 있다.

 

GAP

앞서 ESP32의 블루투스 패킷구조를 보면 AD type은 모두 0x01, 0xFF, 0x09, 0x0A, 0x12 로 구성된다. 이를 위의 (아래의 출처 홈페이지를 가면 더욱 자세한 GAP 에 대하여 알 수 있다.) GAP의 역할로 설명을 하면 결국 ESP32의 블루투스는 플래그, Manufacturer Specific Data, Complete Local Name, Tx Power Level, Slave Connection Interval Level 을 나타낼 수 있단걸 알 수 있다. 실제로 이러한 GAP 구조를 보고 필요한 GAP를 구성하여 블루투스 통신을 구성 할 수 있다. 이에 대해서는 다음 포스팅에서 실습에서 알아보겠다.

 

출처: https://www.bluetooth.com/ko-kr/specifications/assigned-numbers/generic-access-profile

 

Generic Access Profile | Bluetooth® Technology Website

Assigned numbers and GAP ​​Assigned numbers are used in GAP for inquiry response, EIR data type values, manufacturer-specific data, advertising data, low energy UUIDs and appearance characteristics…

www.bluetooth.com

 

이번 포스팅에서는 블루투스의 패킷구조와 실제로 ESP32 예제를 돌리고 실제 블루투스 패킷 구조를 확인해보았다.

아직 이론적 접근말고 실제로 해봐야 조금 더 명확히 이해가 될거 같아서 다음 포스팅에서는 실제 ESP32의 예제 코드분석과 이를 통한 nRF Connect 어플로 실제 패킷구성이 어떤식으로 되는지, 실제 어떻게 블루투스 스캔이 되는지 실습해보겠다.

 

그럼 굿밤