Simple BLE sensor application
using Nordic semi
Shenzen Aug 2013John So
Nordic BLE
Solutions
2Simple BLE Sensor Application
Nordic semi Bluetooth low energy devices
3Simple BLE Sensor Application
External
MCU
nRF8001 , Bluetooth Connectivity
solution.
Uses an external MCU for user
application. Visual editor for Bluetooth low energy
configuration. Drivers available for multiple MCUs.
nRF8002 , Bluetooth Proximity solution.
Single chip solution.
No software coding required.
Visual editor to do configuration.
nRF51822 and nRF51922 , Bluetooth low energy
and multi protocol solution
Single chip solution.
ARM Cortex-M0nRF51822nRF51922
nRF8002
nRF8001
nRF8001
Feature Highlight
4Simple BLE Sensor Application
nRF8001
Operates in the peripheral role
Integrated Host stack
Integrated Link Layer
Qualified radio
Simple BLE Sensor Application
GATT Server GATT Client
ACI
External
MCU
nRF8001
6Simple BLE Sensor Application
External
MCU
nRF8001
ACI Command
ACI Event
Simple ACI command and Event interface
nRFgo Studio as the visual editor for creating
Bluetooth Services and Characteristics
ACI drivers available for multiple MCU platforms
Requires 5 lines for connection
ACI is an SPI slave with additional handshake lines
Use the SPI master on your MCU or implement the SPI
in software
MISO, MOSI, SCK, REQN (similar to a Chip
select), RDYN (nRF8001 is ready)
nRF8001
7Simple BLE Sensor Application
External
MCU
nRF8001
ACI Command
ACI Event
Optional ACTIVE line to show when the nRF8001
radio is in use and the duration of use
Optional DC-DC to reduce power consumption
Optional 32 KHz Crystal (Can use the built-in 32 KHz
internal oscillator)
Option to supply 16MHz clock from external source
and avoid using the 16MHz Crystal
nRF8001
8Simple BLE Sensor Application
nRF8001 includes a GATT Server and GATT client
ACI interfaces to the GATT Server and GATT
Portable C Source code available for ACI library for porting
to your MCU. Implementations available on multiple MCU platforms
Demo to Send/Receive Data from an Arduino board to the iPhone using the Bluetooth low energy Shield for Arduino
UART over BLE (proprietary Service)
ACI Commands and Event used in UART over BLE
ACI Setup
ACI Connect
ACI Pipe Status Event
ACI Send Data
ACI Data Received Event
GATT
Proprietary Service over
Generic Attribute Profile
Advertise
9BLE Simple Sensor application
Connect
nRF UART app for iOSnRF UART app for Samsung Galaxy S4
Send and Receive data
ArduinoBluetooth low energy shield (nRF8001)
nRF2740 and nRF2741 modules can
be used with the Arduino.
The modules are included with the
Nordic semi nRF8001 Development kit
Use the ble_uart_project _template in
Bluetooth low energy SDK
for Arduino
http://devzone.nordicsemi.com/arduino
nRF8002
features highlight
10Simple BLE Sensor Application
nRF8002
11Simple BLE Sensor Application
nRF8002
Single chip solution for proximity solutions
Link Loss, Immediate Alert, Battery, TX power Services
Find Me and Alert Notification Profiles
3 Digital Outputs, 1 PWM output
2 Digital Inputs (Buttons, LEDs, Buzzers and Vibration)
No software coding required
Configure with a Visual Editor (nRFgo Studio)
Production settings generated from nRFgo Studio
iOS app sample code available (nRF Proximity)
nRF8002 Development Kit
12Simple BLE Sensor Application
nRF8002
Fully functional Bluetooth low energy proximity tag
Buzzer
LEDs
Buttons
nRF51822
features highlight
13Simple BLE Sensor Application
nR
F5
18
22
Memory 256kB Flash, 16kB RAM128kB Flash, 16kB RAM
Analog and
digital I/O
2x SPI Master, 2x 2-wire Master, UART, 10-bit ADC,
Quadrature Demodulator
System Peripherals 16-channel PPI, 128-bit AES ECB/CCM/AAR co-processor, RNG, Temp sensor, Watchdog
Oscillators 16/32 MHz XO, 32kHz XO16 MHz RC, 32kHz 250ppm RC
Timers / Counters 2 16-bit Timers, 1 24-bit Timer , 2 24-bit RTC
Power Supply (Supply range)
LDO (1.8 to 3.6V), LDO bypass (1.75 to 1.95V)
Buck DC/DC (2.1 to 3.6V)
Software stacks S110 -Bluetooth low energy SoftdeviceGazell 2.4GHz RF (SDK)
Package options (GPIO count)
6x6mm 48-pin QFN (31)
3.5x3.8mm 62-ball WLCSP (32)
nRF51822 ICMulti-protocol Bluetooth low energy / 2.4GHz RF SoC
Processor16 MHz 32-bit
ARM Cortex-M0 CPU
256kB/
128kB
Flash
AH
B Lite
bu
s
16kB
RAM
GPIO RadioMulti-protocol 2.4GHz
AP
B b
us
Oscillators
Power
Supply
Timers / Counters
Analog I/O
Digital I/O
System Peripherals
S110 Softdevice
S110 Bluetooth low energy Software Stack
nR
F5
18
22
Complete Bluetooth low energy software stack Production-ready, qualified stack Controller, Host, Services and Profiles
Peripheral and Broadcaster role
S110 Softdevice Controller
Host stack up to GATT and GAP
L2CAP, GATT and GAP APIs Thread-safe, asynchronous and event driven API
Memory isolation between application and protocol stack for robustness and security
Pre-compiled hex
nRF51 SDK Services, profiles and example code
Source code
Support for non-concurrent multi-protocol with 2.4GHz RF protocols
nRF518xx SoC
SVC APIs
Link Layer
L2CAP
ATT
GATT
SMP
GAP
nRF518 SDK
Services and Profiles
S110 Software Stack
nRF518 SDK and Tool Chain
Common SDK for nRF518xx ICs
Software stacks
S110 Bluetooth low energy
Gazell 2 Proprietary 2.4GHz RF
Software Libraries
Common for all nRF51 ICs
ARM CMSIS (-CORE, -SVD, -DSP)
Enhanced ShockBurst API
Keil MDK-ARM tool chain
IDE, Compiler, Programming, debug
and simulation
Free -Lite edition up to 32kB code
nR
F5
18
22
nRF518 SDK
Bluetooth low
energy
Services and Profiles
nRF518xx SoC
S110 Softdevice
Gazell 2
Protocols
Softdevice API
S110 Software Stack Gazell 2 Software
Stack
Driv
ers
Software Libraries
(Common nRF51 ICs)
ARM CMSIS
Example application code
ES
B A
PI
17
nRF51 Solution: IO signals can use any pin (Pin Crossbar)
Low cost 2 layer PCBs are possible
Simple layout of external components
nRF51 Solution: SoftDevice power management API
1 API call will make your application low power
nRF51 Solution: Programmable Peripheral Interconnect (PPI)
True real-time system
nRF51 Solution: Direct transfer between peripherals and RAM (EasyDMA)
No CPU or code required to copy packet data
18
Problem: Application and stack code are dependent
Re-linking the application changes the protocol stack
Longer development time and more testing required
Application
Segment
Stack Segment
Memory Map
Re-link
Application
Linkable Libraries
19
nRF51 Solution: SoftDevice Architecture
Application program is isolated from the protocol stack
Application developer does not need to re-link the protocol stack
Application
Segment
Stack Segment
Memory Map
Re-link
Application
SoftDevice
20
nRF51 Solution: Automated power management
2 modes: ON and OFF
Peripherals only use power when they need power
OFFON
nRF51822Development and
Evaluation Kit
21Simple BLE Sensor Application
nRF51822 Development Kit
nR
F5
18
22
Interfaces to existing nRFgo platform
nRFgo available separately and required
Fully featured for full system development
Range of I/O options via nRFgo motherboard
RF-stable development platform
Enables detailed measurement & test
Current measurements
RF measurements using SMA connector
USB dongle for easy PC interface and debug
Module: PCB antenna
Module: SMA connector
USB dongle
nRF51822 Evaluation Kit
Flexible evaluation and development
platform
Stand-alone battery-powered system
Portable system development
Integrated debugger
USB dongle for easy PC interface and
debug
nR
F5
18
22
Eval-board
nRF51822
Application Example
24Simple BLE Sensor Application
nRF51822
Application Example
25Simple BLE Sensor Application
Application Example : Simple BLE sensor
26Simple BLE Sensor Application
GAPGATT
ATT SMP
L2CAP
Link Layer (LL)
Physical Layer (PHY)
Ba
ttery
He
art R
ate
Connect
Co
ntro
ller
Ho
stP
rofile
s +
Ap
plica
tion
Application
Ap
plica
tion
Driv
ers
Button Wakeup
LED
Pro
files
Battery Level Sample
Advertise
Inc. BPM Dec. BPM
SoftDevice API
So
ftDe
vice
ma
na
ge
r
So
Clib
rary
S1
10
BLE
So
ftDe
vice
nRF51822
App Drivers
27Simple BLE Sensor Application
28Simple BLE Sensor Application
GAPGATT
ATT SMP
L2CAP
Link Layer (LL)
Physical Layer (PHY)
Ba
ttery
He
art R
ate
Application
Ap
plica
tion
Driv
ers
SoftDevice API
So
ftDe
vice
ma
na
ge
r
So
Clib
rary
Application drivers
Application drivers block diagram
29Simple BLE Sensor Application
GPIO PINCPU
PPI Controller
Timer
GPIOTE PIN
Event
Pin State
Part 1: Output LED
What do we want?
Drive output without CPU (LED flash)
Using a Timer, PPI and GPIOTE
30Simple BLE Sensor Application
CPU
PPI Controller
Timer
GPIOTE PIN
CLEAR
COMPARE
GPIO
Part 1: Timer configuration
31Simple BLE Sensor Application
Timer [1]CLEAR
COMPARE [0]
Part 2: Input Button wakeup
Button wakeup from System OFF
Using GPIO sense / DETECT
Configure the LED on wakeup
32Simple BLE Sensor Application
CPU GPIO PINDETECT
Part 2: GPIO configuration
33Simple BLE Sensor Application
PIN0
OUT.0
IN.0
PIN0
IN
Sense
OUT_OVERRIDE
DIR_OVERRIDE
DETECT
OUT
O
I
O: output buffer I: input buffer
PIN_CNF[0].INPUT
PIN_CNF[0].PULL
PIN_CNF[0].DRIVE
PIN0_CNF.SENSE
PIN_CNF[0].DIR
INPUT_OVERRIDE
GPIO PIN ??
nRF51822
SoftDevice
34Simple BLE Sensor Application
nRF51 SoftDevice Architecture
Application
nRF51 Softdevice
Pre-compiled binary implementing
wireless protocols
Service (system) Call (SVC) based APIs
100% event-driven
No RTOS dependencies
Run-time protection
No link time dependencies w/ user
application
35Simple BLE Sensor Application
GAPGATT
ATT SMP
L2CAP
Link Layer (LL)
Physical Layer (PHY)
Ba
ttery
He
art R
ate
Application
Ap
plica
tion
Driv
ers
SoftDevice API
So
ftDe
vice
ma
na
ge
r
So
Clib
rary
SoftDevice Architecture Benefits
36Simple BLE Sensor Application
Flexibility No proprietary application development model or RTOS The Application and Stack can be updated (programmed)
separately
Ease of Development Simple Application programmer model with no link time dependencies
Stack is not re-linked constantly during application
development
Can use the free ARM MDK-Lite when application code is
less than 32Kbytes
Code safety QA and qualification on binary going into end-user product
Thread-safe API
Stack is run-time protected
Reduced risk of Applications bugs affecting the Stack
Application Programming Model
37Simple BLE Sensor Application
RAM
Softdevice
Region 0
Application
Region 1
RAM_R1_BASE
0x2000 0000
0x2000 0000 +
SizeOfRAM*MSP initial value -
Call Stack
Interrupt forwarding, SoftDevice to Application
38Simple BLE Sensor Application
Softdevice
Application
Application Vector Table
System / Softdevice Vector Table
&SVC_Handler
CLENR0
CLENR0 +
0x0000 00C0
{
#include softdevice.h
...
int tmp = __SVC(X) ble_function_0(a,b,c,d)
...
}
SVC_Handler
switch (SVC_number)
case X:
Ret = ble_function_0 (arg0, arg1, arg2, arg3)
int ble_function (arg0, arg1, arg2, arg3)
{ return(ret0); }
API call using SVC from Application to SoftDevice
39Simple BLE Sensor Application
CPU-generated interrupt to
the SoftDevice SVC_Handler
Softdevice@Run-time
Cortex M0 has 4 interrupt priorities
SoftDevice uses 2 priorities to
implement its event-driven behavior
Lower Stack (BLE Link Layer),
Upper Stack (SVC API, BLE Host)
Application have access to 2
priorities
Application High for critical
interrupts where low latency is
required. Cannot call the SVC API.
Application Low. Used for Host
events.
40Simple BLE Sensor Application
41Simple BLE Sensor Application
Softdevice@Run-time
API Calls
Made from MAIN & App(L)
Protocol Event
Signaling from LowerStack done with
chained interrupts
Softdevice HW block protection
42Simple BLE Sensor Application
ARM
Cortex M0
Debugger
GPIO
WDT
GPIOTE
SPI
NVMC
A
H
B
-
L
i
t
e
Radio
Timer [0]
RTC
ECB
Radio
RTC [1]
ECB
Timer [1]
RTC [0]
Timer [2]
Timer [0]
Application has Open
access
SoftDevice Restricts
or Blocks access
SoftDevice: DISABLEDSoftDevice: ENABLED
Working with the SoftDevice
Applications running with the SoftDevice must be programmed into Region 1 flash
The SoftDevice will reserve RAM and sandbox some peripheral interfaces
All Restricted peripherals must now be accessed via the nrf_ SVC API
A Hard Fault will occur if the application accesses the registers via CMSIS directly
43Simple BLE Sensor Application
44Simple BLE Sensor Application
GAPGATT
ATT SMP
L2CAP
Link Layer (LL)
Physical Layer (PHY)
Ba
ttery
He
art R
ate
Application
Ap
plica
tion
Driv
ers
SoftDevice API
So
ftDe
vice
ma
na
ge
r
So
Clib
rary
Bluetooth low energy API
Generic Access Profile (GAP)
Generic Attribute Profile Server (GATTS)
API calls as SuperVisor Calls
Switches Core to SV priority
Each SV Call numbered
Events as SoftWare Interrupts
Always through SWI2
Interrupt priority: Level 0
ble_evt_get()
For all BLE events
From ISR or main context
45Simple BLE Sensor Application
Application
GAP API GATTS API
SVC SVCSWI2
ble_evt_get()
Bluetooth low energy API
BLE API: GAP
46Simple BLE Sensor Application
GAP
ConnectionSVC
EVT
GAP ServiceSVC
Device Name
Appearance
PPCP
AdvertiserSVC
EVTAdv Data
SecuritySVC
EVT
Keys
BLE API: Connection Sequence
47Simple BLE Sensor Application
App BLE Stack Central
BLE_GAP_EVT_CONNECTED
BLE_GAP_EVT_DISCONNECTED
ble_gap_adv_start()
Adv DataAdv Data
scan()
ble_gap_adv_data_set() Adv Data
connect()
disconnect()ble_gap_disconnect()
BLE API: GATTS
48Simple BLE Sensor Application
GATTSATT Table Population
and Local Access
SVC
EVT GATT hierarchy enforcement
SVC
EVT
ATT Protocol
Server Initiated (HVx)
ATT Table Access
Control
ATT Table
Service
Char.
Char.
Service
Char.
Char.
BLE API: Service population
49Simple BLE Sensor Application
App BLE Stack
Handle UUID Value
ble_gatts_characteristic_add(HSL, FINGER)
0x0004 CHAR HSL
0x0005 HSL FINGER
ble_gatts_characteristic_add(HRM, 80bpm)
0x0002 CHAR HRM
0x0003 HRM 80bpm
ble_gatts_service_add(HRS)
0x0001 SERVICE HRS
BLE API: Service Discovery - Enabling Notifications
50Simple BLE Sensor Application
App BLE Stack Central
ATT Table
HVN ATT Packet 87
HRM Char.
80bpm83bpm87bpm
ATT Write Request (enable Notifications)
ATT Write Response
ble_gatts_hvx(0x0003, 87bpm )
Notifications
Service
Discovery
BLE_GATT_EVT_WRITE (WRITE_REQ,
data=enable Notifications)
Application block diagram
51Simple BLE Sensor Application
GPIOPIN
CPUApp Timer
Event
PIN
READ
ADCCPU operation
SEND NOTIFICATION
GAPGATT
ATT SMP
L2CAP
Link Layer (LL)
Physical Layer (PHY)
SoftDevice API
So
ftDe
vice
ma
na
ge
r
So
Clib
rary
Application block diagram
52Simple BLE Sensor Application
MAIN
Program
BLE Stack
process
BLE Event
process
Button
SampleHRS Notify
Battery
Notify
Application
Interrupt
BLE Stack Interrupt
BLE Event Interrupt
(SWI)
DEMO
Shenzen Aug 2013John So
Simple BLE sensor application
using Nordic semi
Shenzen Aug 2013John So