본문 바로가기

BLE/펌웨어

[Noise Detector] nRF51 (1) : 레이어 구성

노르딕은 MCU에 BLE(Bluetooth Low Energy) 모듈 자체를 내장하는 것이 아니라, BLE 프로토콜 스택을 구성할 때, 소프트웨어로는 구현하기 힘들거나 부담되는 작업인 RNG, ECB(암호화 동작 수행) 등을 수행하는 페리페럴들과 2.4GHz 주파수를 송수신하는 RADIO 페리페럴을 사용하여 BLE 통신을 구현합니다. 이 페리페럴들을 이용하여 자신만의 2.4GHz 무선 통신 스택을 만들 수도 있지만, 아직은 너무나 먼 길입니다. 일단 BLE 시스템을 제대로 구현해 보기로 했습니다.

 

개발 보드로는 PCA10028을 사용했으며, 이 보드는 J-Link와 nRF51422가 내장되어 있습니다. Mouser에서 39달러에 구매할 수 있네요. 단 50달러 미만은 배송비가 발생합니다. 이 보드보다는 nRF52 개발 보드를 추천드립니다. nRF52은 블루투스5까지 지원되기 때문입니다. 참고로 노르딕에 블루투스5 개발에 대해 문의해 봤더니 소프트디바이스 API만 이용하는 개발자 입장에서는 블루투스5 개발이 현재 4.2버전 개발과 큰 차이점이 없다고 하더라구요. 하지만 아직 블루투스5를 지원하는 디바이스가 많지 않기 때문에 잠시 보류해 두었습니다.

 

블루투스의 기초에 대한 책은 "Bluetooth Low Energy : The Developer's Handbook"과 "Getting Started with Bluetooth Low Energy"를 추천드립니다. "Getting Started with Bluetooth Low Energy"는 번역본이 있지만 번역이 매우 형편없기 때문에 원서로 보는걸 추천드립니다. 그리고 노르딕 뿐만 아니라 BLE 칩을 생산하는 모든 회사들이 튜토리얼 페이지를 제공하고 있습니다.

 

다른 제조사와 비슷하게 노르디도 소프트디바이스라는 BLE 스택을 이미지 형태로 제공합니다. 소스는 비공개이고 API만 제공됩니다. 소프트디바이스는 0x0부터 0x1B000이전까지 위치하고 그 위에 BLE 서비스를 포함하는 어플리케이션이 올라갑니다. 그리고 사용자 어플리케이션은 SVC 인터럽트를 통해 소프트디바이스에게 BLE 관련 기능을 요청합니다. BLE 스택에서 소프트디바이스가 담당하는 부분는 이 링크 약간 아래에 나타나 있습니다. 즉, BLE 스택에서 핵심적인 모든 부분은 소프트디바이스에서 담당하고 있기 때문에 개발자는 커스텀 프로파일/서비스, 어플리케이션만 개발하면 됩니다. 튜토리얼만 따라하면 금방 구현할 수 있지만, 소프트디바이스에서 사용되는 구조체/맴버변수, 함수, 이벤트를 BLE 스팩의 용어와 연계시키면서 공부했기 때문에 시간이 좀 오래 걸렸습니다. BLE처럼 여러개의 프로토콜로 이루어진 무선 프로토콜은 처음이고, BLE 외에도 다른 무선 통신을 다룰 때 유용할 것 같아 약간 더 정성을 들여 공부했습니다.

 

아래 스택은 제가 생각하는 소프트웨어 전체 구조입니다. 위 링크와 약간 다른데, SDK에서 제공하는 기능은 소프트디바이스뿐만 아니라 BLE 서비스, 어플리케이션 전반에서 사용되기 때문입니다.

소프트디바이스 위에 ① Noise Detector 서비스와 제 커스텀 보드에 맞는 커스텀 BLE BSP 모듈을 새로 만들었고, 이것들을 이용해 ② 어플리케이션을 구현했습니다. 

결론적으로 보라색이 제가 구현한 부분입니다. Battery Service는 SDK에서 기본적으로 제공되는 서비스이며 거의 그대로 사용했습니다. 

위 링크에는 GATT 프로파일 위에 바로 어플리케이션 스택이 있지만 어플리케이션 스택이 커스텀 서비스까지 포함하고 있다고 보면 됩니다.

 

커스텀 BLE BSP 모듈

PCA10028 보드의 2버튼을 1버튼으로 줄이고 기능을 줄였습니다. 소스코드만 공개하고 아래 기능 설명 이외의 추가 설명은 생략하겠습니다.

  • 최초 부팅시에 지정된 시간동안(ms) 누르고 있어야 부팅된다. 현재 0ms로 설정.

  • 길게 누르면 슬립모드로 진입

  • 슬립 모드에서 짧게 누르면 웨이크업후 Advertising 시작

  • 연결 후 짧게 누르면 연결 끊음