Modern embedded solutions, ranging from IoT trackers to advanced industrial embedded systems, increasingly rely on software. Introducing features that enable users to update software after a device has been manufactured has become a standard practice, delivering significant business and technological benefits. For manufacturers of new embedded devices, implementing effective update mechanisms can be a decisive factor in gaining a competitive edge.
The ability to remotely fix software issues significantly reduces the risk of delivering a device with a software bug to the customer. This eliminates the need for service campaigns or sending a technician to the customer, dramatically reducing technical support costs and enhancing user satisfaction.
For instance, many modern devices are shipped with a mobile app that performs a software update during the device's first use after unboxing, a process known as provisioning. As a result, the user receives a fully functional device with all known issues already resolved, even if the device was manufactured months before its first use.
Remote updates enable the introduction of new features to devices that have already been manufactured and sold, which can attract new customers or increase the satisfaction of existing users. It also presents an excellent opportunity to offer paid updates, creating an additional revenue stream.
Moreover, an easy, fast, and user-friendly update process encourages users to adopt the latest version. New features and improvements to existing functionalities further motivate users to update their devices themselves. As a result, a larger portion of devices operate on the latest, most refined version, reducing the costs of supporting and maintaining older versions.
Thanks to the ability to perform automatic remote updates or user-initiated updates, it is possible to initiate device production without completing the final version of the software. The software only needs to be developed enough to allow for an update to the desired version before the device's first use by the customer.
The production and distribution process for devices often takes several months, and in a traditional approach, these two steps must occur sequentially. Leveraging the capability to update devices after production allows the entire process to be parallelized. The time saved can be used to reduce the product's time-to-market or to develop additional functionalities.
The traditional approach to uploading software to a microcontroller's memory involves using a dedicated programmer. This method is primarily used during production and development stages. An additional advantage of this approach is the ability to repair a device with damaged memory, commonly referred to as "bricked."
However, due to the need for specialized equipment, this method is not practical when the operator is the end-user. For this reason, more accessible alternatives are typically used in practice.
One of the simplest solutions is a wired update, which typically allows the process to be performed via a serial port or USB port. This enables users to carry out the operation using their own equipment. Occasionally, solutions using USB storage devices, such as flash drives, are also employed.
The advantage of this approach is its low additional implementation cost, especially in cases where the device lacks other communication interfaces that could be used for updates. The only tool a user needs to perform the update is a computer with a USB port.
If a device supports wireless connectivity, this communication channel can be used to perform software updates. This is often the most convenient method for users.
For devices equipped with Bluetooth, adding software update functionality to the accompanying mobile app is an excellent solution. This approach significantly enhances the user experience (UX). A manufacturer-controlled app can automate the process of downloading the latest software version from servers and notify users about available updates in a convenient manner. Features such as progress bars, estimated time to completion, and marketing content can further enrich the mobile app.
Devices that connect directly to the internet, for example via WiFi, LTE, LoRa, or other technologies, enable fully automated updates without user intervention. This is an ideal solution for applications operating in hard-to-reach or remote locations, such as wind farms or weather stations.
Some advanced wireless communication protocols support innovative update procedures for connected devices. One such solution is Bluetooth Mesh, where devices share new software versions among themselves without the need for a central hub. This allows the update to reach every node in the network, even those outside direct range.
The process begins with a notification about the available update, which devices verify for compatibility and necessity. The firmware is then distributed in small chunks that traverse the network with the help of intermediary devices. Once all chunks reach the recipient, the software is reassembled, validated for integrity, and installed. The greatest advantage of this approach is its scalability. By leveraging network-wide propagation, it becomes possible to update thousands of devices simultaneously without overloading a single point.
DFU (Device Firmware Update) - The process of updating a device's firmware, typically performed with the help of a bootloader. It allows installing new software without reprogramming the device from scratch.
OTA (Over-the-Air) - Updating a device's software wirelessly, without requiring a physical connection, using technologies such as WiFi, Bluetooth, or cellular networks.
OTAU (Over-the-Air Update) - An extension of the OTA concept, emphasizing the full process of software updates, from transmitting the new version to its installation on the device.
FOTA (Firmware Over-the-Air) - A specific type of OTA focused exclusively on firmware, the core software that controls hardware operation.
The principle of software updates is similar across all microcontrollers that support running only bare-metal applications or an RTOS. Examples of such device families include Nordic nRF, STM32, ESP32, and others. Due to the lack of an operating system, the responsibility for executing the update process directly in the device's memory lies entirely with the programmer.
A bootloader is essential for performing firmware updates. It is a special program that runs during the device's startup and then initializes the main application. The bootloader is a separate application stored in the device's memory.
Typically, the bootloader cannot be updated, as it becomes immutable once written to the device by the manufacturer. This immutability allows it to securely store cryptographic keys. The bootloader can be used to verify the digital signature of an application using public-key cryptography.
A digital signature is used to verify the origin of the application on the device. To enable updates with a digital signature, the manufacturer generates a private key, which is used to derive a corresponding public key. During production, the public key is embedded in the bootloader, while updates are signed with the private key. When the device receives an update, the bootloader can verify its authenticity by checking the signature against the public key stored on the device. This security measure is critical to mitigate the risk of application tampering during the update process.
Additionally, the bootloader can provide other safeguards, such as preventing the installation of an older version of the software than the one currently installed on the device.
An unexpected interruption during the update process or accidentally uploading an incorrect application image can render the device inoperable, preventing it from receiving another image. To ensure the reliability of the process and enable firmware updates while the application is running, the device's memory is divided into slots that store both the current and the new application images. If, after downloading, the application image is found to have an invalid signature, is corrupted, or fails to run, the device can still revert to the previous image.
Using a dual-slot mechanism reduces the amount of memory available for the application on the device by half. If the available memory proves insufficient, it is possible to use compression for one of the images or dynamically partition the device's memory. In cases where the microcontroller's entire memory must be allocated for the application, the new image can be stored in external FLASH memory.
Various configurations of the process allow updates to be performed even in complex scenarios. It is possible to receive updates for other microcontrollers through a selected channel via the main microcontroller. The images can also be used to update components such as modems or audio codecs and may include other types of data, such as application translation information.
If a device cannot download updates directly from the internet but is equipped with Bluetooth, it is possible to perform wireless firmware updates using the manufacturer's mobile application. The app can include various additional user-supporting features, such as automatic update downloads and notifications. It is also possible to make the update process conditional on user payment or account verification.
Updates can be performed from both Android and Apple devices. Although both platforms require separate implementations, it is typically unnecessary to create entirely separate apps for iOS and Android. A hybrid application can be developed, allowing most of the code to be shared between platforms. Examples of hybrid application technologies include Flutter and React Native.
The part of the application that runs on the device manufacturer's server is the backend. New firmware versions must be made available online. It is also possible to collect statistics on the update process for all manufactured devices. If user authorization is required for the update, the backend is responsible for storing user account data and managing payments or billing.
The infrastructure hosting the server application can either be maintained as a physical server at the manufacturer's premises or on a virtual server with any cloud service provider. This flexibility allows for cost-effective maintenance of a small server or rapid scaling to a full cluster to handle very high traffic when necessary.
Performing remote software updates requires special attention from the development team. Deciding to release an update to users involves ensuring that the update will not degrade the functionality of the target device. It is also necessary to perform numerous repetitive tasks, such as publishing the new application image.
To prevent errors and reduce the costs associated with updates, a Continuous Integration and Continuous Delivery (CI/CD) system is configured. A collection of scripts automating various tasks, automated tests, and proper workflow organization ensures that the application works correctly after every update and facilitates frequent releases of new software versions.
We specialize in building mobile and embedded solutions that cover the entire range of advanced projects. Through a comprehensive approach and the integration of the entire technology stack, we’ve expanded the traditional "full-stack" approach to include embedded solutions. This eliminates time wasted on communication between teams, ensuring every system component is developed with consideration for all others.
With us, you can consult on the entire project — from selecting a microcontroller to deploying the backend on cloud providers like AWS. Implementation is handled by a cohesive team of specialists focused on optimizing the process.
At Blues Brackets we solve real business challenges with the latest and proven technology.
React Development Services
Custom Embedded Software Development Services
Mobile App Development Services
Professional Arduino Development
Expert RTOS Development Services
MVP Development Services | Custom MVP Development Company
Agile Software Development Services
Flutter App Development Services
Proof of Concept & Proof of Principle Services
Cross-Platform Mobile Development
Software House Poland | Custom Web & Embedded Solutions
IT Staff Augmentation Services in Poland
PWA Development Services | iOS & Android
Animated Website Services. Design and Implementation
UX/UI Design Services. Project and Implementation
Expert Hardware Design Company | Custom Electronic Hardware
Remote IT Support & App Maintenance – bluesBrackets
EAA Accessibility & Compliance Software Development
Software Maintenance & Legacy Services | bluesBrackets
Hire Dedicated Development Teams in Poland – bluesBrackets
Business Intelligence Solutions | bluesBrackets
Data Engineering & Data Visualization Services
IoT Development Services | Custom IoT Devices & Solutions
AI Chatbot Development Services
Next.js & WordPress Services
Custom Web App Development Services
DevOps Consulting Company | bluesBrackets
DevOps as a Service | AWS Cloud Consulting
SaaS Software Development Company: GDPR-Compliant Cloud
NB-IoT Solutions & Agile Development
Microservices vs Monolithic: Expert Software Architecture
IoT & Smart City Software Development | bluesBrackets
IoT Product Development & Custom Software Solutions
SLA-Driven Software & Managed Services Poland
Industrial IoT & Industry 4.0 Software Solutions
Outsource Python Development | Offshore Company
Energy Storage & IoT Software Solutions
IoT Device Management Platform & Custom IoT Solutions
Backend Services & JavaScript Development | bluesBrackets
Travel Software Development Company | Custom Travel Apps
IoT & Wearable Tech Development | bluesBrackets
Expert Software Migration Services | bluesBrackets
Data Center Migration & IT Migration Services
Expert Software Prototyping Services | Mobile, Embedded & Fullstack Prototyping
Mobile App Development Languages & Services
Expert IoT & Embedded Software Development | bluesBrackets
Quality Assurance Testing Services | bluesBrackets
End-to-End IT System Testing & Integration Services
Polish Software House: Agile Delivery & UI/UX
Medical Device Software Development Services
Healthcare IT Outsourcing & AI Software for Medical Innovators
Machine Learning for Predictive Analytics
Machine Learning Supply Chain Solutions
IT Nearshoring & Software Development Poland
Fixed Price vs. Time & Materials
Legacy Application Modernization Services
Legacy IT Systems Modernization & Custom Software Development
CTO as a Service - Future-Ready Software House: CTO, DevOps & UX/UI
Application Scaling for Startups | Scalable Solutions
Embedded Software Engineering Services | bluesBrackets
ReactJS Web Development Company
Build Scalable Desktop & Embedded Apps – bluesBrackets
Node.js, React & Next.js Development Poland – bluesBrackets
Flutter App Development Services | bluesBrackets
Poland’s Leading Java Software House | Hire Expert Java Developers
Machine Learning Consulting & Software Development Company Poland | UI/UX, Fullstack, Mobile, Embedded
Custom Software Development Services — bluesBrackets
Embedded & IoT Software Services | bluesBrackets
Software Development Companies | Custom Solutions
Expert Hardware Development Services | bluesBrackets
Custom AI Chatbot Solutions & Services
iOS PWA Development Services | Cross-Platform Mobile Apps
Expert iOS App Development Company in Poland
Expert Embedded Android & Bluetooth App Development
Software Engineering Outsourcing Poland
Specialized Software Engineering Services | bluesBrackets
Custom Web App Development Services | bluesBrackets
Progressive Web App Development Company | bluesBrackets Poland
Web Apps vs Desktop Apps: Expert Software
Web App vs Mobile App Development | Fullstack & UX/UI
Agile Software Development Company Poland
Software Development Outsourcing Company in Poland
Polish Software Development Outsourcing Company
Trusted Offshore Software Development Company in Poland
Industrial IoT Software Development Company
Polish Software House | Custom IoT & Embedded Solutions
IoT Software for Retail, Wearables, Property | bluesBrackets
Software Product Development Services | bluesBrackets
IoT Product Development Company | Embedded & Fullstack Software House
Enterprise Mobile App Development Company | bluesBrackets
IoT MQTT Dashboard & Custom Embedded Solutions
Bespoke MVP & Custom Software Development Company
Bespoke Software Development Company
Node.js Development Company | Trusted Node.js Services
Embedded Systems & Bare Metal Programming Experts | bluesBrackets
Custom Web App & AI Development Services
Custom CMS Solutions & Software Development
Custom Software Development Services in Poland
White Label Mobile & Embedded App Experts
Bespoke Software Solutions for Startups & Enterprises
Cloud Adoption & Digital Transformation Services
Cloud Application Development Services | Polish Cloud Development
Cloud Migration Consulting Services Company | bluesBrackets
Hire a Dedicated Development Team in Poland
Dedicated Software Development Teams in Europe
Integration & System Testing Experts
Software Integration & ChatGPT Integration Services
System to System Integration Services
Embedded Software Development Outsourcing
Embedded Software Staff Augmentation