-블루투스 통신을 하기 위한 Protocol 스택입니다.
-블루투스 Signal Packet을 송수신시 이 Protocol Stack을 거치면서 Packet들이
분석되거나 생성됩니다.
-Protocol 스택은 Controller, Host, Application이 3가지로 나누어집니다.
-그 중 Connection 과정에서 필요한 부분인 Physical Layer, Link Layer, Generic Acess Profile(GAP),
Generic Attribute Profile(GATT)에 대해서 알아보겠습니다.
1. Physical Layer
-실제 Analog Signal과 통신할 수 있는 회로로 구성되어있다.
-Analog신호 <--> Digital신호 변경하기위해 사용
-위의 그림처럼 2.4 Ghz의 밴드를 총 40개의 채널로 나누어 통신한다.
*Advertisting 채널 3개
- Advertising Packet을 비롯한 Connection을 맺기 위해 주고받는 Packet들의
교환에 이용
*Advertisting 채널 37개
- Data Channel로써 Connection 이후의 Data Packet 교환에 이용
2. Link Layer
-Physical Layer 바로 윗단에는 Link Layer가 있다.
-Link Layer는 하드웨어와 소프트웨어의 조합으로 구성되어있습니다..
*하드웨어 -> 높은 컴퓨팅 능력 작업처리
*소프트웨어 -> 디바이스의 연결상태 관리
-통신하는데 있어서 디바이스의 역할(Role)을 정의하고 이에 따라 변경되는 상태(State)를 가지고 있다.
2-1. Role(역할)
1)Master
-연결을 시도하고 연결 후에 전체 Connection을 관리하는 역할
2)Slave
-Master의 연결 요청을 받고 Master의 timing 규약을 따르는 역할
3)Advertiser
-Advertising Packet을 보내는 역할
4)Scanner
-Scanner는 2가지 Scanning 모드가 있습니다.
4-1)Passive Scanning
-Scanner는 Advertising packet을 받고 이에 대해 따로 응답 X
-따라서 해당 Packet을 보낸 Advertiser는 Scanner가 Packet을 수신했는지 알지 못합니다.
4-2)Active Scanning
-Advertising Packet을 받은 Scanner는 Advertiser에게 추가적인 데이터를 요구하기 위해
ScanRequest라는 것을 보낸다.
-이를 받은 Advertiser는 Scan Response로 응답한다.
*Scan Request, Scan Response
1)사용하는 이유
-앞서 31bytes 이하의 UserData에 대해서는 Advertising Signal Packet에 넣어서
보낼 수 있다고 했습니다.
-하지만 31bytes 보다는 크지만 Connection까지 맺어서 보내기는 오버헤드가 큰 데이터가
있을 때 사용합니다.
-ScanRequest, ScanResponse를 이용하면 두번에 걸쳐서 데이터를 나눠 보낼 수 있습니다.
-즉 Advertising Packet을 받은 Scanner(Observer)는 추가적인 UserData를 얻기위해
Scan Request를 보내게 된다.
-Scan Request를 받은 Advertiser는 나머지 데이터를 Scan Response Signal에담아서 보낸다.
-이들은 크게 Connection 이전 -> (Advertiser, Observer)
Connection 이후 -> (Master, Slave)로 분류
2-2. State(상태)
-LinkLayer는 5가지 State를 가지고 있는데 각 디바이스는 서로연결이 되는 과정에서 State를 변화시킵니다.
1)Standby State
-Signal Packet을 보내지도 받지도 않은 상태
2)Advertising State
-Advertising Packet을 보내고 해당 Advertising Packet에 대한
상대 디바이스의 Response를 받을 수 있고 이에 응답 할 수 있는 상태
(요청을 받고 응답할 수 있음)
3)Scanning State
-Advertising Channel에서 Scanning하고 있는 상태
4)Initiaing State
-Advertiser의 Connectable Advertising Packet을 받고난 후 Connection Request
를 보내는 상태
(Advertising Packet의 요청, 응답이 끝난 후 Connection Request를 보내는 상태)
5)Connection State
-Connection 이후의 상태
3.Generic Access Profile(GAP)
-서로 다른 제조사가 만든 BLE 디바이스들끼리 서로 호환되어 통신할 수 있도록 해주는
주춧돌 역할을 한다.
-즉 어떻게 디바이스간에 서로를 인지하고 Data를 Advertising하고
Connection을 맺을지에 대한 프레임워크를 제공한다.
-Advertising Mode일 때 GAP에서 Advertising Data *Payload와
Scan Response Payload를 포함할 수 있다.
-또한 GAP에서 BLE통신을 위해 Role, Mode, Proceedure, Security,
Additional GAP Data Format등을 정의함.
-이들은 실제 API와 직접적으로 많은 연관이 있기 때문에 그 내용이 상당히 많지만
여기서는 BLE Connection과 관련있는 Role(역할)에 대해서 알아보겠습니다.
*페이로드
-전송되는 데이터를 의미함
-데이터를 전송할 때, 헤더와 메타데이터, 에러 체크 비트 등과 같은 다양한 요소들을 함께 보내어
데이터 전송의 효율과 안정성을 높히게 됩니다 이 때, 보내고자 하는 데이터 자체
3-1)Role
-LinkLayer에서의 Role과 상응하는 역할을 합니다.
1)Broadcaster
-Link Layer에서 Advertiser역할에 상응한다.
-주기적으로 Advertising Packet을 보낸다.
ex) 온도센서는 온도 데이터를 자신과 연결된 디바이스에게 일정주기로 보낸다.
2)Observer
-Link Layer에서 Scanner 역할에 상응한다.
-BroadCaster가 뿌리는 Advertising Packet에서 data를 얻는다.
ex)온도센서로부터 온도데이털르 받아서 디스플레이에 나타내는 테블릿
컴퓨터의 역할이다.
3)Central
-Link Layer에서 Master역할과 상응한다.
-Central 역할은 다른 디바이스의 Advertising Packet을 들고 Connection을
시작할 때 시작된다.
-좋은 성능의 CPU를 가지고 있는 스마트폰이나 테블릿 컴퓨터들의 역할이다.
4)Peripheral
-Link Layer에서 Slave)역할과 상응한다.
-Advertising Packet을 보내서 Central 역할의 디바이스가 Connecting을 시작할 수 있도록 하게끔 유도한다.
-센서기능이 달린 디바이스들의 역할이다.
4.Generic Attribute Profile(GATT)
-BLE Data 교환을 관리함
-디바이스들이 Data를 발견하고 읽고 쓰는 것을 가능하게 하는 기초적인
Data Model과 Procedure를 정의한다.
-그래서 GATT는 최상위 Data Layer라고도 불린다.
-디바이스간에 low-level에서의 모든 인터렉션(상호작용)을 정의하는 GAP와는 달리
GATT는 오직 Data의 Format 및 전달에 대해서만 처리한다.
-Connection Mode 일 때 GATT Service와 Characteristic을 이용해 양방향 통신을 하게 된다.
-GATT는 Data를 처리함에 있어서 연결된 각각의 BLE 디바이스를 두 가지 상태로 구분한다
1)GATT Client
-GATT Server와 데이터를 주고받기 위해 Resqeust한다는 점이다.
-처음 연결 시에는 Server에 대한 정보가 없으므로 연결이 되는 순간 탐색과정(서버가 어떤 서비스를
제공 및 데이터를 보내는지)을 거친다 이 과정을 Service Discovery라고 한다.
2)GATT Server
-Request를 받은 Server는 이에 상응하는 Response를 보낸다.
-Client를 위해 UserData를 생성하고 저장한다.
1)GATT의 구성요소 및 구조
1-1)GATT 구조
-서비스, 특성 및 설명자는 위쪽에 서비스가 있고 아래쪽에 설명자가 있는 계층 구조로 구성됩니다
//Services → Charteristic → descriptor 순으로 계층구조가 되어져 있음.
-서비스에 하나 이상의 특성이 있습니다.
//Service 에는 하나 이상의 Charteristic이 있음.
-설명자는 완전히 선택 사항인 반면 서비스에는 반드시 하나 이상의 Charteristic이 포함되어야 함으로 Charteristic에는 설명자가 0개 이상 있습니다.
1-2)GATT 속성유형
-서비스, 특성 및 설명자는 모두 속성 유형입니다.
//Services, charateristic, descriptor 모두 속성의 유형 중 하나
따라서 일반 속성 프로파일, 속성 테이블 및 속성 프로토콜이라고 하는 것입니다.
모든 속성은 UUID로 식별되는 유형을 가집니다.
-일부 속성은 Bluetooth의 기술 표준 기구인 Bluetooth SIG에 의해 정의되며 16비트
길이의 UUID를 가지고있습니다.
-일부 속성은 제품 팀에서 특정 장치에 맞게 설계되었으며 128비트 UUID를 가지고 있습니다.
//내부적으로 회사에 맞게 커스텀
Services
-서비스는 Charteristic의 소유자로 생각할 수 있습니다.
-종종 서비스는 버튼이나 특정 센서와 같은 장치의 특정 기능을 나타냅니다.
-예를 들면 제조사 정보 및 일련번호와 같은 장치에 대한 다양한 정보를 담는 컨테이너인
장치 정보 서비스가 있습니다.
Characteristics
-특성은 장치의 특정 내부 상태 또는 장치가 센서를 사용하여 측정할 수 있는 환경의 일부 상태와
관련된 데이터 항목이다.
-현재 배터리 수준은 내부 상태 데이터의 예이며, 외부 온도는 센서로 측정할 수 있습니다.
-때떄로 Characteristic은 측정하고자 하는 주파수와 같은 구성 데이터를 나타냅니다.
-이러한 경우 장치가 Bluetooth를 통해 이러한 데이터를 다른 장치에 노출시켜 사용할 수 있는 방법은 해당
데이터를 Charateristic으로 제공하는 것입니다.
-블루투스 SIG 정의 특성에는 장치 정보 서비스에서 찾을 수 있는 일련번호 문자열이 있습니다.(예시)
-Charteristic에는 유형(Type), 값(Value), 속성(properties) 및 사용권한(permissions)이 있습니다.
-Type은 위에서 이미 설명한 것으로 어떤 특정 타입에 특성을 나타내는 UUID 값입니다.
-Value은 연결된 상태 데이터 항목의 값입니다.
-Properties는 읽기, 쓰기, 또는 알림과 같은 다양한 정의된 작업의 관점에서 다른 장치가
블루투스 통신을 통해 무엇을 할 수 있는지에 대해 정의합니다.
-Charteristic의 Properties는 지원되는 작업을 알려줍니다.
-때때로 장치는 속성 테이블에서 값을 읽거나 쓰는 것과 같은 작업을 처리할 때
특별한 방식으로 응답하도록 프로그래밍되어 작업이 단순히 연결을 통해 데이터를 전송하는 것보다
더 많은 결과를 만들 수 있다.
Descriptors(설명자)
-Characteristic와 관련된 세부 정보를 전달
Charteristic을 포함하는 동작을 구성할 수 있는 메타데이터를 포함합니다.
-위의 그림처럼 Characteristic안에서 Notify(실시간 데이터 전달)여부를 Boolean으로 설정하기 위해서
Descriptor를 사용하기도 합니다.
Profile
-프로파일은 장치의 동작 방식, Service, Characteristic및 Descriptor, 보안 규칙, 동시성 제한 등의 측면에서
장치의 엑세스 방법에 대한 모든 필수 정보를 모은 사양입니다.
1-3)Client Server구조의 GATT
-스마트폰 애플리케이션이 블루투스 연결을 통해 장치와 상호 작용할 때 클라이언트/서버
아키텍처가 있습니다.
-앱은 일반적으로 GATT 클라이언트이며 장치는 일반적으로 GATT 서버입니다.
그들은 속성 프로토콜 또는 줄여서 ATT라고 불리는 프로토콜을 사용해서 통신합니다.
-스마트폰 개발자로서 당신은 API로 작업하며 ATT 프로토콜 데이터 단위 등을 공식화 하는 거세 대해
걱정할 필요가 없습니다.
Device Discovery란
-위에서 설명된 모든 것은 GATT 클라이언트 및 서버로 연결되어 통신하는 장치와 관련이 있습니다.
하지만 이것보다 먼저 두 장치가 아직 연결되지 않은 단계가 있습니다.
그들은 어떻게 서로를 찾고 연결할까요 이 질문에 대한 답은 ‘장치 검색(Device Discovery)’로 불리며
블루투스 아키텍처의 다른 부분인 GAP(General Acess Profile)의 책임입니다.
GAP에는 하나의 장치가 주기적으로 작은 데이터 패킷을 내보내며 Advertising(광고) 하며
이러한 패킷에는 광고를 수행하는 장치에 대한 정보(패킷데이터)가 포함되어 있습니다.
광고 패킷을 스캔, 수신 및 처리하고 관심 없는 유형의 장치에서 나오는 패킷을 필터링하기 위해
연결할 장치를 찾는 다른 장치
일반적으로 사용자는 검색된 장치에 대한 정보를 받은 다음 연결할 장치를 선택합니다.
광고를 하는 장치를 블루투스 주변 장치(Bluetooth Peripheral)라고 한다.
스캔을 하는 장치를 블루투스 Central 장치(Bluetooth Central)라고 합니다.
*UUID란
-Universally Unique Identifiers
-범용 고유 번호라고 불리며 128비트의 숫자들을 조합
-블루투스를 사용하는 디바이스는 여러개의 서비스를 갖고있습니다.
-서비스란 간단히 얘기하면 블루투스 디바이스에서 제공하는 기능들을 모아놓은 곳이라고
얘기할 수 있습니다.
ex)온도센서 기능이 있는 블루투스 디바이스 -> 온도센서 서비스
-위의 그림처럼 이러한 각각의 서비스에는 고유한 번호인 UUID가 있으며 UUID는 이러한 서비스
들을 구분하고 블루투스 스캔 시에도 해당 UUID를 가진 서비스를 찾는데에도 사용됩니다.
*MTU(Maximum Transmission Unit)란
-MTU는 BLE 통신시 한번에 데이터를 보낼수 있는 최대 단위입니다.
-실제로 데이터를 담을 수 있는 부분은 위의 그림의 ATT Payload 영역인 244bytes까지 최대로 담을 수 있습니다.
-블루투스 4.0, 4.1은 최대 20Bytes까지이고 4.2및 5.0에서는 최대 244Bytes까지 이며 기본으로 23Bytes가 제공됩니다.
-블루투스 연결을 맺을 때 두 디바이스간의 MTU를 서로 교환해야 합니다. 각 측은 지정된 MTU보다 큰 데이터를
전송할 수 없습니다.
참고자료
https://punchthrough.com/maximizing-ble-throughput-on-ios-and-android/
https://beck999.tistory.com/10
https://melonicedlatte.com/web/2020/01/14/205200.html
https://medium.com/@zoyi_product/bluetooth-low-energy-ble-84b03705ffca
https://www.oreilly.com/library/view/getting-started-with/9781491900550/ch04.html
https://www.bluetooth.com/blog/a-developers-guide-to-bluetooth/
'블루투스 공부' 카테고리의 다른 글
블루투스 공부 1편 [BLE 통신] (0) | 2022.09.13 |
---|
댓글