Photo By: Lauren Mancke

What is Firmware Engineering?

Table of Contents

Firmware Engineers & Awkward Introductions:
Firmware Engineer the Unsung Hero:
Firmware Engineering a Visual Example:
The Highs & Lows of Programming:
Closing Remarks


Firmware Engineers & Awkward Introductions:

Have you ever encountered a situation where you had to explain something to someone but can’t quite get your point across clearly? Every time I am asked the question “What do you do for a living?” this is exactly how I feel! I usually give a pretty generic response such as “I’m a computer engineer” or “I write software” (Pretty lame, yes, I know…). Now, if I were to give a more non-generic answer like, “I write firmware” or ” I am a firmware engineer” I usually get a thousand yard stare and a pool of spittle collecting in the corner of one’s mouth (Hence, the generic reply)! So, what exactly is this witchcraft called “Firmware Engineering”? The purpose of this article is to explain exactly that!

Return to Table of Contents


Firmware Engineer the Unsung Hero:

In today’s world, you can find a computer in just about everything! Toasters, TV’s, Cars, Airplanes, Smart Phones the list just goes on and on. Heck, this may sound a little bit like a Sci-Fi movie, but some of these devices are in our bodies keeping us alive! Checkout out this article for a security vulnerability in pacemakers that need a firmware update! If the art of Firmware Engineering didn’t exist, all of this technology would be about as useful as a box of rocks! In the realm of Computer Design and Architecture the firmware engineer holds a very special place. The firmware engineer gives life to these devices, so other parts of the system have a solid foundation to build upon.

Return to Table of Contents


Firmware Engineering a Visual Example:

CPU Layered Architecture

Let’s take a look at a visual aid to help drive this conversation. In the picture above, I have created a typical computer architecture in its most basic form. As you can see, the firmware layer spans the hardware, Board Support Package (BSP) & the Operating System (OS). In my experience, this is where I spend most of my time when working with firmware. A firmware engineer has to have a very good understanding of how hardware, software & operating systems all work together. I like to refer to the firmware as “glue code”. What I mean by this is that it ties the hardware & software together it is at this boundary where the hardware ends and the software begins! Now the fun starts, what are the responsibilities of each of these layers?

Return to Table of Contents


Hardware Layer
This layer is pretty self explanatory, the hardware is all of the physical tangibles. This includes but is not limited to the circuit board, resistors, capacitors, chips, CPUs, LEDs, sensors, keyboard, mouse, monitor, etc… Anything that you can physically see and touch is part of the hardware layer.

Return to Table of Contents


Board Support Package Layer
The BSP layer is the meat & potatoes of the firmware. It is here where most of the firmware magic takes place. Each CPU vendor has a very specific layout of registers and subsystems that need to be configured in order for the device to operate correctly. The chip producer has a very detailed specification explaining all of the settings of the CPU & subsystems. It is not uncommon for some of these specifications to be in the thousands of pages!! It is the job of the firmware engineer to decipher these specifications and configure the device for their appropriate application. This is where some of the first pieces of software development take place for an embedded device!

Return to Table of Contents


Operating System Layer
I like to think of the OS as a conductor of an orchestra. The main responsibility of an OS is to manage resources & to execute applications & services. Some examples of resource management include but are not limited to task prioritization, memory management, disk drive management, peripheral management etc. If something needs to be serviced or scheduled you can guarantee the operating system will be involved.

Return to Table of Contents


Application Layer
This is the layer where programs like Notepad++, Web Browsers or your favorite video games are executed from. The application layer is basically a blank canvas to create whatever your imagination can cook up!

Return to Table of Contents


The Highs & Lows of Programming:

You will also notice off to the right there is a double headed arrow stating High level & Low Level. What does this mean you might ask? In order to maintain good computer architecture and design it is prudent to organize components in a layered fashion. This provides a couple of advantages:

  1. Helps Limit the number of dependencies between components because they are organized.
  2. Details of lower layers are abstracted away to create meaningful application interfaces (APIs).
  3. Easier to control program flow & add enhancements in the future.

Think of the hardware layer as the ground floor, you can’t go any lower than ground level. This is sometimes referred to as “bare metal”. As you start traveling up the stack, you need to know less & less of the underlying layers. It is this concept that allows for new languages to form such as C#, Java, Python & JavaScript just to name a few. These higher level languages are used to write applications because they allow the engineer to focus more on the application content and not have to worry about the underlying details. It is important to note that it is totally okay to use a language like C/C++ in any layer of this architecture, however, the coding to do particular tasks in one language might be easier to implement than another. Firmware is low level, it exclusively uses C/C++ & sometimes even assembly to provide the foundation for others to design their applications to run on.

Return to Table of Contents


Closing Remarks

In conclusion, the firmware engineer provides a very important role in today’s world! Without the existence of firmware engineers the world would be shaped much differently! A firmware engineer is in the low level domain & needs to have extensive knowledge in both hardware & software. I hope you enjoyed reading this article as much as I have enjoyed writing it! I would love to hear your questions or comments so please post in the comments section below! Until next time!

-Brandon Sloat