Bluetooth Developer Academy

Online training and a private community for Bluetooth developers

Latest Blog Posts and Tutorials

Four things you should know about the upcoming Bluetooth World 2017 event

By Mohammad Afaneh | January 30, 2017 |

I just wanted to share four things I recently learned about the upcoming Bluetooth World 2017 event (March 28-29, 2017 in Santa Clara, California). This will be my first time attending the event, but from what I remember, last year the fee to attend was a bit on the high side (close to $1,000). This year, however, things are changing… After registering for the event, I received an email from the new group organizing the event this year asking if they could arrange a phone to let me know about what’s new about the event this year. After talking with them,…

Understanding SN and NESN in a BLE Link Layer packet

By Mohammad Afaneh | November 11, 2016 |

In my previous video looking at connection data captured via a BLE sniffer, I missed explaining two bits in the data that can be confusing to understand. The bits are the SN and NESN in the LL data packet. A few notes to better understand these bits: NESN and SN are used for data flow and making sure data is not missed (ACKs and NACKs). NESN and SN are looked at independently When the device sends a packet, the NESN is the next expected SN from the other side in the next packet coming back. When the device receives a…

How do I choose a UUID for my custom services and characteristics?

By Mohammad Afaneh | October 19, 2016 |

First, a few things to know: “A UUID is a universally unique identifier that is guaranteed to be unique across all space and all time” (Bluetooth 4.2 spec, Vol 3, Part B, section 2.5.1 UUID) A UUID is a 128-bit value. There are reserved UUIDs by the Bluetooth SIG that are generally represented by their 16-bit aliases. These aliases are used for convenience and represent a 128-bit value computed as follows: 128-bit value = 16-bit-value * 2^96 + BluetoothBaseUUID where the BluetoothBaseUUID is 00000000-0000-1000-8000-00805F9B34FB Examples include: 0x180F -> Battery Service UUID (128-bit UUID: 0000180F-0000-1000-8000-00805F9B34FB) 0x2A00 -> Device Name Characteristic UUID (128-bit UUID: 00002A00-0000-1000-8000-00805F9B34FB)…

What is the maximum size of data that can be encapsulated in a characteristic?

By Mohammad Afaneh | October 19, 2016 |

The answer: 512 bytes. But to understand where that came from, let’s first look at what a characteristic really is. Attributes are the generic term describing the smallest element in the Generic Attribute Profile (GATT). So each of Services, Characteristics, and Descriptors is actually an attribute, and according to the Bluetooth 4.2 spec (Volume 3, Part F, section 3.2.9): “The maximum length of an attribute value shall be 512 octets” which leads us to the answer: 512 bytes.

The best Bluetooth low energy sniffer tutorial (Connections)

By Mohammad Afaneh | September 19, 2016 |

A BLE sniffer can be very handy. 3 primary use cases come to mind: Debug problems with BLE connections Reverse engineer a BLE device Last but not least, as a way to learn about how BLE works and understand how data gets transferred between Central and Peripheral In the previous blog post and video on BLE sniffers we went over how to use the TI CC2540 BLE sniffer to detect advertisement data. In this video we’ll go over how to use the same BLE sniffer to capture and follow connections between a Central device and Peripheral device. To illustrate the use…

Bluetooth Developer Academy

A private membership community for Bluetooth developers

Premium Bluetooth Low Energy Resources

The best introductory book for learning Bluetooth Low Energy

Intro to Bluetooth Low Energy e-book

The only practical Bluetooth 5 & BLE developer guide for the nRF52

Bluetooth 5 & Bluetooth Low Energy: A Developer's Guide cover

Featured in the Media

Copyright © 2020 Novel Bits, LLC | All Rights Reserved