I've been looking for an excuse to write a low-latency, Enhanced ShockBurst (ESB), radio protocol that I can reuse when building remote control toys. Although Bluetooth is great for a lot of use cases, working with the Nordic radio's proprietary mode offers additional flexibility -- in this case, this means achieving lower latencies and streaming packets in a UDP-like manner (versus BLE's reliable transport). I recently found an opportunity to scratch this item off my list when the girl agreed that it would be fun to surprise my nephew by turning one of his giant, polystyrene gliders into...
In my 2nd blog post in the series on Bluetooth 5, I go over one of the main features of Bluetooth 5: 2x speed.
The advertised 2x speed of Bluetooth 5 is great! BUT, what does that even mean? Is it 2x "1 Mbps" = 2 Mbps? Is that even achievable in terms of your application data throughput? How do you optimize for maximum throughput? How does it affect power consumption?
There are at least a few variables that determine your application throughout. In this blog post, I put them all in one list, explain each of them, and then detail...
Do you get sick of scouring the internet for Bluetooth 5 and BLE resources? Do you feel lost or get stuck during the development of your BLE project? Are you excited about Bluetooth 5 and its possibilities but don't know where to start? Do you experience pain when referring to the official spec and its daunting 2,800+ pages??!
You're not alone... I've been there and experienced every single one of those pains myself! Back in March 2016, I decided to start a blog about Bluetooth Low Energy. I wanted to provide a one-stop resource for others...
We were trying to run the PPI example from the nRF5 SDK on our emulator. We quickly revealed a bug in the configuration of one of the timers by having a look at the HW log:
Check out our Medium blog for the full story.
Note: I could not find any way to submit a bug report to Nordic but I'm sure it will be fixed soon
This post describes how you can get the ble_app_hrs_freertos example project running in Atollic TrueSTUDIO 8.0 on a pca10040 board. This is a managed make build, it does not rely on the makefile provided by Nordic. No Nordic source files are changed and it even uses the existing gcc linker files from Nordic.
1) Download and install Atollic 8.0
2) Download and unzip nRF_SDK_14.0.0_3bcc1f7.
3) Download the project zip file.
When we built our Bluey nRF52 BLE dev board, we were looking for an inexpensive option for our users to upload code to bluey and debug it using ARM GDB. We then came across the blackmagic probe (BMP) project - an Open Source debugging tool for embedded microprocessors. It greatly simplifies the debugging and code uploading process using just ARM GDB - no need to run a GDB server or use an additional complex tool like openocd. Although the BMP hardware is excellent, it's bit beyond the budget of our target audience as an add-on programmer. But luckily, their firmware supports...
One thing I wish I had when I started developing for BLE is more blog posts that walk you step-by-step on how to tackle the different phases of the system design and implementation. One such phase is designing your Bluetooth GATT: Services and Characteristics.
I just published a new blog post tackling this phase. I lay out the step-by-step process for designing a custom GATT for a BLE MIDI controller using the nRF52 platform including the complete source code. The post covers the following:
Good morning, my name is Marco Russi and I live in London, UK.
I am a contract/freelance embedded software engineer with 10 years of experience. I have been involved in projects mainly for smart sensors, actuators control and battery powered devices. I have already worked with a few companies in UK designing and developing firmware and software or following an entire embedded system development, including hardware, from requirements to first prototype and then to production.
My main experience is on Bluetooth Low Energy applications based on Nordic nrf51 devices but I also have a good knowledge of WiFi, Ethernet...
I realize that there are already multiple tutorials on how to configure GCC along with Eclipse or SEGGER Embedded Studio (for use on a Mac), but this tutorial goes over setting up a different IDE. The more choices the better, right? ;)
The IDE of choice for me is NetBeans. NetBeans is well known for Java development but not as much for C/C++ or embedded. However, I personally have been using it for embedded development for about 10 years now (both embedded Linux and MCU-level development). In this tutorial, I'll be going over how to set up and configure...
Short note how to make FreeRTOS program debugging with eclipse little simpler.
If you are looking the information how to configure the whole environment see this post: https://devzone.nordicsemi.com/tutorials/7/development-with-gcc-and-eclipse/
Most low power applications stays most of the timer in idle. Ideally it would be tickless-idle. The problem begins if our program behaves strangely and we would like to stop it and check what is going on.
Lets get blinky_freertos example. Run it and halt just in random moment. Until you are very lucky you would stop somewhere in...
The biggest pain point when debugging an application on the nRF51 series is the inability to set breakpoints while the SoftDevice is active without triggering an assert. Although a workaround exists that allows the debugging process to limp along for a short amount of time after the SoftDevice complains, using breakpoints with the nRF51 is inevitably a disruptive process.
Thankfully, the nRF52 series includes support for a neat feature called Monitor Mode Debugging. When this feature is enabled, the processor will trigger a specific interrupt handler (DebugMon_Handler) instead of halting when a breakpoint is reached. This DebugMon_Handler then spins and...
There is a use case that I've seen several times recently that I find interesting due to the fact that its security requirements aren't directly addressed by the Bluetooth Low Energy (BLE) standard. It goes something like this:
I have a BLE device that multiple users can interact with. Although most of the BLE characteristics should be open, one or more 'admin' characteristics should only be modifiable if the user has permissions to change them.
I will present a simple solution using the nRF52832 with the S132 SoftDevice.
The 128-bit AES ECB peripheral provides a secure...
As a product is getting into the production phase, the need of a fast and standalone screening facility on the production line arises. Here I'm introducing a production screening setup based on Bluetooth Direct Test Mode (DTM).
A production screening is a rapid screening process sorting out those units which are not functioning because of manufacturing issues, such as cold soldering, usage of incorrect materials, usage of bad materials, etc.
A production screening is NOT a functional test which correctness of the application functionality is verified. Functional tests must...
Welcome to this 2 or 3-part blog about the nRF52 Rocket, a BLE-enabled model rocket, which you’ve just seen soaring through the air in the video above. In the first part of blog, I will briefly introduce what model rocketry is and what are some of the motivations behind my work on a BLE-enabled model rocket during my fun and rewarding internship at Nordic Semiconductor.
Model rocketry is a popular and exhilarating hobby that has inspired many young (or the young-at-heart) makers, hackers, engineers and scientists through the fun, educational, and most importantly safe process of...
nRF-connect-Mesh PC tool allows the user to demonstrate the nRF OpenMesh and the Mesh Device Firmware Update (DFU).
The Mesh DFU will be used for nRF OpenMesh and the Bluetooth Mesh when it is made available.
The nRF OpenMesh used is v0.8.7. The tool will be updated to support the Bluetooth Mesh when it is available.
Any one of the below x 2 or more, all of the same type is best during the evaluation
Many developers might be familiar with the problems that may arise when wanting to measure current consumption, especially with applications using from a couple of µA to some mA. You most probably have to have some very expensive equipment that takes up quite a lot of space on your desktop. This often means that it is stowed away at a lab, or actually too expensive to buy. Since we have created the nRF52 Online Power Profiler, this can solve some issues, but what if the application has forgotten to turn off unnecessary power consumers, has wrong intervals between events or...
There is seemingly a gap to fill in the world of Internet of Things (IoT) when it comes to proving a suitable operation system. Real-time operating systems (RTOS) that are specialized for network connectivity has existed for a while, but they all provide quite different benefits and drawbacks, and as such there is no on OS that rules the MCU market. In all this new OSes continue to appear.
What these OSes have in common is that they target resource constrained devices, focusing on low memory usage and low power to allow long battery life. The OSes are designed for...
In a previous blog post, RK has shown us how to use Segger SystemView to monitor a bare-metal application as well as the Softdevice. Based on his work, we will see how to go further and add FreeRTOS to SystemView in order to monitor the RTOS tasks and events.
The following steps are based on the Heart Rate application with FreeRTOS example located in the SDK...
The nRF52 Quadcopter is a small miniquad that utilizes the nRF52 as both flight controller and for radio communication. The quadcopter uses the Physical Web and Web Bluetooth to make it as easy as possible for anyone to fly it. This is an open source project, and the source files are available here. See it in action here.
In most miniquads there is often used two or several dedicated chips which cooperates to make the whole quadcopter system work. Usually you have one main chip which controls the quad and keeps it stable in the air, and one chip which...
A few weeks ago I was experimenting with the nRF52's radio performance and found myself stuck in a routine that consisted of:
I was working against a deadline at the time so I just had to deal with it but the following weekend I decided to revisit the topic.
The basic solution seemed obvious: a simple, reusable mechanism for exchanging data between a PC and an embedded device. The process would go something like this: