Firmware Knowledge Base

Motivation

The firmware team requires a strong knowledge of background firmware topics. In this knowledge base, things like protocols, RTOS’s, etc is covered. This guide is intended to supplement the knowledge gained from the firmware bootcamp and aid in high level theory understanding.

So, wtf is firmware?

Good question and truth be told, there isn’t a straight answer. Some days, I’ll feel like an EE and not write a single line of code, whereas other days I’m trying to make unit tests pass and not have looked at my board the entire time.

Firmware is unique in the sense that you are creating a device that is interacting with the environment around it, often in real-time. Typical software development doesn’t cover the types of scenarios we deal with, where everything comes down to a bunch of numbers with one’s and zero’s on servers. Instead, firmware development places an emphasis on writing software that can interact with the environment around it while dealing with its resource constraints.

As a firmware engineer, you must be comfortable with electrical engineering. You don’t have to know everything - you likely won’t care about the inner workings of an under-voltage lockout beyond that if the voltage goes low, the device won’t work. However, an understanding of the components on your board gives you the ability to make your life easier by adding things on that could be fixed in firmware, but implemented in hardware and make your life better.

As far as the code goes, it is very theory and architecturally based. Coding is the easiest part of the entire process, with the majority of time taken in the architecture phase, determining requirements and ensuring that your solution will work.