블루투스 제품 설계 플레이그라운드
지금까지 각 장에서 따로 계산했던 것들은 사실 한 제품 안에서 서로 얽혀 있다. 연결 간격을 줄이면 반응은 빨라지지만 배터리가 줄고, Coded PHY로 거리를 늘리면 공중 시간이 늘어 처리량과 배터리가 줄며, 송신 전력을 올리면 거리는 늘지만 2장에서 봤듯 몸이 가리는 손실 앞에서는 효과가 작다. 이 장에서는 제품 하나를 골라 직접 파라미터를 정하고, 그 결과가 요구 사항과 Core 6.3의 규칙을 함께 만족하는지 확인한다. 정답은 하나가 아니다. 무엇을 포기할지 고르는 것이 설계다.
- 제품의 요구 사항(배터리 수명, 반응 시간, 거리, 데이터 양)을 블루투스 파라미터로 옮긴다.
- 2~12장의 계산(링크 버짓, 패킷 시간, 연결 규칙, 처리량, 전류)을 함께 돌려 교환 관계를 체감한다.
- 선택한 기능이 어느 Core 버전과 양쪽 기기의 지원을 필요로 하는지 점검한다.
설계해 보기
제품을 고르면 그 제품의 요구 사항(가로 점선)과 흔한 출발점 설정이 채워진다. 슬라이더를 움직여 네 막대가 모두 점선을 넘게 만들어 보자. 아래 목록은 Core 6.3 규칙과 호환성 점검이다.
자주 만나면 이야기는 빨리 전하지만 피곤하고, 크게 말하면 멀리까지 들리지만 목이 쉰다. 블루투스 제품의 배터리 수명, 반응 속도, 거리, 처리량도 서로 맞바꾸는 관계다. 이 장의 설계기는 앞 장들의 계산을 한데 모아, 한쪽을 당기면 다른 쪽이 얼마나 줄어드는지 보여 준다.
손목 밴드처럼 몸에 붙이면 신호가 12 dB 더 약해진다고 하자. 경로 손실 지수 2.7인 실내에서 도달 거리는?
거리 배수 = 10(−12 / (10 × 2.7)).
제품 설계: 수명 · 반응 · 거리 · 처리량
사례로 따라가기
설계기의 두 제품을 처음부터 끝까지 따라가 보자. 아래 숫자는 모두 위 설계기에서 같은 값을 넣으면 그대로 나온다.
심박계: 1년을 버티게
요구 사항은 “1초마다 심박 하나, 알림은 1초 안에, 10 m, CR2032급 180 mAh로 1년”이다. 출발점(LE 1M, 0 dBm, 간격 126.25 ms, 지연 0, 감독 타임아웃 2 s)에서 수명이 9.0개월로 모자란다. 손잡이는 둘이다.
| 바꾼 것 | 수명 | 알림 반응 (심박계 → 휴대폰) | 명령 반응 (휴대폰 → 심박계, 최악) |
|---|---|---|---|
| 출발점 | 9.0개월 | 126 ms | 126 ms |
| 간격 325 ms | 1.6년 | 325 ms | 325 ms |
| 간격 그대로, 지연 4 | 2.6년 | 126 ms | (1 + 4) × 126.25 = 631 ms |
심박계는 알림이 주인공이라 페리페럴 지연이 더 낫다. 보낼 것이 없을 때만 이벤트를 건너뛰므로 알림은 그대로 빠르고, 대신 휴대폰이 보내는 설정 명령이 최악 631 ms 늦어진다. 이것은 요구 사항 표에 없던 항목이라, 이 교환을 받아들일지는 제품을 정하는 사람이 고른다. 마지막으로 규칙을 확인한다. 감독 타임아웃은 (1 + 4) × 126.25 ms × 2 = 1,262.5 ms보다 커야 하므로 2 s면 된다. 도달 거리는 몸 손실 12 dB를 넣고도 46 m라 10 m에 넉넉하다.
게임 컨트롤러: 4 ms 안에
요구 사항은 “버튼 반응 4 ms, 5 m, 600 mAh 충전식으로 20일”이다. 출발점(LE 2M, 간격 7.5 ms)은 반응이 7.5 ms다. 7.5 ms는 모든 컨트롤러가 지원하는 BCV의 가장 짧은 값이라, 더 줄이려면 6.2의 짧은 연결 간격(SCI)이 필요하다.
| 간격 (SCI 켬) | 반응 | 수명 | 지원 보장 |
|---|---|---|---|
| 500 µs | 0.50 ms | 4.8일 | ECV, 선택 |
| 2.625 ms | 2.63 ms | 25.0일 | ECV, 선택 |
| 3.5 ms | 3.50 ms | 1.1개월 | ECV, 선택 |
| 3.75 ms | 3.75 ms | 1.2개월 | RCV, SCI면 필수 |
짧을수록 반응은 좋지만 배터리가 급히 준다. 게다가 SCI를 지원하는 컨트롤러가 반드시 받아야 하는 값은 1.25 ms 배수(RCV)뿐이고, 3.5 ms 같은 125 µs 단위 값(ECV)은 상대가 지원할 수도 안 할 수도 있다(6장). 그래서 3.75 ms를 고른다. 반응 4 ms와 수명 20일을 함께 넘는 RCV 값이다. 다만 여유가 0.25 ms뿐이라, 이벤트 하나를 놓치면 그 입력은 7.5 ms 걸린다.
남은 일은 그림 14-1이다. 연결은 BCV(7.5 ms)로 맺고, 기능 교환으로 휴대폰도 SCI를 지원하는지 확인한 뒤 Connection Rate 절차로 3.75 ms로 내려간다. 휴대폰이 6.2 이전이면 7.5 ms로 동작한다. 그때 반응은 요구보다 느리므로, 제품 설명에 “SCI 지원 기기에서 4 ms”라고 밝히는 것까지가 설계다.
연결 간격 집합 BCV·RCV·ECV와 SCI 컨트롤러의 필수 지원: [Vol 6] Part B §4.5.1 · 감독 타임아웃 하한: §4.5.2 · Connection Rate 절차: §5.1.32
설계 체크리스트: 요구 사항에서 기능으로
| 요구 사항 | 먼저 볼 손잡이 | 필요한 Core 기능 (버전) | 이 책 |
|---|---|---|---|
| 코인 전지로 수년 | 간격·지연, 데이터 묶기, 수면 전류, 수정 발진기 | LE (4.0), 서브레이팅 (5.3) | 6·9장 |
| 버튼 반응 수 ms | 짧은 연결 간격, 지연 0 | 짧은 연결 간격 SCI (6.2) | 6장 |
| 마당·창고 끝까지 | Coded PHY, 안테나·배치 | LE Coded (5.0), 확장 광고 (5.0) | 2·3·5장 |
| 펌웨어 업데이트 빠르게 | 2M, DLE, MTU, 이벤트 길이 | LE 2M (5.0), DLE (4.2) | 6·7장 |
| 엿듣기·끼어들기 방지 | Secure Connections, 입출력, OOB | LE Secure Connections (4.2) | 8장 |
| 추적 방지 | RPA, 광고 내용 | LL 프라이버시 (4.2), 무작위 RPA 갱신 (6.1) | 5·8장 |
| 무선 오디오 저지연·양쪽 귀 | CIS, LC3, NSE·FT | 등시성 채널 (5.2) | 10장 |
| 여러 명에게 소리 방송 | BIS, 주기적 광고 | 등시성 채널 (5.2), 주기적 광고 (5.0) | 10장 |
| 방향 찾기 | 안테나 배열, CTE | AoA/AoD (5.1) | 11장 |
| cm급 거리 | CS 보정·안테나 | 채널 사운딩 (6.0), 진폭 공격 대응 (6.2) | 11장 |
| 수천 기기 관리 | 서브이벤트·응답 슬롯 | PAwR (5.4) | 12장 |
표의 기능 대부분은 선택 사항이다(1장). 내 제품이 지원해도 상대(대개 사용자의 휴대폰)가 지원하지 않으면 쓸 수 없다. 그래서 제품은 기본 경로(LE 1M, 레거시 광고, 7.5 ms 이상 간격)로도 동작하게 만들고, 상대가 지원할 때만 더 나은 경로로 올라가도록 설계한다. 연결 직후의 기능 교환(Feature Exchange 절차, [Vol 6] Part B §5.1.4)이 그 출발점이다.
핵심 정리
- 블루투스 설계는 배터리 · 반응 · 거리 · 처리량의 교환이다. 간격·지연은 배터리와 반응을, PHY와 송신 전력은 거리와 배터리·처리량을 맞바꾼다.
- 요구 사항을 먼저 숫자로 정하고(“1초마다 2바이트, 반응 100 ms, 10 m, 1년”), 그 숫자를 각 장의 식으로 파라미터에 옮긴다.
- 짧은 간격이 필요하면 SCI 컨트롤러가 반드시 지원하는 RCV(1.25 ms 배수)에서 고르고, 상대가 지원하지 않을 때의 기본 경로(BCV)도 정해 둔다.
- 사양 규칙(감독 타임아웃 > (1 + 지연) × 간격 × 2 등)과 양쪽의 기능 지원을 함께 점검하고, 기본 경로로도 동작하게 만든다.
확인 퀴즈
심박계의 배터리 수명을 늘리면서 심박 알림(심박계 → 휴대폰)의 반응은 유지하고 싶다. 가장 알맞은 손잡이는?
분실물 태그를 Coded PHY로 광고하려 한다. 꼭 필요한 것은?
게임 컨트롤러가 6.2의 짧은 연결 간격을 지원하지만 사용자의 휴대폰은 6.0이다. 어떻게 해야 하나?
6.2 SCI를 지원하는 두 기기 사이에서, 상대가 반드시 지원한다고 믿고 쓸 수 있는 연결 간격은?