|
|
Line 1,146: |
Line 1,146: |
| Modern mainboards store the BIOS in a reprogrammable flash chip. There are hundreds of different flash (EEPROM) chips, with variables such as memory size, speed, communication bus (Parallel, LPC, FWH, SPI) and packaging to name just a few. | | Modern mainboards store the BIOS in a reprogrammable flash chip. There are hundreds of different flash (EEPROM) chips, with variables such as memory size, speed, communication bus (Parallel, LPC, FWH, SPI) and packaging to name just a few. |
|
| |
|
| ==Packaging/housing/form factor== | | == Packaging/housing/form factor == |
| Probably the only property of flash chips which is completely irrelevant to flashrom. | | |
| The three most common packages are called DIP, PLCC and TSOP. The BIOS copyright holders often place a fancy sticker on the BIOS chip showing a name or logotype, BIOS version, serial number and copyright notice. | | Probably the only property of flash chips which is completely irrelevant to flashrom. The three most common packages are called '''DIP''', '''PLCC''' and '''TSOP'''. The BIOS copyright holders often place a fancy sticker on the BIOS chip showing a name or logo, BIOS version, serial number and copyright notice. |
|
| |
|
| '''DIP32: Dual In-line Package, 32 pins''' | | '''DIP32: Dual In-line Package, 32 pins''' |
Line 1,155: |
Line 1,155: |
| File:Dip32 chip.jpg | | File:Dip32 chip.jpg |
| File:Dip32 chip back.jpg | | File:Dip32 chip back.jpg |
| | File:Dip32 in socket.jpg |
| | File:Empty dip32 socket.jpg |
| </gallery> | | </gallery> |
|
| |
|
| A rectangular black plastic block with lots of pins along the two longer sides of the package. DIP chips can be socketed which means they are detachable from the mainboard using physical force. Since they haven't been moved in and out of the socket very much (yet, hehe) they can appear to be quite difficult to release from the socket. One way to remove a DIP from a socket is by prying a thin screwdriver in between the plastic package and the socket, along the shorter sides where there are no pins, and then gently bending the screwdriver to push the DIP upwards, away from the mainboard. Alternate between the two sides to avoid bending the pins, and don't touch any of the pins with the screwdriver, see FAQ about ESD, electro-static discharge. If the DIP is soldered directly to the mainboard, it has to be desoldered in order to be reprogrammed outside the mainboard. If you do this, it's a good idea to solder a socket to the mainboard instead, to ease any future experiments. | | A rectangular black plastic block with 16 pins along each of the two longer sides of the package (32 pins in total). DIP32 chips can be '''socketed''' which means they are detachable from the mainboard using physical force. Since they haven't been moved in and out of the socket very much (yet, hehe) they can appear to be quite difficult to release from the socket. One way to remove a DIP32 chip from a socket is by prying a '''thin screwdriver''' in between the plastic package and the socket, along the shorter sides where there are no pins, and then gently bending the screwdriver to push the chip upwards, away from the mainboard. Alternate between the two sides to avoid bending the pins, and don't touch any of the pins with the screwdriver (see FAQ about ESD, electro-static discharge). If the chip is soldered directly to the mainboard, it has to be desoldered in order to be reprogrammed outside the mainboard. If you do this, it's a good idea to solder a socket to the mainboard instead, to ease any future experiments. |
|
| |
|
| '''PLCC32: Plastic Leaded Chip Carrier, 32 pins''' | | '''PLCC32: Plastic Leaded Chip Carrier, 32 pins''' |
Line 1,164: |
Line 1,166: |
| File:Plcc32 chip.jpg | | File:Plcc32 chip.jpg |
| File:Plcc32 chip back.jpg | | File:Plcc32 chip back.jpg |
| | File:Plcc32 in socket.jpg |
| | File:Empty plcc32 socket.jpg |
| | File:Soldered plcc32.jpg |
| | File:Dual_plcc32_soldered.jpg |
| </gallery> | | </gallery> |
|
| |
|
| Black plastic block again, but this one is much more square. PLCC is becoming the standard for mainboards because of it's smaller physical size. PLCC can also be socketed or soldered directly to the mainboard. Socketed PLCC chips can be removed using a special PLCC removal tool, or using a piece of nylon line tied in a loop around the chip and pulled swiftly straight up, or bending/prying using small screwdrivers if one is careful. PLCC sockets are often fragile so the screwdriver approach is not recommended. While the nylon line method sounds onorthodox it works well. Desoldering PLCC can be painful without specialized desoldering equipment particularly because PLCC chips have leads on all four sides of the package. | | Black plastic block again, but this one is much more square. PLCC32 was becoming the standard for mainboards after DIP32 chips because of it's smaller physical size. PLCC can also be '''socketed''' or '''soldered directly to the mainboard'''. Socketed PLCC32 chips can be removed using a special '''PLCC removal tool'''', or using a '''piece of nylon line''' tied in a loop around the chip and pulled swiftly straight up, or bending/prying using small screwdrivers if one is careful. PLCC32 sockets are often fragile so the '''screwdriver approach is not recommended'''. While the nylon line method sounds strange it works well. Desoldering PLCC32 can be painful without specialized desoldering equipment particularly because PLCC32 chips have leads on all four sides of the package, but it's [[Soldering a socket on your board|certainly doable]]. |
|
| |
|
| '''DIP8: Dual In-line Package, 8 pins''' | | '''DIP8: Dual In-line Package, 8 pins''' |
Line 1,173: |
Line 1,179: |
| File:Dip8 chip.jpg | | File:Dip8 chip.jpg |
| File:Dip8 chip back.jpg | | File:Dip8 chip back.jpg |
| | File:Dip8 in socket.jpg |
| | File:Empty dip8 socket.jpg |
| </gallery> | | </gallery> |
|
| |
|
Line 1,179: |
Line 1,187: |
| <gallery> | | <gallery> |
| File:Soic8_chip.jpg | | File:Soic8_chip.jpg |
| | File:Spi-socket-dscn2913-1024x768.jpg |
| </gallery> | | </gallery> |
|
| |
|
| '''TSOP: Thin Small-Outline Package''' | | '''TSOP: Thin Small-Outline Package''' |
|
| |
|
| TSOPs are often used in embedded systems where size is important and there is no need for replacement in the field. It is possible to (de)solder TSOPs by hand, but it comes close to wizardry. | | <gallery> |
| | File:Soldered tsop40.jpg |
| | File:Soldered tsop48.jpg |
| | </gallery> |
| | |
| | TSOPs are often used in embedded systems where size is important and there is no need for replacement in the field. It is possible to (de)solder TSOPs by hand, but it's not trivial and a reasonable amount of soldering skills are required. |
| | |
| | == Communication bus protocol == |
|
| |
|
| ==Communication bus protocol==
| |
| There are four major communication bus protocols for flash chips, each with multiple subtle variants in the command set: | | There are four major communication bus protocols for flash chips, each with multiple subtle variants in the command set: |
| * Parallel: The oldest flash bus, phased out on mainboards around 2002.
| |
| * LPC: Low Pin Count, a standard introduced ca. 1998.
| |
| * FWH: Firmware Hub, a variant of the LPC standard introduced at the same time. FWH is a special case variant of LPC with one bit set differently in the memory read/write commands. That means some data sheets mention the chips speak LPC although they will not respond to regular LPC read/write cycles.
| |
| * SPI: Serial Peripheral Interface, introduced ca. 2006.
| |
|
| |
|
| I've tried to create a marketing language -> chip type mapping below:
| | * '''Parallel:''' The oldest flash bus, phased out on mainboards around 2002. |
| | * '''LPC:''' Low Pin Count, a standard introduced ca. 1998. |
| | * '''FWH:''' Firmware Hub, a variant of the LPC standard introduced at the same time. FWH is a special case variant of LPC with one bit set differently in the memory read/write commands. That means some data sheets mention the chips speak LPC although they will not respond to regular LPC read/write cycles. |
| | * '''SPI:''' Serial Peripheral Interface, introduced ca. 2006. |
| | |
| | Here's an attempt to create a marketing language -> chip type mapping: |
| | |
| * JEDEC Flash -> Parallel (well, mostly) | | * JEDEC Flash -> Parallel (well, mostly) |
| * FWH -> FWH | | * FWH -> FWH |
Line 1,203: |
Line 1,220: |
|
| |
|
| SST data sheets have the following conventions: | | SST data sheets have the following conventions: |
| | |
| * LPC Memory Read -> LPC | | * LPC Memory Read -> LPC |
| * Firmware Memory Read -> FWH | | * Firmware Memory Read -> FWH |
| | |
| If both are mentioned, the chip supports both. | | If both are mentioned, the chip supports both. |
|
| |
|
Line 1,235: |
Line 1,254: |
| |} | | |} |
|
| |
|
| | | Generally, a parallel flash chip will not speak any other protocols. SPI flash chips also don't speak any other protocols. LPC flash chips sometimes speak FWH as well and vice versa, but they will not speak any protocols besides LPC/FWH. |
| | |
| Generally, a Parallel flash chip will not speak any other protocols. SPI flash chips also don't speak any other protocols. LPC flash chips sometimes speak FWH as well and vice versa, but they will not speak any protocols besides LPC/FWH. | |
flashrom is a utility for identifying, reading, writing, verifying and erasing flash chips. It's often used to flash BIOS/EFI/coreboot/firmware images.
- Supports more than 160 flash chips, 75 chipsets, 100 mainboards, and 10 PCI devices which can be used as external programmers.
- Supports parallel, LPC, FWH and SPI flash interfaces and various chip packages (DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, TSOP40 and more)
- No physical access needed, root access is sufficient.
- No bootable floppy disk, bootable CD-ROM or other media needed.
- No keyboard or monitor needed. Simply reflash remotely via SSH.
- No instant reboot needed. Reflash your chip in a running system, verify it, be happy. The new firmware will be present next time you boot.
- Crossflashing and hotflashing is possible as long as the flash chips are electrically and logically compatible (same protocol). Great for recovery.
- Scriptability. Reflash a whole pool of identical machines at the same time from the command line. It is recommended to check flashrom output and error codes.
- Speed. flashrom is often much faster than most vendor flash tools.
- Portability. Supports Linux, FreeBSD, DragonFly BSD, Solaris, Mac OS X, and other Unix-like OSes.
Supported devices
Supported chips
Total amount of supported chips: 172
Vendor
|
Flash part
|
Status
|
|
Probe
|
Read
|
Write
|
Erase
|
AMD |
Am29F002(N)BB |
? |
? |
? |
?
|
AMD |
Am29F002(N)BT |
OK |
OK |
OK |
OK
|
AMD |
Am29F016D |
? |
? |
? |
?
|
AMD |
Am29F040B |
OK |
OK |
OK |
OK
|
AMD |
Am29F080B |
? |
? |
? |
?
|
AMD |
Am29LV040B |
? |
? |
? |
?
|
AMD |
Am29LV081B |
? |
? |
? |
?
|
ASD |
AE49F2008 |
? |
? |
? |
?
|
Atmel |
AT25DF021 |
? |
? |
? |
?
|
Atmel |
AT25DF041A |
? |
? |
? |
?
|
Atmel |
AT25DF081 |
? |
? |
? |
?
|
Atmel |
AT25DF161 |
? |
? |
? |
?
|
Atmel |
AT25DF321 |
OK |
OK |
OK |
OK
|
Atmel |
AT25DF321A |
? |
? |
? |
?
|
Atmel |
AT25DF641 |
? |
? |
? |
?
|
Atmel |
AT25F512B |
? |
? |
? |
?
|
Atmel |
AT25FS010 |
? |
? |
? |
?
|
Atmel |
AT25FS040 |
? |
? |
? |
?
|
Atmel |
AT26DF041 |
? |
? |
? |
?
|
Atmel |
AT26DF081A |
? |
? |
? |
?
|
Atmel |
AT26DF161 |
? |
? |
? |
?
|
Atmel |
AT26DF161A |
? |
? |
? |
?
|
Atmel |
AT26F004 |
? |
? |
? |
?
|
Atmel |
AT29C512 |
OK |
OK |
OK |
OK
|
Atmel |
AT29C010A |
OK |
OK |
OK |
?
|
Atmel |
AT29C020 |
OK |
OK |
OK |
OK
|
Atmel |
AT29C040A |
? |
? |
? |
?
|
Atmel |
AT45CS1282 |
? |
? |
? |
?
|
Atmel |
AT45DB011D |
? |
? |
? |
?
|
Atmel |
AT45DB021D |
? |
? |
? |
?
|
Atmel |
AT45DB041D |
? |
? |
? |
?
|
Atmel |
AT45DB081D |
? |
? |
? |
?
|
Atmel |
AT45DB161D |
? |
? |
? |
?
|
Atmel |
AT45DB321C |
? |
? |
? |
?
|
Atmel |
AT45DB321D |
? |
? |
? |
?
|
Atmel |
AT45DB642D |
? |
? |
? |
?
|
Atmel |
AT49BV512 |
OK |
OK |
OK |
OK
|
Atmel |
AT49F002(N) |
? |
? |
? |
?
|
Atmel |
AT49F002(N)T |
OK |
OK |
OK |
OK
|
AMIC |
A25L40P |
OK |
OK |
OK |
OK
|
AMIC |
A29002B |
? |
? |
? |
?
|
AMIC |
A29002T |
OK |
OK |
OK |
OK
|
AMIC |
A29040B |
OK |
OK |
? |
?
|
AMIC |
A49LF040A |
OK |
OK |
OK |
OK
|
EMST |
F49B002UA |
? |
? |
? |
?
|
EON |
EN29F002(A)(N)B |
? |
? |
? |
?
|
EON |
EN29F002(A)(N)T |
OK |
OK |
OK |
OK
|
Fujitsu |
MBM29F004BC |
? |
? |
? |
?
|
Fujitsu |
MBM29F004TC |
? |
? |
? |
?
|
Fujitsu |
MBM29F400BC |
? |
? |
? |
?
|
Fujitsu |
MBM29F400TC |
? |
? |
? |
?
|
Intel |
28F001BX-B |
? |
? |
? |
?
|
Intel |
28F001BX-T |
OK |
OK |
? |
?
|
Intel |
82802AB |
OK |
OK |
OK |
OK
|
Intel |
82802AC |
OK |
OK |
OK |
OK
|
Macronix |
MX25L512 |
? |
? |
? |
?
|
Macronix |
MX25L1005 |
? |
? |
? |
?
|
Macronix |
MX25L2005 |
? |
? |
? |
?
|
Macronix |
MX25L4005 |
OK |
OK |
OK |
OK
|
|
Vendor
|
Flash part
|
Status
|
|
Probe
|
Read
|
Write
|
Erase
|
Macronix |
MX25L8005 |
OK |
OK |
OK |
OK
|
Macronix |
MX25L1605 |
OK |
OK |
OK |
OK
|
Macronix |
MX25L1635D |
? |
? |
? |
?
|
Macronix |
MX25L3205 |
OK |
OK |
OK |
OK
|
Macronix |
MX25L3235D |
? |
? |
? |
?
|
Macronix |
MX25L6405 |
? |
? |
? |
?
|
Macronix |
MX25L12805 |
? |
? |
? |
?
|
Macronix |
MX29F002B |
? |
? |
? |
?
|
Macronix |
MX29F002T |
OK |
OK |
OK |
OK
|
Macronix |
MX29LV040C |
OK |
OK |
? |
?
|
Numonyx |
M25PE10 |
? |
? |
? |
?
|
Numonyx |
M25PE20 |
? |
? |
? |
?
|
Numonyx |
M25PE40 |
? |
? |
? |
?
|
Numonyx |
M25PE80 |
OK |
OK |
OK |
OK
|
Numonyx |
M25PE16 |
? |
? |
? |
?
|
PMC |
Pm25LV010 |
? |
? |
? |
?
|
PMC |
Pm25LV016B |
? |
? |
? |
?
|
PMC |
Pm25LV020 |
? |
? |
? |
?
|
PMC |
Pm25LV040 |
? |
? |
? |
?
|
PMC |
Pm25LV080B |
? |
? |
? |
?
|
PMC |
Pm25LV512 |
? |
? |
? |
?
|
PMC |
Pm39LV010 |
OK |
OK |
OK |
OK
|
PMC |
Pm49FL002 |
OK |
OK |
OK |
OK
|
PMC |
Pm49FL004 |
OK |
OK |
OK |
OK
|
Sharp |
LHF00L04 |
? |
? |
? |
?
|
Spansion |
S25FL016A |
OK |
OK |
OK |
OK
|
SST |
SST25VF016B |
OK |
OK |
OK |
OK
|
SST |
SST25VF032B |
OK |
OK |
OK |
OK
|
SST |
SST25VF040B |
? |
? |
? |
?
|
SST |
SST25VF040.REMS |
OK |
OK |
? |
?
|
SST |
SST25VF040B.REMS |
OK |
OK |
? |
?
|
SST |
SST25VF080B |
OK |
OK |
OK |
OK
|
SST |
SST28SF040A |
? |
? |
? |
?
|
SST |
SST29EE010 |
OK |
OK |
OK |
OK
|
SST |
SST29LE010 |
? |
? |
? |
?
|
SST |
SST29EE020A |
OK |
OK |
OK |
OK
|
SST |
SST29LE020 |
? |
? |
? |
?
|
SST |
SST39SF010A |
OK |
OK |
OK |
OK
|
SST |
SST39SF020A |
OK |
OK |
OK |
OK
|
SST |
SST39SF040 |
OK |
OK |
OK |
OK
|
SST |
SST39VF512 |
OK |
OK |
OK |
OK
|
SST |
SST39VF010 |
OK |
OK |
OK |
OK
|
SST |
SST39VF020 |
OK |
OK |
OK |
OK
|
SST |
SST39VF040 |
OK |
? |
? |
?
|
SST |
SST39VF080 |
? |
? |
? |
?
|
SST |
SST49LF002A/B |
OK |
OK |
OK |
OK
|
SST |
SST49LF003A/B |
? |
? |
? |
?
|
SST |
SST49LF004A/B |
OK |
OK |
OK |
OK
|
SST |
SST49LF004C |
? |
? |
? |
?
|
SST |
SST49LF008A |
OK |
OK |
OK |
OK
|
SST |
SST49LF008C |
? |
? |
? |
?
|
SST |
SST49LF016C |
OK |
OK |
OK |
OK
|
SST |
SST49LF020 |
OK |
OK |
? |
?
|
SST |
SST49LF020A |
? |
? |
? |
?
|
SST |
SST49LF040 |
OK |
OK |
OK |
OK
|
SST |
SST49LF040B |
OK |
OK |
OK |
OK
|
SST |
SST49LF080A |
OK |
OK |
OK |
OK
|
SST |
SST49LF160C |
OK |
OK |
OK |
OK
|
|
Vendor
|
Flash part
|
Status
|
|
Probe
|
Read
|
Write
|
Erase
|
ST |
M25P05-A |
? |
? |
? |
?
|
ST |
M25P10-A |
? |
? |
? |
?
|
ST |
M25P20 |
? |
? |
? |
?
|
ST |
M25P40 |
? |
? |
? |
?
|
ST |
M25P40-old |
? |
? |
? |
?
|
ST |
M25P80 |
? |
? |
? |
?
|
ST |
M25P16 |
OK |
OK |
OK |
OK
|
ST |
M25P32 |
OK |
OK |
OK |
OK
|
ST |
M25P64 |
? |
? |
? |
?
|
ST |
M25P128 |
? |
? |
? |
?
|
ST |
M29F002B |
? |
? |
? |
?
|
ST |
M29F002T/NT |
OK |
OK |
OK |
OK
|
ST |
M29F040B |
OK |
OK |
OK |
OK
|
ST |
M29F400BT |
? |
? |
? |
?
|
ST |
M29W010B |
? |
? |
? |
?
|
ST |
M29W040B |
? |
? |
? |
?
|
ST |
M50FLW040A |
? |
? |
? |
?
|
ST |
M50FLW040B |
? |
? |
? |
?
|
ST |
M50FLW080A |
OK |
OK |
OK |
OK
|
ST |
M50FLW080B |
? |
? |
? |
?
|
ST |
M50FW002 |
? |
? |
? |
?
|
ST |
M50FW016 |
? |
? |
? |
?
|
ST |
M50FW040 |
OK |
OK |
OK |
OK
|
ST |
M50FW080 |
OK |
OK |
OK |
OK
|
ST |
M50LPW116 |
? |
? |
? |
?
|
SyncMOS |
S29C31004T |
? |
? |
? |
?
|
SyncMOS |
S29C51001T |
? |
? |
? |
?
|
SyncMOS |
S29C51002T |
OK |
OK |
OK |
OK
|
SyncMOS |
S29C51004T |
? |
? |
? |
?
|
TI |
TMS29F002RB |
? |
? |
? |
?
|
TI |
TMS29F002RT |
? |
? |
? |
?
|
Winbond |
W25x10 |
? |
? |
? |
?
|
Winbond |
W25x20 |
? |
? |
? |
?
|
Winbond |
W25x40 |
OK |
OK |
OK |
OK
|
Winbond |
W25x80 |
OK |
OK |
OK |
OK
|
Winbond |
W29C011 |
OK |
OK |
OK |
OK
|
Winbond |
W29C020C |
OK |
OK |
OK |
OK
|
Winbond |
W29C040P |
? |
? |
? |
?
|
Winbond |
W29EE011 |
OK |
OK |
OK |
OK
|
Winbond |
W39V040A |
OK |
OK |
OK |
OK
|
Winbond |
W39V040B |
OK |
OK |
OK |
OK
|
Winbond |
W39V040C |
OK |
OK |
OK |
OK
|
Winbond |
W39V040FA |
OK |
OK |
OK |
OK
|
Winbond |
W39V080A |
OK |
OK |
OK |
OK
|
Winbond |
W49F002U |
OK |
OK |
OK |
OK
|
Winbond |
W49V002A |
OK |
OK |
OK |
OK
|
Winbond |
W49V002FA |
? |
? |
? |
?
|
Winbond |
W39V080FA |
OK |
OK |
OK |
OK
|
Winbond |
W39V080FA (dual mode) |
? |
? |
? |
?
|
|
Supported chipsets
Total amount of supported chipsets: 76
Vendor
|
Southbridge
|
PCI IDs
|
Status
|
ALi |
M1533 |
10b9:1533 |
OK
|
AMD |
AMD-768 |
1022:7440 |
OK
|
AMD |
AMD8111 |
1022:7468 |
OK
|
AMD |
CS5530(A) |
1078:0100 |
OK
|
AMD |
CS5536 |
1022:2080 |
OK
|
AMD |
Elan SC520 |
1022:3000 |
OK
|
AMD |
SB600 |
1002:438d |
OK
|
AMD |
SB700 |
1002:439d |
OK
|
AMD |
SC1100 |
100b:0510 |
?
|
ATI |
SB400 |
1002:4377 |
OK
|
Broadcom |
HT-1000 |
1166:0205 |
OK
|
Intel |
440MX |
8086:7198 |
OK
|
Intel |
6300ESB |
8086:25a1 |
OK
|
Intel |
631xESB/632xESB/3100 |
8086:2670 |
OK
|
Intel |
EP80579 |
8086:5031 |
OK
|
Intel |
ICH0 |
8086:2420 |
OK
|
Intel |
ICH10 |
8086:3a18 |
OK
|
Intel |
ICH10D |
8086:3a1a |
OK
|
Intel |
ICH10DO |
8086:3a14 |
OK
|
Intel |
ICH10R |
8086:3a16 |
OK
|
Intel |
ICH2 |
8086:2440 |
OK
|
Intel |
ICH2-M |
8086:244c |
OK
|
Intel |
ICH3-M |
8086:248c |
OK
|
Intel |
ICH3-S |
8086:2480 |
OK
|
Intel |
ICH4/ICH4-L |
8086:24c0 |
OK
|
Intel |
ICH4-M |
8086:24cc |
OK
|
Intel |
ICH5/ICH5R |
8086:24d0 |
OK
|
|
Vendor
|
Southbridge
|
PCI IDs
|
Status
|
Intel |
ICH6/ICH6R |
8086:2640 |
OK
|
Intel |
ICH6-M |
8086:2641 |
OK
|
Intel |
ICH7DH |
8086:27b0 |
OK
|
Intel |
ICH7/ICH7R |
8086:27b8 |
OK
|
Intel |
ICH7M |
8086:27b9 |
OK
|
Intel |
ICH7MDH |
8086:27bd |
OK
|
Intel |
ICH |
8086:2410 |
OK
|
Intel |
ICH8DH |
8086:2812 |
OK
|
Intel |
ICH8DO |
8086:2814 |
OK
|
Intel |
ICH8/ICH8R |
8086:2810 |
OK
|
Intel |
ICH8M |
8086:2815 |
OK
|
Intel |
ICH8M-E |
8086:2811 |
OK
|
Intel |
ICH9 |
8086:2918 |
OK
|
Intel |
ICH9DH |
8086:2912 |
OK
|
Intel |
ICH9DO |
8086:2914 |
OK
|
Intel |
ICH9M |
8086:2919 |
OK
|
Intel |
ICH9M-E |
8086:2917 |
OK
|
Intel |
ICH9R |
8086:2916 |
OK
|
Intel |
MPIIX |
8086:1234 |
?
|
Intel |
PIIX3 |
8086:7000 |
OK
|
Intel |
PIIX4/4E/4M |
8086:7110 |
OK
|
Intel |
PIIX |
8086:122e |
OK
|
NVIDIA |
CK804 |
10de:0050 |
OK
|
NVIDIA |
CK804 |
10de:0051 |
OK
|
NVIDIA |
NForce2 |
10de:0060 |
OK
|
NVIDIA |
CK804 |
10de:00d3 |
OK
|
|
Vendor
|
Southbridge
|
PCI IDs
|
Status
|
NVIDIA |
MCP51 |
10de:0260 |
?
|
NVIDIA |
MCP51 |
10de:0261 |
?
|
NVIDIA |
MCP51 |
10de:0262 |
?
|
NVIDIA |
MCP51 |
10de:0263 |
?
|
NVIDIA |
MCP55 |
10de:0360 |
OK
|
NVIDIA |
MCP55 |
10de:0361 |
OK
|
NVIDIA |
MCP55 |
10de:0362 |
OK
|
NVIDIA |
MCP55 |
10de:0363 |
OK
|
NVIDIA |
MCP55 |
10de:0364 |
OK
|
NVIDIA |
MCP55 |
10de:0365 |
OK
|
NVIDIA |
MCP55 |
10de:0366 |
OK
|
NVIDIA |
MCP55 |
10de:0367 |
OK
|
NVIDIA |
MCP67 |
10de:0548 |
OK
|
SiS |
SiS5595 |
1039:0008 |
OK
|
SiS |
SiS630 |
1039:0630 |
?
|
VIA |
CX700 |
1106:8324 |
OK
|
VIA |
VT8231 |
1106:8231 |
?
|
VIA |
VT8235 |
1106:3177 |
OK
|
VIA |
VT8237 |
1106:3227 |
OK
|
VIA |
VT8237A |
1106:3337 |
OK
|
VIA |
VT8237S |
1106:3372 |
OK
|
VIA |
VT82C586A/B |
1106:0586 |
OK
|
VIA |
VT82C686A/B |
1106:0686 |
?
|
|
Supported mainboards
In general, it is very likely that flashrom works out of the box even if your mainboard is not listed below.
This is a list of mainboards where we have verified that they either do or do not need any special initialization to make flashrom work (given flashrom supports the respective chipset and flash chip), or that they do not yet work at all. If they do not work, support may or may not be added later.
Mainboards which don't appear in the list may or may not work (we don't know, someone has to give it a try). Please report any further verified mainboards on the mailing list.
Known good (worked out of the box)
Total amount of boards: 71
Known good (with write-enable code in flashrom)
Total amount of boards: 34
Vendor
|
Mainboard
|
Required option
|
Status
|
Acorp |
6A815EPD |
-m acorp:6a815epd |
OK
|
agami |
Aruma |
-m AGAMI:ARUMA |
OK
|
Artec Group |
DBE61 |
-m artecgroup:dbe61 |
OK
|
Artec Group |
DBE62 |
-m artecgroup:dbe62 |
OK
|
ASUS |
A7V8-MX SE |
— |
OK
|
ASUS |
P4B266 |
— |
OK
|
ASUS |
P5A |
-m asus:p5a |
OK
|
BioStar |
P4M80-M4 |
— |
OK
|
EPoX |
EP-8K5A2 |
— |
OK
|
EPoX |
EP-BX3 |
-m epox:ep-bx3 |
OK
|
GIGABYTE |
GA-2761GXDK |
-m gigabyte:2761gxdk |
OK
|
GIGABYTE |
GA-7VT600 |
— |
OK
|
GIGABYTE |
GA-K8N-SLI |
— |
OK
|
|
Vendor
|
Mainboard
|
Required option
|
Status
|
GIGABYTE |
GA-M57SLI-S4 |
-m gigabyte:m57sli |
OK
|
GIGABYTE |
GA-M61P-S3 |
-m gigabyte:m61p |
OK
|
GIGABYTE |
GA-MA78G-DS3H |
— |
OK
|
GIGABYTE |
GA-MA78GM-S2H |
— |
OK
|
GIGABYTE |
GA-MA790FX-DQ6 |
-m gigabyte:ma790fx-dq6 |
OK
|
HP |
DL145 G3 |
-m hp:dl145_g3 |
OK
|
IBM |
x3455 |
-m ibm:x3455 |
OK
|
Intel |
D201GLY |
— |
OK
|
IWILL |
DK8-HTX |
-m iwill:dk8_htx |
OK
|
Kontron |
986LCD-M |
-m kontron:986lcd-m |
OK
|
Kontron |
986LCD-M |
-m kontron:986lcd-m |
OK
|
MSI |
MS-7135 (K8N Neo3) |
-m msi:k8n-neo3 |
OK
|
|
Vendor
|
Mainboard
|
Required option
|
Status
|
MSI |
MS-6702E (K8T Neo2-F) |
— |
OK
|
MSI |
MS-6712 (KT4V) |
-m msi:kt4v |
OK
|
MSI |
MS-6590 (KT4 Ultra) |
-m msi:kt4ultra |
OK
|
MSI |
MS-7046 |
— |
OK
|
Tyan |
S2498 (Tomcat K7M) |
— |
OK
|
VIA |
EPIA-CN |
— |
OK
|
VIA |
EPIA M/MII/... |
— |
OK
|
VIA |
EPIA SP |
— |
OK
|
VIA |
PC3500G |
-m via:pc3500g |
OK
|
|
Not supported (yet)
Total amount of boards: 19
Supported programmers
This is a list of supported PCI devices flashrom can use as programmer:
Vendor
|
Device
|
PCI IDs
|
Status
|
3COM |
3C90xB: PCI 10/100 Mbps; shared 10BASE-T/100BASE-TX |
10b7:9055 |
OK
|
3COM |
3C90xB: PCI 10/100 Mbps; shared 10BASE-T/100BASE-T4 |
10b7:9001 |
?
|
3COM |
3C90xB: PCI 10BASE-T (TPO) |
10b7:9004 |
?
|
3COM |
3C90xB: PCI 10BASE-T/10BASE2/AUI (COMBO) |
10b7:9005 |
?
|
3COM |
3C90xB: PCI 10BASE-T/10BASE2 (TPC) |
10b7:9006 |
?
|
3COM |
3C90xB: PCI 10BASE-FL |
10b7:900a |
?
|
3COM |
3C90xB: PCI 10BASE-FX |
10b7:905a |
?
|
3COM |
3C905B: Cyclone 10/100/BNC |
10b7:9058 |
OK
|
3COM |
3C905C: EtherLink 10/100 PCI (TX) |
10b7:9200 |
OK
|
3COM |
3C980C: EtherLink Server 10/100 PCI (TX) |
10b7:9805 |
?
|
Silicon Image |
PCI0680 Ultra ATA-133 Host Ctrl |
1095:0680 |
OK
|
Silicon Image |
SiI 3114 [SATALink/SATARaid] SATA Ctrl |
1095:3114 |
OK
|
Silicon Image |
SiI 3124 PCI-X SATA Ctrl |
1095:3124 |
?
|
Silicon Image |
SiI 3132 SATA Raid II Ctrl |
1095:3132 |
OK
|
Silicon Image |
SiI 3512 [SATALink/SATARaid] SATA Ctrl |
1095:3512 |
?
|
Board notes
Supported laptops/notebooks
In general, flashing laptops is more difficult because
- Laptops often use the flash chip for stuff besides the BIOS.
- Laptops often have special protection stuff which has to be handled by flashrom.
- Laptops often use flash translation circuits which need extra drivers in flashrom.
IMPORTANT: At this point we recommend to not use flashrom on untested laptops unless you have a means to recover from a flashing that goes wrong (a working backup flash chip and/or good soldering skills).
Known-good
Known-bad
Vendor
|
Model
|
Status
|
IBM/Lenovo
|
Thinkpad T40p
|
No
|
IBM/Lenovo
|
240
|
No
|
Acer
|
Aspire One
|
No1
|
1 http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html
Download & Installation
If you just want to browse the source code, please go to http://code.coreboot.org/p/flashrom/source/tree/HEAD/trunk.
Requirements:
- pciutils development package (pciutils-dev/libpci-dev/pciutils-devel, depending on OS/distribution)
- zlib development package (zlib1g-dev/zlib-devel, depending on OS/distribution)
- subversion (if you checkout the source and build manually)
Manual Installation From Source:
$ svn co svn://coreboot.org/flashrom/trunk flashrom
$ cd flashrom
$ make
$ sudo make install
Binary Packages:
- Debian: sudo aptitude install flashrom
- Fedora: sudo yum install flashrom
- Gentoo: emerge flashrom
- Mandriva: urpmi flashrom
- openSUSE: yast -i coreboot-utils
- T2 SDE
- Installation from source: Emerge-Pkg flashrom
- Installation of binaries: mine -i flashrom-0.9.0.tar.bz2
- FreeBSD: cd /usr/ports/sysutils/flashrom && make install clean
- Windows: There is a Windows port of the flashrom utility. Download the latest version: DarmawanMappatutu_Salihun.tar.gz.
Usage
Please see the flashrom(8) manpage.
Fully testing flashrom chip/southbridge/mainboard support
See this page for instructions on how to test flashrom properly (this may be risky, make sure you have a working backup flash chip).
Flashrom Live CD
Flashrom Live CD
Flash chip overview
Modern mainboards store the BIOS in a reprogrammable flash chip. There are hundreds of different flash (EEPROM) chips, with variables such as memory size, speed, communication bus (Parallel, LPC, FWH, SPI) and packaging to name just a few.
Packaging/housing/form factor
Probably the only property of flash chips which is completely irrelevant to flashrom. The three most common packages are called DIP, PLCC and TSOP. The BIOS copyright holders often place a fancy sticker on the BIOS chip showing a name or logo, BIOS version, serial number and copyright notice.
DIP32: Dual In-line Package, 32 pins
A rectangular black plastic block with 16 pins along each of the two longer sides of the package (32 pins in total). DIP32 chips can be socketed which means they are detachable from the mainboard using physical force. Since they haven't been moved in and out of the socket very much (yet, hehe) they can appear to be quite difficult to release from the socket. One way to remove a DIP32 chip from a socket is by prying a thin screwdriver in between the plastic package and the socket, along the shorter sides where there are no pins, and then gently bending the screwdriver to push the chip upwards, away from the mainboard. Alternate between the two sides to avoid bending the pins, and don't touch any of the pins with the screwdriver (see FAQ about ESD, electro-static discharge). If the chip is soldered directly to the mainboard, it has to be desoldered in order to be reprogrammed outside the mainboard. If you do this, it's a good idea to solder a socket to the mainboard instead, to ease any future experiments.
PLCC32: Plastic Leaded Chip Carrier, 32 pins
Black plastic block again, but this one is much more square. PLCC32 was becoming the standard for mainboards after DIP32 chips because of it's smaller physical size. PLCC can also be socketed or soldered directly to the mainboard. Socketed PLCC32 chips can be removed using a special PLCC removal tool', or using a piece of nylon line tied in a loop around the chip and pulled swiftly straight up, or bending/prying using small screwdrivers if one is careful. PLCC32 sockets are often fragile so the screwdriver approach is not recommended. While the nylon line method sounds strange it works well. Desoldering PLCC32 can be painful without specialized desoldering equipment particularly because PLCC32 chips have leads on all four sides of the package, but it's certainly doable.
DIP8: Dual In-line Package, 8 pins
SO8/SOIC8: Small-Outline Integrated Circuit, 8 pins
TSOP: Thin Small-Outline Package
TSOPs are often used in embedded systems where size is important and there is no need for replacement in the field. It is possible to (de)solder TSOPs by hand, but it's not trivial and a reasonable amount of soldering skills are required.
Communication bus protocol
There are four major communication bus protocols for flash chips, each with multiple subtle variants in the command set:
- Parallel: The oldest flash bus, phased out on mainboards around 2002.
- LPC: Low Pin Count, a standard introduced ca. 1998.
- FWH: Firmware Hub, a variant of the LPC standard introduced at the same time. FWH is a special case variant of LPC with one bit set differently in the memory read/write commands. That means some data sheets mention the chips speak LPC although they will not respond to regular LPC read/write cycles.
- SPI: Serial Peripheral Interface, introduced ca. 2006.
Here's an attempt to create a marketing language -> chip type mapping:
- JEDEC Flash -> Parallel (well, mostly)
- FWH -> FWH
- Firmware Hub -> FWH
- LPC Firmware -> FWH
- Firmware Memory -> FWH
- Low Pin Count (if Firmware/FWH is not mentioned) -> LPC
- LPC (if Firmware is not mentioned) -> LPC
- Serial Flash -> SPI
SST data sheets have the following conventions:
- LPC Memory Read -> LPC
- Firmware Memory Read -> FWH
If both are mentioned, the chip supports both.
If you're not sure about whether a device is LPC or FWH, look at the read/write cycle definitions.
FWH
Clock Cycle |
Field Name |
Field contents |
Comments
|
1 |
START |
1101/1110 |
1101 for READ, 1110 for WRITE.
|
2 |
IDSEL |
0000 to 1111 |
IDSEL value to be shifted out to the chip.
|
3-9 |
IMADDR |
YYYY |
The address to be read/written. 7 cycles total == 28 bits.
|
10+ |
...
|
LPC
Clock Cycle |
Field Name |
Field contents |
Comments
|
1 |
START |
0000
|
2 |
CYCLETYPE+DIRECTION |
010X/011X |
010X for READ, 011X for WRITE. X means "reserved".
|
3-10 |
ADDRESS |
YYYY |
The address to be read/written. 8 cycles total == 32 bits.
|
11+ |
...
|
Generally, a parallel flash chip will not speak any other protocols. SPI flash chips also don't speak any other protocols. LPC flash chips sometimes speak FWH as well and vice versa, but they will not speak any protocols besides LPC/FWH.
|
|
|