What is Firmware?
According to TechTerms, “firmware is a software program or set of instructions programmed on a hardware device”. Firmware remains on the hardware device unchanged unless it is updated by a firmware provider. It is typically kept in Read Only Memory, or ROM, and loaded when the device is turned on. Firmware runs on devices such as the BIOS, keyboards, game controllers, and many other embedded devices. In the case of a BIOS, firmware may also provide services to higher level software, giving an interface between the software running on a computer and other hardware.
How does Firmware relate to Embedded Systems?
Firmware is the software that runs on embedded systems. Firmware, like hardware, is a component of embedded systems.
The embedded subreddit happens to be mostly about firmware. Check it out to help understand how important firmware is for embedded systems! r/embedded
What challenges does Firmware face today?
Firmware for various devices, such as the BIOS, face security vulnerabilities. Many BIOS share code with the same security issues, allowing attackers to place malware in many different systems. Firmware hackers can manipulate the BIOS to spy on a user’s activities, steal data, and remotely control a user’s computer. In 2011, it was shown that the firmware on HP LaserJet printers could be manipulated to heat up hardware components and even catch fire. Another demonstration showed that documents printed on a compromised printer could be sent to another machine. Print jobs accepted over the internet could carry firmware updates that cause the printer to become compromised. Malicious firmware can be embedded in other ways as well, such as by USB. Never plug in a unknown USB into your computer.
Another challenge that firmware faces today is safety. Many embedded devices used today are in critical environments that can save a persons life. For example, a pacemaker is an embedded device that must have reliability. Therefore, some firmware must have strict requirements and go through rigorous testing in order to make sure that any device does not harm the user.
Firmware also faces many of the challenges that embedded hardware faces today. One such challenge is power. Firmware today needs to be designed with efficiency in mind in order to minimize the amount of energy consumed per operation. Hardware advancements such as bigger batteries has made this less of a concern. However, firmware in battery operated devices should always look to conserve power when possible.
What skills do you need to be a Firmware developer?
Firmware developers are mostly from an electrical engineering or computer science background, so they need a mix of software and hardware skills.
For general software experience, they should know C or C++, as they are the most common languages used in embedded systems. To compile their code, they should also understand build environments, such as makefile. They should also understand operating systems, especially Linux, and they may want to know algorithms.
In terms of topics more specific to embedded systems, they should also know at least one assembly language so they can work at a lower level and make the system more efficient. Along with assembly, they need an understanding of memory (SRAM, DRAM, NAND and NOR flash), the register files in microcontrollers and interrupts. Since they are working so closely with hardware, they should have a basic understanding of microcontroller hardware, such as ADCs, DACs, timers, and PWM, and communication protocol hardware (I2C, SPI, UART, CAN). Understanding the hardware in a microcontroller and their associated registers will make them much easier to program. Finally, they should know how to use basic electronics tools, such as a multimeter and oscilloscopes so they can debug their code.
What are some useful resources to learn more about Firmware?
Texas Instruments Development Tools
Tips & Tools For Embedded Firmware Development
Firmware Architecture In Five Easy Steps
Firmware Interview Questions
Developing Microcontroller firmware from scratch
What is Firmware?
Coursera Course for Firmware Development
Languages Used For Embedded Firmware Development
Programming FreeRTOS on STM32