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, … .

Kyle

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: