What are skills needed to be a successful firmware engineer?

Firmware = embedded software for a microcontroller inside a chip.

I would put this as essential:

  • Processor architecture knowledge, instruction set (simulator) and assembler basic knowledge.
  • For low level, assembler or C/C++ code with compiler/linker/debug experience.
  • Interrupts (levels, number of interrupts, masking).
  • Memory types, ROM, (S)RAM, EEPROM, flash, DDR, … . Internal or external.

I would put this as more experienced firmware requirements:

  • Higher level coding: C/C++, HAL (hardware abstraction layer) or even an OS.
  • IC and PCB knowledge, slew rate, crystals (and clock pins), IO pin config (high impedant state), supply voltages (and caps), … .
  • Debugging with JTAG or other protocol. Using breakpoints, evaluating internals (memory, registers), … . Using GPIO’s for example to control LEDs for certain status or fail conditions.
  • Digital, analog scope experience. Protocol debuggers or monitors (UART, I2C, I2S, SPI, USB, ethernet, …). Triggering, data capture.
  • Boot modes, bootloaders, update or bug fixing (in the field) updating.
  • Scripting to fast process logfiles, convert data, post- and pre-processing.
  • SSH, telnet, network TCP/IP protocol for advanced network connected devices. Wifi, bluetooth could also be interesting since they are widely used in a lot of systems.

As you can see, there are very simple, small controllers with almost no capabilities to very complex multi-processor systems with many protocols and connections. And, depending on the sector, there are other things to consider. Compliance for safety, reliability, EMC, … .


Hardware and software advisor for tech startups. ASIC, FPGA, RPi, Arduino, AI, robots, drones, blockchain, Machine learning, vision processing, IoT and 3D printers are my fields of expertise.
Close Menu
%d bloggers like this: