Firmware Blog

These are the skills that are absolutely needed for a firmware engineer.

Micro-controller architecture understanding

If you are just starting off with firmware development then this probably is the very first thing that you would want to have a good hold on. Understanding the basic building blocks of a micro-controller is crucial for a good firmware engineer. Although there are way too many chip architectures around, you should make yourself comfortable with at least one. Thats because as you gain experience and when you work with various architectures you will notice that there are things that are common across architectures. For example, each micro-controller will have a nonvolatile memory and a RAM memory, there will be interrupt handling mechanisms, I/O ports etc. Having a good understanding of at least one architecture helps you understand the basics better.

C programming

This is one skill that is timeless. The fact that the Linux kernel is written in C show how robust C is. When it comes to execution speed, nothing beats C till date. As a firmware engineer you should know C programming like the back of your hand. You should develop your C skill for not just writing C code but reading others C code as well. On an actual project there are multiple people working on the code base. You would be tempted to write your own code rather than understanding someone else's code, although it may not be the right thing to do.

Build tools

Now this is something that you can do away while you are a beginner because most of the modern controller vendors provide an out of the box software setup that just works without much tinkering. But later down the line you will need to develop a good understanding of the build process. You need to understand what are the steps in building the final binary. You may come across Make files, linker scripts, stratup files... you should at least know what is their purpose and what they do. More advance understanding will come as you mature in your career, there is no alternative for hardwork.

Working with a debugger and debugging techniques

Firmware is a software and softwares are bound to have bugs. A debugger can be life savior for a firmware engineer.It is absolutely necessary that you understand the use of a debugger and other debugging techniques for developing firmware applications. Trust me, debugging broken code will teach you more than anything else, just try to get to the root of the issue.

Reading data sheets

Firmware is written for small devices that have limited memory and computing resources. Often you would need something to be interfaced with the micro-controller. This can be an input device like a sensor, an output device like a motor driver or LED. If you are to implement a driver to these peripherals you will have to understand their data sheets and application notes. Its very important that you know what to look for in a data sheet.

Think like a micro controller

You need to literally think like a micro controller to be able to write firmware code. As you gain experience you will become more comfortable with hexadecimal number system. You will think of time in milli seconds, micro seconds and even nano seconds. For example the most basic baud rate is 9600, that is 9600 bits per second which is 0.104 milli seconds or 104 micro seconds. This means you have 0.833 milliseconds to process 8-bits of information. This is how you need to think while working on firmware.

Some other good to have skills

Knowledge of any version control system(like Git) is always good this helps in maintaining your code.
Understanding of Linux tools and overall Linux system will help you in the firmware domain. This is because some of the more advance projects may require an operating system to be installed and chances are that this will be a UNIX based operating system. Linux understanding will come in handy here.
At some point of time you will use hardware tools like multimeter, CRO, Logic analyzers etc. Try to understand the purpose of these tools and when you will need one.

Conclusion

All it takes is patience, time and hardwork to master any domain and same is true with firmware engineering.