Firmware is software that is embedded into hardware devices. It is the "brain" that tells the hardware exactly how to behave at a very low level. Unlike normal applications (like WhatsApp or Chrome), firmware runs directly on the device (often without an operating system) and is stored in non-volatile memory (it stays even when power is off).
Firmware = Permanent (or semi-permanent) software written into hardware.
| Type | Description | Examples |
|---|---|---|
| Low-level firmware | Runs directly on the microcontroller, no OS | Microcontroller code (Arduino, STM32, ESP32) |
| High-level firmware | Runs on top of an OS (usually Linux or RTOS) | Router firmware (OpenWrt), Android phone system |
| System firmware | Controls core system boot and hardware initialization | BIOS, UEFI, Coreboot |
| Type | Can user update? | Examples |
|---|---|---|
| Updatable | Yes (via USB, web interface, OTA) | Router firmware, phone firmware, BIOS updates |
| Non-updatable | No (burned once at factory) | Cheap IoT devices, some appliances |
| Field-upgradable | Yes, even in the field (over the air) | Tesla cars, smartphones, smart bulbs |
| Type | Storage Medium | Notes |
|---|---|---|
| Mask ROM | Hard-coded at factory (cannot change) | Very old devices |
| OTP (One-Time Programmable) | Can be written once | Some cheap MCUs |
| Flash-based | Most common today – rewritable | Almost all modern devices (routers, phones, SSDs) |
| EEPROM | Small, slow, expensive | Used for small config data |