

for the Greater New England Area
Embedded Systems Consulting Services
"No project too small, no microcontroller technology too old or too new"
Call
T: 978 838-2339
ESCS Definition of Embedded Firmware Engineering
​​​
Before having a discussion about Embedded Firmware, we need to define the differences between firmware and software development in the embedded software world. Since this can be very subjective, what firmware means to an Embedded Software Engineer with a degree in Computer Science, could be very different than what it means to an FPGA Designer with a degree in Hardware Engineering.
​
​

Most certainly, if one is writing code in VHDL or Verilog, they are most likely a Hardware Engineer and they are developing firmware for their FPGA design. If however, one is developing code for microcontrollers using the ‘C’ programming language, they are most likely an Embedded Software Engineer and can be still developing firmware if they are writing drivers for controlling and interfacing peripheral devices to a microcontroller. Furthermore, if one is developing C/C++ code that runs in user space under the control of a High-level Operating Systems such as Linux, they are most likely an Embedded Software Engineer that is developing systems-level applications code, which is commonly referred to as: embedded software.
So the method for differentiating embedded firmware development from embedded software development occurs with respect to the microcontroller architecture, and is based on the proximity of the code itself to the actual hardware. It is said that code closest to the hardware, such as device drivers, is typically considered to be embedded firmware, whereas code that is abstracted from the hardware, such as middleware or application-level code, is typically considered to be embedded software. Since embedded engineers that develop API-level code for drivers are said to be abstracting the details of the driver-level code, they too can be considered to be Embedded Firmware Engineers. The user’s of the API-level driver code are said to be: Embedded Software Engineers.
​
I consider myself to be an Embedded Hardware/Firmware Engineer capable of developing code using C/C++ to develop both low-level code that is close to the hardware, as well as higher-level code that is abstracted from the hardware. Here are some examples of the Firmware that I have developed in the past:
​
-
Embedded Systems Architectural Design & Implementation.
-
Firmware used for diagnostics, board bring up and boot-loaders.
-
Microcontroller Board Support Packages (BSPs) and pin muxing.
-
Microcontroller driver development: SPI, I2C, ADC, DAC, DMA, PWM, GPIO, etc.
-
Firmware development primarily using 'C' for: Bare Metal, RTOS and Embedded Linux.
-
Application framework development and integration (APIs).
ESCS does not offer FPGA-level Embedded Systems Engineering services at this time. However, ESCS does offer driver development resources for interfacing microcontrollers to FPGAs through standard interfaces such as parallel buses or SPI interfaces.