지식/BLE

BLE GATT를 Ble Sniffer로 측정하기

원원 2025. 11. 16. 13:21

안녕하세요. 오늘은 이전에 알아봤던 BLE GATT를 BLE Sniffer로 측정해보겠습니다.
측정하는 방식과 알아보는 방식은 이전에 BLE GAP을  BLE Sniffer로 측정했던 방식과 동일합니다.


스마트폰 앱에서 CONNECT 버튼을 확인할 수 있습니다.

(1)  ADV_IND
- CONNECT를 하기전에는 ESP32가 advertising 하고있습니다. 

(2) CONNECT_IND
- 스마트폰에서 CONNECT를하면 연결시도를 합니다. 
CONNECT_IND 패킷 안에 설정정보를 만듭니다. 이중에 Access Address가 있는데, 데이터 채널에서 사용되는 32bit 주소입니다. 이 주소로 LL/ATT/GATT 패킷이 전송됩니다. CONNECT_IND 이후부터는 데이터채널로 전환됩니다.

(3) Control Opcode: LL_VERSION_IND
- 연결시도 이후에 BLE 버전정보를 교환하게 됩니다.

(4) Empty PDU
- 연결을 유지하려고 스마트폰과 ESP32는 서로 패킷을 보냅니다.


(5) LL_FEATURE_REQ/LL_FEATURE_RSP
- 지원 기능(Encrption, DLE, PHY등) 동기화 과정입니다.

(6) LL_LENGTH_REQ/LL_LENGTH_RSP
- 데이터 길이 협상입니다. 

(7) Sent Read By Group Type Request, Primary Service, Handles : 0x0001..0xffff (No.26662)
- 스마트폰이 ESP32의 GATT Primary Service(0x2800) 목옥을 요청하는 패킷입니다.

(8) Rcvd Read By Group Type Response, Attribute List Length: 3, GATT, GAP, Heart Rate (No.26669)
- ESP32가 Primary Service목록 3개 (GAP,GATT,Heart Rate)를 가지고있다고 답변한 패킷입니다.
마지막 Attribute Data의 Group End Handle을 보면 0x002b입니다. 그 의미는 Attribute Data가 더 있다는 말입니다.

(9) Sent Read By Group Type Request, Primary Service, Handles: 0x002c..0xffff(No. 26676)
- GATT Primary Service 목록을 다시 요청합니다. Group End Handle가 0x002b였으므로 0x002b+1부터 시작합니다.

(10) Rcvd Read By Group Type Response, Attribute List Length: 1, Automation IO (No.26679)
- 응답입니다. Group end Handle가 0xffff이므로 서비스의 끝을 의미합니다.

(11) 그 다음에는 각각의 UUID들의 Include Service와 Characteristic을 요청합니다.


여기까지 했으면 스마트폰에서는 아래의 UI들이 보입니다.

이 상태에서는 스마트폰과 ESP32는 Empty PDU 패킷을 교환하고있습니다.




[테스트]

Generic Access의 Device Name을 얻으면 ESP32가 읽힙니다.

(1) Sent Read Request, Handle: 0x0016 (GAP: Device Name)
- 스마트폰에서 Handle 0x0016을 Read Request합니다. 

(2) Rcvd Read Response, Handle: 0x0016 (GAP: Device Name)
- ESP32가 Request에 대해서 응답을 합니다.