보안 저전력 Bluetooth 허브 및 센서 네트워크 구축

작성자: Stephen Evanczuk

Digi-Key 북미 편집자 제공

모바일 장치에서 널리 사용되는 Bluetooth를 활용하면 소비자가 스마트 제품에 무선으로 쉽게 액세스할 수 있습니다. 하지만 IoT 개발자의 경우 Bluetooth 연결 센서 네트워크를 구축하려면 배터리 수명 극대화, Bluetooth 프로토콜 최적화, 장치 간 보안 연결 보장 등과 같은 문제를 해결해야 합니다.

이 기사에서 소개하는 바와 같이 개발자는 Cypress Semiconductor의 고급 Bluetooth 장치와 관련 개발 환경을 사용하여 이러한 문제를 신속하게 해결하고 보안 Bluetooth 허브 센서 네트워크를 빠르게 구현할 수 있습니다.

Bluetooth를 사용해야 하는 이유

스마트폰과 기타 모바일 장치에서의 폭넓은 지원에 힘입어 Bluetooth는 웨어러블, 의료 장치 등과 같은 개인용 전자 장치와 소비자를 연결할 때 선호되는 무선 기술로 자리잡았습니다. Bluetooth 5의 출현으로 IoT 개발자는 이런 동일한 장점을 활용하면서, 센서 네트워크 및 기타 IoT 응용 제품과 관련하여 더 먼 거리와 더 높은 데이터 속도에 대해 증가하는 요구 사항을 충족할 수 있게 되었습니다.

개발자는 점점 증가하고 있는 Bluetooth 5 지원 장치 어레이를 통해 이러한 응용 제품에 대한 설계를 구축할 수 있습니다. 이러한 장치는 완전한 RF 서브 시스템과 프로세서 코어를 결합하여 Bluetooth 통신과 관련한 낮은 수준의 트랜잭션을 수행할 수 있습니다. 하지만 저전력 소비를 유지하고 IoT 네트워크에서 보안 연결을 보장해야 하므로 이러한 응용 분야에서 Bluetooth를 배포하는 것은 보다 복잡할 수 있습니다.

통합 솔루션

Cypress Semiconductor CYW20719는 IoT, 웨어러블, 개인용 전자 기기 및 기타 저전력 응용 제품을 위한 배터리 구동식 Bluetooth 연결 설계에 대해 증가하는 요구 사항을 충족하도록 특별히 설계되었습니다. 저전력 기능과 함께 적응형 주파수 호핑을 비롯한 고급 Bluetooth 5 기능 지원은 이러한 응용 분야와 관련된 복잡한 무선 통신 환경에서 중요한 이점을 제공합니다.

이 장치는 저전력 Bluetooth 무선 통신 서브 시스템, 부동 소수점 처리 장치(FPU)가 탑재된 Arm® Cortex®-M4 코어 및 여러 주변 장치 블록을 통합합니다(그림 1). 또한 온칩 보안 엔진은 공용 키 암호화를 가속화하고 Bluetooth 작동 보안을 지원하는 데 필요한 중요 암호화 기능을 제공합니다. 마지막으로 온칩 전력 관리 장치(PMU)는 개발자에게 Bluetooth 지원 장치에 필요한 초저전력 작동에 대한 증가하는 요구 사항을 충족할 수 있는 유연한 메커니즘을 제공합니다.

Cypress Semiconductor의 CYW20719 구성도

그림 1: Cypress Semiconductor CYW20719는 Arm® Cortex®-M4, 완전한 Bluetooth 서브 시스템 및 내장된 소프트웨어 서비스를 결합하여 저전력 설계를 위한 완전한 Bluetooth 5 지원 무선 MCU를 제공합니다. (이미지 출처: Cypress Semiconductor)

CYW20719 무선 통신 서브 시스템에는 송신(Tx) 및 수신(Rx) 작업을 위한 완전한 2.5GHz RF 신호 경로가 포함됩니다. Rx 신호 경로의 경우 장치에서 대역 외 신호를 감쇠하여 추가 오프칩 필터(필요한 경우)를 추가하지 않고도 개발자가 장치를 사용할 수 있도록 지원하면서 -95.5 dBm Rx 감도를 실현합니다. Tx 신호 경로에는 -24dBm ~ 최대 +4dBm 범위의 구성 가능한 송신 전력 수준을 지원하도록 설계된 통합 전력 증폭기(PA)가 포함됩니다. 통합 물리층(PHY) 기능과 함께 이 장치에는 완전한 온칩 Bluetooth 5 미디어 액세스 제어(MAC) 계층이 포함되어 있습니다. 최적화된 Rx 및 Tx 신호 경로와 함께 이 장치는 5.9mA Rx 전류 또는 5.6mA(@ 0dBm) Tx 전류만 사용합니다.

또한 이 장치는 전력 소비를 최소화하기 위해 통합 전력 관리 장치(PMU)로 관리할 수 있는 다양한 전력 모드를 제공합니다. 별도의 RF 및 디지털 전력 영역을 공급하도록 설계된 PMU에는 통합 벅 조정기, 디지털 회로용 저드롭아웃(LDO) 조정기 및 RF 회로용 개별 LDO가 결합되어 있습니다(그림 2). 또한 PMU에는 소스 VBAT 공급이 2.1V 이하로 떨어질 경우 디지털 및 RF LDO를 공급하기 위해 벅 조정기를 자동으로 건너뛰는 별도의 바이패스 LDO(BYPLDO)가 포함됩니다.

Cypress CYW20719 PMU 구성도

그림 2: Cypress CYW20719 PMU는 저전력 설계에서 전류 소비를 줄이기 위해 다른 저전력 모드에서 선택적으로 비활성화할 수 있는 별도의 전력 영역을 관리합니다. (이미지 출처: Cypress Semiconductor)

PMU는 작동 중에 선택된 전력 모드에 따라 전력 영역을 조정하며 이러한 전력 모드에는 완전 활성 모드, 유휴 모드 및 세 가지 절전 모드가 있습니다. 초저전력 차단 절전(SDS) 모드에서 PMU는 일부 블록 및 절전 해제 타이밍을 위한 클록 소스로 사용되는 I/O 전력, 실시간 클록(RTC) 및 전용 저전력 발진기(LPO)를 제외한 모든 장치 블록을 끕니다.

SDS 모드의 경우 CYW20719는 최소한의 리소스만 사용하고 프로세스 중에 70μA 미만을 소비하여 이전에 페어링된 다른 Bluetooth 장치 연결을 유지할 수 있습니다. 하지만 이 모드에서는 장치가 메모리를 유지하지 않으므로 더 복잡한 작업을 진행하려면 웜 부팅을 수행하여 상태를 복원해야 합니다. 다른 두 절전 모드(전력 차단 절전(PDS) 및 절전 상태)에서는 메모리 보존을 비롯하여 높은 수준의 장치 활동을 유지하므로 이에 비례하여 전력 소비도 증가합니다. 하지만 그렇다 하더라도 전력 예산이 매우 제한되어 있는 개발자는 저전력 Bluetooth 애드버타이징(약 125μA) 및 활성 연결(약 170μA)을 위해 PDS 모드를 활용할 수 있습니다. 개발자는 장치 전력 모드를 관리하여 기능에 영향을 주지 않으면서 초저전력 작동을 쉽게 실현할 수 있습니다.

시스템 통합

유연한 작동 모드와 포괄적인 기능에도 불구하고 CYW20719는 시스템 설계에서 하드웨어 통합을 완료하기 위해 몇 가지 추가 부품이 필요합니다. 이 장치의 경우 중요 부품이 칩에 통합되어 있으므로 개발자는 일부 저항기, 결합 커패시터, 2.2H 인덕터(예: Murata LQH2MCN2R2M52L), 페라이트 비드(예: Murata BLM15AG601SN1D)만 추가하면 됩니다(그림 3). 하지만 고조파를 줄이기 위해 CYW20719와 안테나 매칭 부품 사이에 대역 통과 필터를 배치하는 것이 좋습니다.

Cypress CYW20719 구성도(확대하려면 클릭)

그림 3: Cypress CYW20719에는 모든 중요한 기능이 통합되어 있으므로 개발자는 권장 대역 통과 필터를 비롯한 몇 가지 부품만 추가하여 하드웨어 통합을 완료하고 고조파를 줄일 수 있습니다. (이미지 출처: Cypress Semiconductor)

마찬가지로 이 장치를 사용하면 1MB 플래시, 512KB RAM, 2MB ROM을 비롯한 광범위한 온칩 메모리와의 소프트웨어 통합을 단순화할 수 있습니다. 플래시와 RAM은 응용 제품을 위한 메모리 영역을 제공하며 온칩 ROM은 장치 펌웨어 및 Bluetooth 프로파일용으로 예약되어 있습니다. 필요에 따라 펌웨어 패치를 지원할 수 있도록 이 장치는 패치 RAM(패치 제어 논리를 통해 연결되는 RAM 영역)을 제공합니다(위의 그림 1 참조). 마지막으로 이 장치는 SDS와 같이 휘발성 메모리를 꺼야 하는 저전력 모드에서도 데이터를 저장할 수 있도록 항시 작동 메모리(AON) 영역을 제공합니다.

칩에 탑재된 RAM 및 플래시 메모리는 다른 최신 장치에 비해 제한적인 것처럼 보이지만, ROM에 내장된 광범위한 소프트웨어 지원은 일반 응용 제품을 위한 충분한 메모리를 보장합니다. Cypress는 가장 낮은 하드웨어 추상화 계층(HAL)부터 WICED(Wireless Internet Connectivity for Embedded Devices) 환경용 응용 프로그래밍 인터페이스(API)까지 확장되는 포괄적인 소프트웨어 스택으로 온칩 ROM을 구성합니다(그림 4).

Cypress CYW20719의 2MB ROM 펌웨어 이미지

그림 4: Cypress CYW20719의 2MB ROM 펌웨어는 실시간 운영 체제를 비롯한 전체 소프트웨어 스택을 제공하여 개발자 응용 코드의 복잡성과 실장 면적이 줄어듭니다. (이미지 출처: Cypress Semiconductor)

HAL에 구축된 ROM 펌웨어는 내장된 실시간 운영 체제를 실행하고 CYW20719 하드웨어와의 모든 상호 작용을 처리합니다. 동시에 ROM 펌웨어는 필수 Bluetooth 일반 속성 프로파일(GATT) 및 일반 액세스 프로파일(GAP) 지원을 비롯하여 Bluetooth 서비스 계층을 완벽하게 보완합니다.

일반 응용 프로그램의 경우 개발자 코드가 RAM에서 실행되어 WICED API를 통해 RTOS, 주변 장치 및 기타 장치 기능에 액세스합니다. RAM 요구 사항은 매우 다양할 수 있지만, CYW20719를 위한 대부분의 응용 코드는 일반적으로 데이터 또는 작업 메모리를 위해 충분한 양의 RAM을 여유 공간으로 남겨 둡니다. 예를 들어, 아래에 설명된 hello_sensor 응용 프로그램은 약 240KB의 RAM을 여유 공간으로 남겨 둡니다.

하지만 응용 프로그램의 코드 베이스가 매우 큰 경우 개발자는 CYW20719의 이점을 활용하여 온칩 플래시에서 현재 위치 실행(XIP) 기능을 수행하도록 설계된 응용 코드를 사용할 수 있습니다. WICED 환경에서는 개발자 지정 코드와 읽기 전용 데이터 섹션을 온칩 플래시로 로드하고 나머지 섹션을 RAM에 배치합니다. 이 방법은 응용 제품의 RAM 실장 면적을 줄이지만 성능에 영향을 줄 수 있습니다. 따라서 개발자는 XIP 코드 섹션을 주의해서 지정하여 시간 결정적인 기능이 RAM에 배치되도록 해야 합니다.

응용 제품 개발

CYW20719를 사용하면 설계 통합이 단순해지지만, 개발자가 보안 저전력 Bluetooth 응용 제품에 주력하려는 경우 하드웨어 설계 및 응용 제품 개발을 완료하는 데 많은 지연이 발생할 수 있습니다. CYW20719 기반 응용 제품을 보여주기 위해 설계된 Cypress CYW920719Q40EVB-01 평가 키트는 Cypress WICED 소프트웨어 환경에서 작동하여 Bluetooth 5.0을 준수하는 IoT 응용 제품을 구축할 수 있는 참조 설계와 포괄적인 개발 플랫폼을 제공합니다.

평가 키트는 그림 3 설계에서 CYW20719를 포함하는 캐리어 모듈을 기반으로 제작되며, 리셋 수행을 위한 Torex Semiconductor XC6119N 전압 감지기가 CYW20719의 RST_N 핀에 연결되어 있습니다. 캐리어 모듈은 키트의 기본 기판에 납땜 방식으로 용접되어 있습니다. 기본 기판에는 STMicroelectronics LSM9DS1TR 9축 동작 센서, Murata NCU 계열 NTC 서미스터, CYW20719 GPIO 포트, 디버그 연결, 확장용 Arduino 호환 헤더, 스위치, LED 등이 간단한 사용자 인터페이스로 포함되어 있습니다(그림 5).

Cypress CYW920719Q40EVB-01 평가 키트 구성도

그림 5: Cypress CYW920719Q40EVB-01 평가 키트는 캐리어 모듈 기반 CYW20719를 일반 IoT 응용 제품을 지원할 수 있는 다양한 기본 기판 부품과 결합합니다. (이미지 출처: Cypress Semiconductor)

Cypress의 샘플 소프트웨어는 여러 센서 장치와 중앙 허브로 구성되는 대표적인 IoT 네트워크에서 CYW20719 및 기타 부품을 포괄적인 보안 Bluetooth 연결 데모의 일부로 사용합니다(그림 6). 개발자는 이 샘플 응용 프로그램을 사용하여 센서 장치와 허브 간 페어링을 위한 다양한 보안 수준을 살펴보고, 이러한 여러 보안 수준이 데이터 교환에 미치는 영향을 평가할 수 있습니다.

CYW920719Q40EVB-01 키트 및 Cypress WICED 개발 환경 구성도

그림 6: 여러 CYW920719Q40EVB-01 키트와 Cypress WICED 개발 환경에서 작동하도록 설계된 Cypress 샘플 응용 프로그램은 대표적인 IoT 응용 제품의 보안 Bluetooth 연결을 보여줍니다. (이미지 출처: Cypress Semiconductor)

응용 제품의 하드웨어의 경우 개발자는 보안 허브로 구성된 별도 CYW920719Q40EVB-01 키트와 네트워크의 개별 센서로 구성된 추가 키트를 사용합니다. 직렬 연결을 통해 각 키트에 연결되는 PC는 파라미터 설정, 데이터 보기, 디버그 메시지 인쇄, 샘플 응용 프로그램과의 상호 작용 등을 위한 콘솔을 제공합니다.

이 샘플 응용 응용 프로그램에는 없지만, 일반 응용 프로그램의 나머지 요소는 응용 제품 모니터링 및 제어 기능을 위한 모바일 장치 연결뿐이며, 직렬로 연결된 PC에서 동일한 기능을 제공합니다.

Cypress는 WICED 개발 환경을 위한 CYW20917 BLE 보안 허브 C 언어 패키지에 이 샘플 응용 프로그램용 소프트웨어를 번들로 제공합니다. 이 경우 패키지는 동일한 응용 프로그램에 두 개의 별도 역할에 대한 두 개 프로젝트를 포함하고 있습니다. 보안 허브로 지정된 키트에서 실행하도록 설계된 프로젝트(secure_hub)를 사용하면 허브에서 여러 Bluetooth 프로토콜 역할을 지원할 수 있습니다. 특히, 허브 소프트웨어는 슬레이브로 실행 중인 다른 키트와 별도 보안 수준에서 페어링할 수 있도록 설계되었습니다.

슬레이브로 구성된 키트는 페어링 중에 설정된 보안 수준에서 데이터 수집과 통신을 보여주도록 설계된 센서 프로젝트(hello_sensor)를 실행합니다. 각 프로젝트는 각 기능 역할을 지원하는 데 필요한 여러 헤더와 코드 모듈을 포함합니다. 이러한 파일 중 일반 속성 프로파일(GATT) 헤더(gatt_db.h) 및 코드(gatt_db.c) 파일이 secure_hub 및 hello_sensor 프로젝트에 각각 포함되어 있습니다.

Bluetooth 프로토콜에서 GATT 데이터베이스(DB) 조회 테이블은 각각 지원되는 특성 세트로 구성된 일련의 정의된 서비스를 통해 Bluetooth 연결의 특성과 기능을 정의합니다. 예를 들어, Bluetooth 사양은 유틸리티 기능(예: 경고 알림, 장치 정보), 특수 용도 기능(예: 혈압 및 산소 포화도 측정기 서비스)을 비롯한 미리 정의된 GATT 서비스를 포함합니다. GATT 서비스보다 더 기본적인 역할을 제공하는 장치용 Bluetooth 일반 액세스 프로파일(GAP)은 네트워크에서 검색 가능하도록 애드버타이징하는 방법과 검색 후 연결을 설정하는 방법을 정의합니다.

secure_hub 프로젝트와 hello_sensor 프로젝트의 gatt_db.h 헤더와 gatt_db.c 코드는 보안 허브 및 센서 구성 키트에 대한 GAP 서비스와 GATT 서비스를 각각 정의합니다. 이 데모 응용 프로그램의 경우 각 프로젝트는 역할에 따라 맞춤형 GATT 서비스를 정의합니다. 예를 들어, hello_sensor 프로젝트 헤더에는 필수 GATT 및 GAP 서비스 핸들을 정의하는 C 열거형 유형과 센서 서비스에 대한 맞춤형 GATT 정의(목록 1a)가 포함됩니다. 그러면 프로젝트의 gatt_db.c 파일에서 이러한 정의를 사용하여 Bluetooth 프로토콜(목록 1b)에 필요한 GATT DB를 구축합니다.

복사 

typedef enum

{

HANDLE_HSENS_GATT_SERVICE = 0x1, // service handle

 

HANDLE_HSENS_GAP_SERVICE = 0x14, // service handle

HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME, // characteristic handl

HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL, // char value handle

 

HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE, // characteristic handl

HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,// char value handle

 

 

HANDLE_HSENS_SERVICE = 0x28,

HANDLE_HSENS_SERVICE_CHAR_UART, // characteristic handl

HANDLE_HSENS_SERVICE_CHAR_UART_VAL, // char value handle

HANDLE_HSENS_SERVICE_CHAR_CFG_DESC, // charconfig desc handl

 

HANDLE_HSENS_SERVICE_CHAR_BLINK, // characteristic handl

HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL, // char value handle

 

HANDLE_HSENS_SERVICE_CHAR_TEMP, // characteristic handl

HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL, // char value handle

HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC, // charconfig desc handl

(A)

복사 

 

/* Permissions for custom characteristics */

#define LED_BLINK_CHAR_PERMISSION LEGATTDB_PERM_WRITE_REQ | LEGATTDB_PERM_AUTH_WRITABLE | LEGATTDB_PERM_READABLE

#define TEMP_CHAR_PERMISSION LEGATTDB_PERM_READABLE

#define UART_CHAR_PERMISSION LEGATTDB_PERM_READABLE

 

uint8_t paired_security_level;

 

static void temp_notificaition_timeout( uint32_t count );

 

 

const uint8_t hello_sensor_gatt_database[]=

{

// Declare mandatory GATT service

PRIMARY_SERVICE_UUID16( HANDLE_HSENS_GATT_SERVICE, UUID_SERVICE_GATT ),

 

// Declare mandatory GAP service. Device Name and Appearance are mandatory

// characteristics of GAP service

PRIMARY_SERVICE_UUID16( HANDLE_HSENS_GAP_SERVICE, UUID_SERVICE_GAP ),

 

// Declare mandatory GAP service characteristic: Dev Name

CHARACTERISTIC_UUID16( HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME, HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL,

UUID_CHARACTERISTIC_DEVICE_NAME, LEGATTDB_CHAR_PROP_READ, LEGATTDB_PERM_READABLE ),

 

// Declare mandatory GAP service characteristic: Appearance

CHARACTERISTIC_UUID16( HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE, HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,

UUID_CHARACTERISTIC_APPEARANCE, LEGATTDB_CHAR_PROP_READ, LEGATTDB_PERM_READABLE ),

 

// Declare proprietary Hello Service with 128 byte UUID

PRIMARY_SERVICE_UUID128( HANDLE_HSENS_SERVICE, UUID_HELLO_SERVICE ),

// Declare characteristic used to notify/indicate change

CHARACTERISTIC_UUID128( HANDLE_HSENS_SERVICE_CHAR_UART, HANDLE_HSENS_SERVICE_CHAR_UART_VAL,

UUID_HELLO_CHARACTERISTIC_NOTIFY, LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_INDICATE, UART_CHAR_PERMISSION ),

 

 

// Declare client characteristic configuration descriptor

// Value of the descriptor can be modified by the client

// Value modified shall be retained during connection and across connection

// for bonded devices. Setting value to 1 tells this application to send notification

// when value of the characteristic changes. Value 2 is to allow indications.

CHAR_DESCRIPTOR_UUID16_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_CFG_DESC, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,

LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ ),

// Declare characteristic Hello Configuration

// The configuration consists of 1 bytes which indicates how many times to

// blink the LED when user pushes the button.

CHARACTERISTIC_UUID128_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_BLINK, HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL,

UUID_HELLO_CHARACTERISTIC_LED_BLINK,

LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE,

LED_BLINK_CHAR_PERMISSION ),

 

CHARACTERISTIC_UUID128( HANDLE_HSENS_SERVICE_CHAR_TEMP, HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL,

UUID_HELLO_CHARACTERISTIC_TEMP, LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_INDICATE, TEMP_CHAR_PERMISSION ),

 

 

// Declare client characteristic configuration descriptor

// Value of the descriptor can be modified by the client

// Value modified shall be retained during connection and across connection

// for bonded devices. Setting value to 1 tells this application to send notification

// when value of the characteristic changes. Value 2 is to allow indications.

CHAR_DESCRIPTOR_UUID16_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,

LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ ),

(B)

목록 1: Cypress BLE 보안 허브 응용 프로그램의 hello_sensor 프로젝트에 포함된 헤더 파일은 해당 코드 모듈에서 Bluetooth 작동에 필요한 GATT DB를 구축하는 데 사용되는 여러 특성(A)에 대한 열거형 유형을 정의합니다. (코드 출처: Cypress Semiconductor)

또한 이러한 정의에 포함된 GATT 센서 서비스는 기본 서비스 특성이 연결된 콘솔을 사용하여 읽거나, 쓰거나, 알리거나, 나타낼 수 있는지 여부를 정의합니다. 예를 들어, LED 점멸 특성(목록 1a에 선언되고 목록 1b에 적용된 HANDLE_HSENS_SERVICE_CHAR_BLINK)에는 특성이 읽기와 쓰기가 모두 가능함을 나타내는 비트 마스크(목록 1b의 LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE)가 포함됩니다.

하지만 hello_sensor 프로젝트의 gatt_db.c 파일은 해당 특성에 대한 보안 액세스를 구현하는 코드와 이러한 정의를 결합합니다. 즉, 개발자가 콘솔에 입력한 특성에 표시된 횟수만큼 LED를 깜박이는 기능입니다. 이 샘플 응용 프로그램의 목적에 따라 이 기능에 액세스하려면 페어링 중에 콘솔을 사용하여 입력된 사용자 제공 암호를 통해 Bluetooth 중간자(MITM) 페어링으로 센서 키트에 연결해야 합니다.

일반적으로 일부 기능을 호출하도록 요청하면 해당 핸들러에서 정의된 특성과 보안 액세스 요구 사항을 고려하여 특수 용도 작업을 수행합니다. LED 점멸 예의 경우 LED 점멸 기능을 수행하도록 요청할 경우 권한을 확인하고 액세스 권한을 부여하는 실제 코드만 있으면 충분합니다.

LED 점멸 특성 값(HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL)을 변경하기 위해 코드에서는 쓰기 권한과 액세스 승인(목록 2)을 모두 확인하는 조건문을 사용합니다. 쓰기 권한의 경우 조건문은 요청된 권한(LEGATTDB_PERM_AUTH_WRITABLE)을 실제 LED 장치의 점멸 권한 설정(목록 1b의 상단에 정의된 LED_BLINK_CHAR_PERMISSION)과 비교합니다. 승인의 경우 조건문은 현재 페어링된 보안 수준(paired_security_level)이 MITM 페어링(BTM_SEC_LINK_PAIRED_WITH_MITM)(목록 2)을 통해 생성되었는지 확인합니다.

복사 

/*

* Process write request or write command from peer device

*/

wiced_bt_gatt_status_t hello_sensor_gatts_req_write_handler( uint16_t conn_id, wiced_bt_gatt_write_t * p_data )

{

wiced_bt_gatt_status_t result = WICED_BT_GATT_SUCCESS;

uint8_t *p_attr = p_data->p_val;

 

uint8_t sec_flag, key_size;

WICED_BT_TRACE("write_handler: conn_id:%d hdl:0x%x prep:%d offset:%d len:%d\r\n ", conn_id, p_data->handle, p_data->is_prep, p_data->offset, p_data->val_len );

 

switch ( p_data->handle )

{

 

.

.

.

 

case HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC:

if ( p_data->val_len != 2 )

{

return WICED_BT_GATT_INVALID_ATTR_LEN;

}

WICED_BT_TRACE( "Temp Notif Enabled\r\n");

 

hello_sensor_hostinfo.temp_characteristic_client_configuration = p_attr[0] | ( p_attr[1] << 8 );

break;

 

case HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL:

 

if ( p_data->val_len != 1 )

{

return WICED_BT_GATT_INVALID_ATTR_LEN;

}

 

 

if ((!(paired_security_level & BTM_SEC_LINK_PAIRED_WITH_MITM))&& (LED_BLINK_CHAR_PERMISSION & LEGATTDB_PERM_AUTH_WRITABLE))

{

WICED_BT_TRACE("Write Failed: Insufficient Authentication\r\n");

return WICED_BT_GATT_INSUF_AUTHENTICATION;

}

 

hello_sensor_hostinfo.number_of_blinks = p_attr[0];

if ( hello_sensor_hostinfo.number_of_blinks != 0 )

{

WICED_BT_TRACE( "hello_sensor_write_handler:num blinks: %d\r\n", hello_sensor_hostinfo.number_of_blinks );

wiced_bt_app_hal_led_blink(250, 250, hello_sensor_hostinfo.number_of_blinks );

}

break;

 

default:

result = WICED_BT_GATT_INVALID_HANDLE;

break;

}

 

return result;

}

목록 2: Cypress BLE 보안 허브 응용 프로그램의 이 코드 조각에서 LED 점멸 특성을 수행하도록 요청하려면 먼저 권한 및 보안 승인 확인(강조 표시)을 전달해야 합니다. (코드 출처: Cypress Semiconductor)

GATT DB 정의를 사용하고 센서 프로젝트와 허브 프로젝트에 적합한 코드를 지원하는 이 샘플 응용 프로그램에서는 개발자에게 페어링, MITM 페어링, Bluetooth LE 보안 페어링을 비롯한 세 가지 보안 수준과 관련된 기본 설계 패턴을 제공합니다. Bluetooth LE 보안 페어링 방법은 ECDH(Elliptic Curve Diffie-Hellman) 키 교환 기반 인증 방법을 사용하여 가장 높은 수준의 보안을 제공합니다. CYW20719의 통합 보안 엔진은 ECDH 가속기를 포함하므로 개발자가 성능에 영향을 주지 않으면서 이러한 방식을 구축할 수 있습니다.

결론

통합 Bluetooth 지원 무선 MCU를 사용하면 개발자가 이러한 장치를 설계에 빠르게 통합할 수 있습니다. 하지만 보안 Bluetooth 네트워크를 구현하려면 개발자가 Bluetooth 호환 서비스를 생성하고 이러한 장치를 안전하게 사용할 수 있는 응용 프로그램을 작성하는 등 다양한 문제를 해결해야 합니다.

Cypress CYW20719 Bluetooth MCU를 기반으로 하는 Cypress Semiconductor CYW920719Q40EVB-01 키트 Bluetooth 평가 키트와 WICED 개발 환경은 이러한 응용 프로그램을 작성할 수 있는 포괄적인 플랫폼을 제공합니다. 키트 및 WICED 환경을 Cypress BLE 보안 허브 패키지와 함께 사용하여 개발자는 보안 Bluetooth 응용 제품을 빠르게 평가한 후 Bluetooth 5의 향상된 속도와 범위를 활용할 수 있는 맞춤형 응용 제품으로 빠르게 확장할 수 있습니다.

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 Digi-Key Electronics의 의견, 생각 및 견해 또는 Digi-Key Electronics의 공식 정책과 관련이 없습니다.

작성자 정보

Stephen Evanczuk

Stephen Evanczuk는 전자 산업에 관해 하드웨어, 소프트웨어, 시스템, 응용 제품(예: IoT)을 비롯한 광범위한 주제에 대해 20년 이상 집필한 경력을 갖고 있습니다. 그는 신경 과학의 뉴런 네트워크 박사 학위를 받았으며항공 우주 산업 분야의 광범위하게 분포된 보안 시스템 및 알고리즘 가속 메서드 관련 업무를 수행했습니다. 현재, 기술 및 엔지니어링에 대해 기사를 쓰지 않을 때에는 인식 및 추천 시스템에 대한 심층적 학습 응용 프로그램을 연구하고 있습니다.

게시자 정보

Digi-Key 북미 편집자