In this article, we will try to understand the terms Firmware and Software, how these two fit into the World of computers and embedded systems and also have a comparison of Firmware vs Software by understanding the differences between software and firmware.
If you are in the electronics industry, then the terms Firmware and Software are quite popular. Whether you are working with computers or embedded systems, you might have used these terms and sometime interchangeably.
But what is the difference between a firmware and a software? What are their definitions when used in the context of a computer and a microcontroller based embedded system? Let us try to understand these terms in more detail.
What is Software?
Any computer system consists of essentially two parts: Hardware and Software. Hardware is the physical stuff such as a processor, memory, storage, keys, touchscreen etc. For the hardware to function properly, you need a software. Software is nothing but a set of instruction to the hardware to process the information.
Assume you have a brand-new PC with the latest processor, RAM, graphics card, etc. You can use this PC only if there is a proper software, which we call it as Operating System. This is the basic software needed to start the computer. You can add additional software (such as browsers, photo editors, video players etc.) as and when you require.
From the above statement, we can divide computer software into two categories. They are:
- System Software
- Application Software
It is a set of essential programs that are required to coordinate the hardware components of a computer. An operating system is a system software and it acts as an interface between the computer’s hardware and the user.
Another example for a system software is the compile. A compiler is a program that translates instructions written in high level language to machine language so that it can be understood by the hardware. Every high-level language requires its own compiler software.
It is a set instruction that is designed to do a specific task. Usually, application software doesn’t directly control the hardware and this is where the system software comes into picture. The application sends instructions to the system software (such as OS or Compiler) and the system software then instructs the hardware.
There are several application software such as office suite (MS Office or Libre Office), Media Players (VLC), Photo Editing (Adobe Photo Shop), Video Editing (Adobe Premier Pro), Anti-Virus (Avast, Norton), Finance Management Software (Tally), Web Browsers (Chrome, Firefox) and many more.
What is Firmware?
Firmware is also a piece of software. But the context of firmware is different. It is usually a small program that directly controls the hardware. Hence, firmware is sometime known as Low-Level Software.
You find firmware in a variety of devices such as TV Remote Controls, computer hard drives, Motherboard BIOS, Keyboard, robots, routers and many more. While the firmware in TV Remote reads the input from the keys pressed and activates the Infrared LED accordingly, the firmware in a computer hard drive acts a little bit differently.
When we instruct our computer to save a file on the hard drive, the OS receives this instruction and communicates with the hard drive through the drivers. When the hard drive receives these instructions, the firmware in the hard drive activates its hardware control mechanism (controlling the read / write head, activating the platter motor, etc.) and then stores the data on the hard drive.
So, it is clear that a firmware of the device is the software that directly controls the hardware and it acts as filler between the OS and the device. We can say that firmware is a part of the hardware as it resides inside the hardware, usually a flash memory. But the tools for developing firmware (programming languages, compilers, etc.) are very similar to that used in developing a software. The only difference is that firmware is tightly coupled to the hardware.
Firmware is usually a permanent piece of software that sits on the hardware’s ROM and is not intended to be modified. The best example for this is the BIOS in our personal computers.
BIOS or Basic Input / Output System is usually the first piece of software that runs when we power on a computer. The job of BIOS is to check for hardware errors and also initialize the rest of the booting process.
If the BIOS is corrupted or erased entirely from its location (it is usually a non-volatile memory), then you simply cannot turn on the computer. The same can be said to other firmware as well. If the firmware of a device (hard drive, keyboard, etc.) is lost for any reason, the hardware loses its functionality and may even have to be replaced.
Firmware Vs Software
The following tables illustrate a simple comparison of Firmware vs Software.
|It is a small piece of software that directly controls the hardware.
|It is a program (a set of instructions) that can be stand-alone (such as on OS) or application specific (that runs on an OS). It cannot control the hardware directly.
|Firmware is low-level software that sits between the hardware and the OS.
|Software (application software) sits on top of OS and has no direct interaction with hardware.
|It is usually intended not to be modified.
|It can be modified / customized depending on the user’s preference.
|Firmware is usually couple to the hardware and is hardware specific.
|Application Software is generally OS Specific.
|It is very small in size and is usually programmed only one time.
|Depending on the type of application, the size of software varies and you can install, uninstall as many times as you want.
|Firmware is stored in the hardware’s flash storage.
|Software is stored on the computer’s secondary storage device.
|Typical example of firmware is BIOS.
|Examples of software are MS Office, Photo Shop, VLC Media Player.
Firmware vs Software in the Context of Embedded Systems
In embedded systems industry, the terms firmware and software are often used interchangeably. You can even see job listings saying “Embedded Firmware Engineer” or “Embedded Software Engineer” with same / similar job description. This is because the application side of the embedded system is developed along with the system side.
When working with barebone design (without any OS), all you will be having is some microcontroller vender specific files (CPU supports headers and drivers) and few third-party drivers (for display, TCP/IP, etc.). These files handle the hardware side of software.
Using the headers and drives, we write the application software and finally, all the files are compiled into a single binary file.
If you are using an OS (such as VxWorks or FreeRTOS), then the RTOS takes care of the context switching and memory management but even then, you have to write the application software with help from Microcontroller specific drivers, RTOS files, and third-party drivers.
As a result, the terms firmware and software are often used interchangeably in the context of embedded systems.
A simple introduction to the concepts of firmware and software. You learned what is a software, what is a firmware, a comparison of firmware vs software, the definitions of firmware and software in the context of embedded systems.
If you are a firmware engineer or a software engineer, comment below with your definitions of firmware and software so that students and young engineers can learn something new.