# Microprogramari

En sistemes electrònics i ordinadors, el microprogramari (en anglès firmware) o programació en firm és un bloc d'instruccions de programa per a propòsits específics, gravats en una memòria de tipus no volàtil (ROM, EEPROM, flash, etc.), que estableix la lògica de més baix nivell que controla els circuits electrònics d'un dispositiu de qualsevol tipus. Com que està integrat en l'electrònica del dispositiu és en part maquinari, però també és programari, ja que proporciona lògica i es disposa en algun tipus de llenguatge de programació. Canviar el firmware d'un dispositiu pot resultar en alguns casos estrany o be impossible; el firmware de certs dispositius de memòria són instal·lats permanentment i el seu canvi no és possible després de la seva fabricació. Entre les raons més comunes per a l'actualització del firmware s'inclouen errors de fixació o d'addició de característiques al dispositiu. Això pot requerir canviar físicament els circuits integrats de ROM, o reprogramar la memòria flash amb un procediment especial.
Funcionalment, el firmware és l'intermediari (interfície) entre les ordres externes que rep el dispositiu i la seva electrònica, ja que és l'encarregat de controlar a aquesta última per executar correctament aquestes ordres externes. Trobem el firmware en memòries ROM dels sistemes de diversos dispositius perifèrics, com monitor de vídeo, unitats de disc, impressores, etc. però també en els mateixos microprocessadors, xips de memòria principal i en general en qualsevol circuit integrat i també en els reproductors MP3 o MP4. Molts dels firmwares emmagatzemats en ROM estan protegits per drets d'autor.
El programa BIOS d'un ordinador és un firmware el propòsit del qual és activar una màquina des que aquesta s'encén i preparar l'entorn per a la instal·lació d'un Sistema Operatiu complex en la memòria RAM, així com respondre a altres esdeveniments externs (botons de pulsació humana) i a l'intercanvi d'ordres entre diferents components de l'ordinador. En un microprocessador el firmware és el qual rep les instruccions dels programes i les executa en la complexa circuiteria d'aquest, emetent ordres a altres dispositius del sistema.

## Origen del terme

Ascher Opler va encunyar el terme firmware en un article de Datamation publicat l'any 1967. Originàriament, feia referència al microcodi, un contingut en un emmagatzematge de control, que definia i implementava el conjunt d'instruccions de l'ordinador; en cas que fos necessari, el firmware podria ser recarregat per especialitzar o per modificar les instruccions que podia executar la Unitat central de processament (CPU). Segons l'ús original, el firmware contrastava tant amb el hardware (la CPU en si mateixa) com en el programari (les instruccions normals que es duen a terme en una CPU). El firmware no estava compost d'instruccions de màquina de la CPU sinó del microcodi de nivell inferior implicat en la implementació de les instruccions de màquina que duria a terme la CPU. El firmware existia a la frontera entre el hardware i el software; d'aquí el terme de firmware, que significa software ferm, fix, sòlid.
Posteriorment, el terme va ser eixamplat per incloure qualsevol tipus de microcodi, ja fos en RAM o bé ROM. Més endavant, el mateix terme es va ampliar encara més, en l'ús popular, per denotar qualsevol cosa resident en ROM, incloses les instruccions de màquina del processador pel BIOS, els carregadors d'arrencada o bé aplicacions especialitzades.

## El firmware avui en dia

Fins a mitjans dels anys 1990 el procediment típic per actualitzar un firmware a una nova versió era substituir el mitjà d'emmagatzematge que contenia el firmware, usualment un xip de memòria ROM connectat a un socket. Avui en dia aquest procediment no és habitual, ja que els fabricants han afegit una nova funcionalitat que permet gravar les noves instruccions en la mateixa memòria, fent de l'actualització un procés molt més còmode i dinàmic. Tanmateix, aquest procés d'actualització d'un firmware s'ha de realitzar amb molta cura, tenint en compte que en ser un component vital, qualsevol error pot deixar a l'equip inservible. Per exemple, un error d'alimentació a la meitat del procés d'actualització evitaria la càrrega completa del codi que impera l'equip, fins i tot potser la càrrega del codi que s'encarrega d'actualitzar el firmware, així que no el podríem actualitzar de nou, pel que l'equip deixaria de funcionar.
El firmware ha evolucionat per significar gairebé qualsevol contingut programable d'un dispositiu de hardware, no només el codi de màquina per un processador, sinó també configuracions i dades pels circuits integrats per les aplicacions específiques (ASIC), dispositius de lògica programable, etc.

### Perifèrics de l'ordinador

La majoria dels perifèrics de l'ordinador són realment ordinador de propòsit especial. Mentre que dispositius externs com impressores, escàners, càmeres, USB, etc. tenen el firmware emmagatzemat internament, alguns dels perifèrics de baix cost ja no contenen una memòria no volàtil pel firmware, i aquests tenen grans parts de firmware que és carregat en l'arrencament pel sistema hoste, el que és més flexible. Aquest hardware doncs, pot no funcionar completament fins que l'ordinador hoste li hagi carregat tot el firmware indispensable, a vegades a través del driver de dispositiu específic; o més concretament, per mitjà d'un subsistema dins del paquet del driver de dispositiu.
Els moderns drivers de dispositiu també poden exposar una interface directa d'usuari per la configuració, a més a més de les trucades/interfaces del sistema operatiu o de les Interfaces de programació d'aplicacions (APIs).

### Reptes del firmware en els Pc's

En la majoria dels casos, els diferents components del firmware són tan importants com el sistema operatiu en un ordinador. Tanmateix, a diferència de la gran majoria dels sistemes operatius moderns, el firmware rarament compta amb un mecanisme automàtic d'actualització d'ell mateix ben desenvolupat per solucionar els problemes detectats després que la unitat sigui despatxada.
El BIOS pot ser fàcilment i “manualment” actualitzat en un ordinador modern per un usuari, utilitzant un petit programa; els dispositius com les targetes de vídeo o els mòdems confien en el firmware carregat dinàmicament per un driver de dispositiu, i a vegades, d'aquesta manera poden ser actualitzats transparentment a través dels mecanismes de l'actualització del sistema operatiu. Per contra, el firmware en dispositius d'emmagatzematge (discs durs, DVD drives, emmagatzematge flash) poques vegades s'actualitza, fins i tot quan el flash d'emmagatzematge (en lloc de ROM) és utilitzat pel firmware, no hi ha mecanismes estandarditzats per detectar o actualitzar versions del firmware. Aquests dispositius, per tant, tendeixen a tenir un índex més alt de problemes de funcionalitat si els comparem amb altres parts d'un modern sistema de computació.

### Reproductors de música portàtils

Algunes de les companyies utilitzen actualitzacions del firmware per agregar nous formats d'arxiu de reproducció de so (còdecs); per exemple, el iriver va agregar el format ogg (Vorbis) d'aquesta manera. Altres característiques que també poden ser canviades a partir d'actualitzacions del firmware són el GUI o fins i tot la vida de la bateria. La majoria dels reproductors de música moderns suporten les actualitzacions del firmware.

### Telèfons mòbils

Bona part dels telèfons mòbils tenen una capacitat de firmware actualitzable per les mateixes raons esmentades anteriorment; però en alguns fins i tot alguns poden ser actualitzats per millorar la recepció o la qualitat del so, el que demostra el fet que el firmware s'utilitza en més d'un nivell en productes complexos (en una CPU com a microcontrolador envers en un processador de senyal digital, en aquest cas en particular).
Aquesta capacitat d'actualització del firmware en nous dispositius és pràcticament un requisit indispensable, sobretot si parlem d'equips de gamma mitjana-alta. La majoria de les grans empreses (Nokia, Sony Ericsson, Motorola, etc.) brinden softwares gratuïts per a l'actualització del firmware per part del client final. Abans de realitzar qualsevol modificació a l'equip però, és important verificar que no es violi la garantia d'aquest.

### Automòbils

Des del 1996 la majoria d'automòbils han emprat un ordinador a bord i una sèrie de sensors per detectar problemes mecànics. Els vehicles moderns també fan servir sistemes controladors per ordinador ABS, i sistemes de control de transmissió controlats per ordinador. El conductor pot també rebre informació “in-dash” mentre condueix d'aquesta manera, com ara lectures en temps real de l'economia del combustible i de la pressió del neumàtic. Gran part del firmware del vehicle pot ser actualitzat en un distribuïdor local autoritzat.

### Definició de l'IEEE

El glossari estàndard de terminologia del software del Institute of Electrical and Electronics Engineers (IEEE), Std 610.12-1990, defineix el firmware de la següent manera:
    "La combinació d'instruccions d'un dispositiu de hardware i instruccions i dades d'ordinador que resten com a software de només lectura en aquest dispositiu".
    Notes:
       (1) aquest terme és a vegades utilitzat per referir-se només al dispositiu de hardware o només a les instruccions de dades d'ordinador, però aquests significats estan desaprovats.
       (2) la confusió que envolta aquest terme ha arribat al punt que alguns suggereixin que aquest s'ha d'evitar totalment.

## Exemples del firmware

En productes de consum:
* Sistemes de temporització i control per les rentadores
* Xips de EPROM utilitzats en la sèrie Eventide H-3000 de processadors digitals de música.
* Controlant els atributs del so i vídeo, així com la llista de canals en els televisors moderns
En ordinadors:
* El BIOS trobat en ordinadors personals compatibles amb l'IBM PC
* El codi de plataforma trobat en els sistemes Itanium, les màquines Mac OS X basades en Intel, i moltes targetes d'escriptori d'Intel tenen firmware EFI
* Open Firmware, utilitzat en ordinadors de Sun Microsystems, Apple Computer, i de Gènesi
* ARCS, utilitzat en ordinadors de Silicon Graphics
* Kickstart, emprat en la línia d'ordinadors Amiga. Aquest és un exemple únic d'un firmware que mesclava les capacitats del BIOS (POST, inici del hardware més autoconfiguració Plug and Play de perifèrics, etc.) del kernel en si mateix del AmigaOS i de parts del codi utilitzades en el sistema operatiu (com primitives i bibliotecas de la interface gràfica)
* RTAS (Run Time Abstraction Services), utilitzat en ordinadors d'IBM
* El Common Firmware Environment (CFE)

## Haquejant el firmware

En algunes ocasions, una nova o modificada versió no oficial de firmware és creada per tercers per proporcionar noves característiques a dispositius o per obrir una funcionalitat oculta. Els exemples inclouen:
* Whited00r per iPhone i iPod touch.
* Rockbox pels reproductors d'audio digital.
* CHDK i Magic Lantern per a les càmeres digitals de Canon.
* Open Wrt per als routers sense fils.
* El firmware de regió lliure per unitats de DVD, que no són de regió lliure amb el firmware oficial, així com molts projectes de Homebrew per a consoles de jocs.
* Homebrew per a consoles de jocs. Aquests, normalment poden obrir funcionalitat computacional en dispositius prèviament limitats (doom en iPods).
* Nikon Hacker project per Nikon EXPEED DSLRs.
* SamyGO, firmware modificat per televisors de Samsung.
La majoria d'aquests hacks de firmware són lliures i també de codi obert. Aquests hacks normalment utilitzen la facilitat d'actualització del firmware en molts dispositius per instal·lar-se o executar-se en ells mateixos. Tanmateix, alguns d'ells, han de recórrer a exploits per a funcionar, perquè el fabricant ha intentat bloquejar el hardware per evitar que utilitzin el codi no autoritzat.

## Referències

* ↑ The Authoritative Dictionary of IEEE Standards Terms, p. 438. DOI 10.1109/IEEESTD.2000.322230. ISBN 0738126012.
* ↑ Opler, Ascher «Fourth-Generation Software». Datamation, 13, January 1967.
* 1 2 http://www.maximumpc.com/article/features/frimware_hacks?page=0%2C1
* ↑ http://lwn.net/Articles/361445/
* ↑ http://malcon.org/ Arxivat 2012-06-06 a Wayback Machine.
* ↑ http://www.h-online.com/security/news/item/Hacker-plants-back-door-in-Symbian-firmware-1149926.html

## Vegeu també

* Programari
* Carregador de l'arrencada
* Imatge ROM

## Enllaços externs

* Microprogramari Arxivat 2016-03-03 a Wayback Machine. (definició)
* Ecured(en castellà)
* Portal del firmware Arxivat 2016-05-24 a Wayback Machine. (en anglès)
Viccionari