Best Practices for IIoT Firmware

Connected sensors are becoming increasingly ubiquitous across all sectors, and industrial and scientific products are no different. This category is becoming known as the industrial internet of things, or IIoT. When designing an IIoT device, engineers must consider a range of criteria that may not apply to other product categories. Industrial products are expected to be reliable, rugged, and able to serve their purpose for an extended period of time. And the environment these products operate in is particularly intense, with many environmental stresses and unique challenges for human-machine interaction. The goal of this post is to give an engineer new in the IIoT space a checklist that can spur consideration for product requirements from a new perspective.

1. Model the system first

As a team sits down to begin the design of a connected device, it can pay dividends to simply make a system model first. The goal shouldn’t be to make a perfect architecture but rather to spur the designers to consider the important aspects of the device’s data transfer model, logging schema, and operational states. This may already be the first step for many new projects, but focusing on the following topics might aid in creating a solid IIoT product.

Typically the design process begins with modeling the operational (or non-operational) states of a device. Knowing where the device should go when any given event happens helps to make a device that will not easily go into an unknown state, something that is unappetizing for IIoT applications. This state model does not have to be complex, a diagram of circles (states) and arrows (events and errors) will suffice as long as it covers all of the anticipated states of the firmware and the hardware. Devices may commonly have ubiquitous states, like power-up, initialization, and operational, as well as error and firmware update states. Next, engineers should consider what data will be sent by the device and other parameters such as data size and transmission frequency. Knowing these factors can help engineers write better requirements, and it could even allow for certain communication protocols to be eliminated due to constraints they may violate. With a state diagram and a solid idea of the communication for an IIoT device, engineers will end up already with a pretty good idea of what their product will look like upon completion.

A simple example of a state diagram

2. Design for security from the start

The topic of security almost always bubbles up to the top in conversations regarding good practices for IoT devices. Security may have been the topic of IoT news coverage lately, considering some of the high-profile exploits which have been uncovered in recent years. It also gets the spotlight due to the exposed nature of most devices in the category. Engineers need to understand that effective security is something that must be talked about and designed for at all stages of development, not something that gets bolted onto a product at the end. Engineers should also accept that no security is scheme is perfect, so a device that has security in mind at every layer is better than an otherwise insecure device hiding behind one big show of defense. This section will certainly not be exhaustive, but might hopefully hit on some of the big items that can be designed into a product. One good source of security information and practices for embedded devices is the IoT Security Foundation.

Bigger security items for the design team to consider using early on cover a large portion of the device lifecycle after it leaves the engineering teams hands. Provisioning and authentication are two ways to make sure that IoT devices are really who they say they are when they’re talking to other nodes or gateways. If the team decides to use these methods, there should be a secure way to manage device security keys so that the same key doesn’t end up getting used for every device out of convenience. With these keys, an authentication scheme can be created which will tie into the device state diagram that’s already been created. To mitigate the risk of exposed devices operating in the field, encryption should definitely be considered for the main communication channels of the device but also for any important information that will be transferred internally between the processor and peripherals. Many secure options exist which take up a small memory footprint and can be dropped into code easily. With an IIoT device up and running, it is also valuable to be able to monitor and detect threats to the device as they appear. Third-party fleet management tools exist to do just that, and can allow customers to identify and deal with compromised devices safely, while simpler tactics like software trip wires can be used to send notifications to the user that something’s up or lock down the device. With these measures in place, designers will be on the road to a modern and secure product.

3. Firmware Updates

Firmware updates are an inevitable part of designing and building IIoT devices, even before a prototype device is built there will likely be at least a few revisions of firmware produced for it. This process can be hard enough when there is only a handful of devices floating around the lab during design, but it gets even harder once there are devices deployed out in the field. These updates are essential for connected devices as they can improve reliability, increase product lifetime, as well as maintaining product security as new threats are produced seemingly weekly. It comes as no surprise then that engineers should have a plan when it comes to updating their devices in the field. This update path should take into account the installation conditions for the end customer and the accessibility limitations that may be a result. A good update path will be a win for engineers due to ease of development and a win for customers due to a more seamless product experience. There are a number of methods for updating devices, so engineers must pick the one that best suits their device. For wireless updates, there are even backend services that can handle updates for you and may ease the development burden. Given the number of avenues one can take, you’re sure to find an update method that works.

Update Failure Detection and Recovery

Another aspect of firmware updates to consider in-depth is what will happen to an IIoT device in the case of a failed firmware update. There are many moving parts to normal firmware updates and they don’t always run smoothly. Device uptime is important for all connected devices and this is especially true when those devices are part of a control or monitoring system for a company. Having a failed firmware update result in your fleet of devices bricked at a customer site is not acceptable, and engineers should develop ways to minimize results like that. A few ways to do that are to have devices accept updates and boot from separate regions of memory, or to validate incoming code before running the update using checksums or CRC checks to abort if portions of the update are corrupted.

Summary

IIoT and connected devices in general run the gamut in terms of functions and performance, and that variance can make designing their firmware seem complex. While there may not be one set of absolute design rules for engineers to reference they may benefit from these basic best practices. Systems may be able to prioritize only parts of what was discussed here, but engineers who model their device execution and at least think about the topics above will be more likely to improve the design process and end product. A device designed with these guidelines in mind will run reliably, be more secure, and be easier to continue developing and improving as it gets used in the field.

For those who are unfamiliar with some of these ideas, Dojo Five is excited to help engineers looking to design new devices. These best practices come from the experiences that we’ve had designing for customers, both good and bad. If this post gives an engineer some solid first steps on their own device then that’s great. If Dojo Five can help you with your next device, even better, check out our site and see how our embedded experts can help bring your IIoT device from design to production. Don’t hesitate to reach out and chat with us on LinkedIn or through email!

Discover why Dojo Five EmbedOps is the embedded enterprise choice for build tool and test management.

Sign up to receive a free account to the EmbedOps platform and start building with confidence..

  • Connect a repo
  • Use Dev Containers with your Continuous Integration (CI) provider
  • Analyze memory usage
  • Integrate and visualize static analysis results
  • Perform Hardware-in-the-Loop (HIL) tests
  • Install the Command Line Interface for a developer-friendly experience

Subscribe to our Monthly Newsletter

Subscribe to our monthly newsletter for development insights delivered straight to your inbox.

Interested in learning more?

Best-in-class embedded firmware content, resources and best practices

Laptop with some code on screen

I want to write my first embedded program. Where do I start?

The boom in the Internet of Things (IoT) commercial devices and hobbyist platforms like the Raspberry Pi and Arduino have created a lot of options, offering inexpensive platforms with easy to use development tools for creating embedded projects. You have a lot of options to choose from. An embedded development platform is typically a microcontroller chip mounted on a circuit board designed to show off its features. There are typically two types out there: there are inexpensive versions, sometimes called

Read More »
Medical device monitoring vitals

IEC-62304 Medical Device Software – Software Life Cycle Processes Primer – Part 1

IEC-62304 Software Lifecycle requires a lot of self-reflection to scrutinize and document your development processes. There is an endless pursuit of perfection when it comes to heavily regulated industries. How can you guarantee something will have zero defects? That’s a pretty hefty task. The regulatory approach for the medical device industry is process control. The concept essentially states that if you document how every step must be completed, and provide checks to show every step has been completed properly, you

Read More »
Operating room filled with medical devices

IEC-62304 Medical Device Software – Software Life Cycle Processes Primer – Part II

Part I provides some background to IEC-62304. Part II provides a slightly more in-depth look at some of the specifics. The IEC 62304 Medical Device Software – Software Lifecycle Processes looks into your development processes for creating and maintaining your software. The standard is available for purchase here. So what activities does the standard look at? Here are some of the major topics. For any given topic, there will be a lot more specifics. This will look at a few

Read More »