As more devices become powerful IoT products for a variety of applications, more software developers will need to interact with hardware and may begin leading double lives as embedded software developers. Everyone understands the difference between hardware and software, but the difference between software and firmware is a bit blurry.
This is especially true as the same languages can be used to develop software applications and low-level firmware that lives in on-board non-volatile memory. New designers can better understand what is embedded firmware development by learning more about the particular differences between software and firmware, as well as how firmware can be easily brought into a new hardware platform for embedded applications. Thanks to the wide range of linux-capable embedded platforms, it’s never been easier to start designing a new product as an embedded system.
To understand the answer to this question, it helps to have an understanding of the distinction between firmware and software. Both are expressed in terms of data being read and manipulated by a central processor, but the primary distinction is often found in how easily firmware and software can be changed.
Software is "soft" as it lives in RAM in a system. In other words, the program and data it requires is lost when power is cut from the system. The instructions that make up a program and the data used by the program are loaded from permanent memory when you need them. Essentially, this means software can be easily changed as needed. Simply change the data stored in memory, and you’ve just changed the instructions used in your program.
Firmware is said to be "firm" in that it is difficult to change once it is programmed and loaded onto a hardware platform. Similar to software, the instructions that make up firmware are stored on a physical device, but the instructions are intended to be unchangeable once written. Any computing system will use firmware to define the low-level functions of a system, which may include loading an operating system and software into memory. The relationship between the two is shown below.
This simple diagram shows the relationship between hardware, software and firmware.
Here, the firmware and software are both stored on hardware. The firmware is integrated at the hardware level, and can be a combination of mechanical and digital. This is probably where the confusion between software and firmware arises. All firmware is software, but not all software is firmware. The firmware being stored on the hardware (or rather, being a part of the hardware) is typically stored in the flash ROM (read only memory). It can be erased and rewritten easily when stored in on-chip memory compared to the older method of storing programs on an EEPROM.
Software gets loaded from the external storage into RAM, where it can then receive new instructions from the processor, or it can receive data from the off-chip memory. The processors job is to collect external inputs (e.g., from any other external hardware like cameras or sensors, which is then used by the software to perform particular functions. Such instructions may involve controlling some external device (i.e., a small motor or LED).
In this sense, the distinction between firmware and software is not one of where the information lives or where it is processed. Instead, understanding what is embedded firmware development is more about understanding functionality. Your embedded software is the portion of the system that can be easily changed and updated, and it is where new functions for the system are defined. However, these functions can only be implemented within the constraints imposed by the hardware and the firmware.
Hopefully, the distinction between software and firmware doesn’t become less clear once we bring up programming languages. Unfortunately, simply looking at languages doesn’t help clear up the confusion as these languages can crossover into the general purpose software domain. Here’s a short list of some popular languages for software and embedded firmware development.
Most popular languages have an embedded version, either for firmware or software development (or both). Take a look at this article for a list of the top 15 embedded programming languages.
The board used for an embedded system is also extremely important to consider when designing an embedded system. The firmware lives on components, but the system will not work at all if the board is not designed correctly. If you want to design a custom baseboard for a unique embedded application, your best choice is to partner with an embedded firmware development firm that also specializes in PCB design. For mobile and wearable devices, the design firm you use should also specialize in low-power PCB design to ensure long life and reliability.
If you’re interested in learning more about embedded firmware development, take a look at these excellent resources:
If you’re looking for an embedded firmware design firm to help you build and deploy products for computer vision/embedded systems applications, look no further than NWES. We know how to help you quickly build powerful embedded products and custom PCBs for your new system. We’re also a digital marketing firm, and we can help you market your new product and engage with your target market. Contact NWES today for a consultation.