Firmware is a term commonly used to represent the small fixed programs and data structures that internally control various electronic devices. The Institute of Electrical and Electronics Engineers Standard Glossary of Software Engineering Terminology defines firmware as “The combination of a hardware device and computer instructions and data that reside as read-only software on that device.” Typical examples of devices containing firmware range from products such as remote controls or calculators, through computer parts and devices such as hard disks, keyboards, or memory cards, all the way to scientific instrumentation and industrial robotics. Also more complex consumer devices, such as mobile phones, digital cameras, and synthesizers contain firmware to enable the device’s basic operation as well as improving functions.
There is no distinct characteristic that separates firmware and software. Both terms are basic descriptions; however, the term firmware was originally created in order to contrast to higher level software that could be altered without replacing a hardware component. Furthermore, firmware is typically involved with basic low-level operations on devices that can function independently. Firmware is also a relative term, as most embedded devices have firmware at more than one level. Subsystems such as CPUs and communication controllers have their own program code. Low-level firmware usually resides in a PLA structure or a ROM. On the other hand, higher level firmware generally uses flash memory for updates in modern devices. Common reasons for updating firmware include fixing problems or adding features to the device. Thus, while high-level firmware is regularly stored as a configuration of charges, low-level firmware may instead be looked at as actual hardware in itself. For example, older firmware was often applied as a discrete semiconductor diode matrix. The current equivalent is an integrated matrix of field effect transistors where 0′s and 1′s are represented by whether a particular component in the ROM or PLA matrices is present or not.
The term firmware comes from a man named Ascher Opler, who first quoted the term in a 1967 Datamation article. It first meant the microcode, which were contents of a writable control store. This small specialized high speed memory defined and implemented the computer’s instruction set. If necessary, the user could re-load the firmware to specialize or modify the instructions that the CPU could execute. Firmware initially contrasted with the CPU itself and normal instructions executing on a CPU. It was composed of lower-level microcode involved in the implementation of machine instructions rather than CPU machine instructions. It existed on the boundary between hardware and software, which is where the name “firmware” came from. Still later, popular usage extended the word “firmware” to describe anything ROM-resident, including processor machine-instructions for BIOS, bootstrap loaders, or specialized applications. The concept of “firmware” has evolved to mean almost any programmable content of a hardware device, such as machine code for a processor and configurations for application-specific integrated circuits.
In some ways, the different firmware components are as important as the actual operating system in a working computer. However, unlike many modern operating systems, firmware does not usually have a well-evolved automatic mechanism of updating itself to fix any functionality problems that may have been detected after shipping the unit. Currently, consumers can update the BIOS in a modern PC fairly easily. Devices like video cards or modems usually depend on firmware dynamically loaded by a device driver. This may cause the specific firmware to be updated transparently through the operating system update mechanisms. Firmware in storage devices, however, rarely gets updated, even when flash storage is used. There are not currently any standardized mechanisms for detecting and updating firmware versions. However, in practice, these devices have a low rate of functionality problems than those that have updated firmware.
The majority of computer peripherals are unique special-purpose computers. While external devices have firmware stored internally, modern graphics cards and peripheral expansion cards often have parts of the firmware loaded by the host system at start-up. This in turn creates more flexibility; however, on the other hand, it can also cause function failure when the host computer has not fully “fed” it the requisite firmware, typically via a specific device driver. Modern device drivers often use parts of a normal application in addition to lower level operating interfaces designed for device drivers, which may also expose a direct graphical user-interface for configuration. As of 2010, most modern portable music players support firmware upgrades. Some companies use firmware updates to add new file formats and encodings. Other features that may be changed with firmware updates include the GUI or the life of the battery. Most cell phones are capable of a firmware upgrade for similar reasons, and some may even be upgraded to enhance reception or sound quality. This shows that firmware is used at more than one level in complex products. Since 1996, most automobiles contained an on-board computer and various sensors to detect mechanical problems. However, within the last year, modern vehicles also employ computer-controlled ABS systems and computer-operated Transmission Control Systems. The driver can also receive information on their dashboards while driving in this manner, such as real-time fuel-economy and tire-pressure readings. Local dealers can update most firmware in vehicles.