Reading, writing, verifying, erasing flash chips

Technologies
c, x86, bios, rom, spi
Topics
hardware, drivers, firmware, flash chips, low level programming
Reading, writing, verifying, erasing flash chips
Flashrom is a utility for identifying, reading, writing, verifying and erasing flash chips. It is designed to flash BIOS/EFI/coreboot/firmware/optionROM images on mainboards, network/graphics/storage controller cards, and various other programmer devices. + Supports more than 476 flash chips, 291 chipsets, 500 mainboards, 79 PCI devices, 17 USB devices and various parallel/serial port-based programmers. + Supports parallel, LPC, FWH and SPI flash interfaces and various chip packages (DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, TSOP40, TSOP48, BGA and more) + No physical access needed, root access is sufficient (not needed for some programmers). + 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 DOS, Linux, FreeBSD (including Debian/kFreeBSD), NetBSD, OpenBSD, DragonFlyBSD, anything Solaris-like, Mac OS X, and other Unix-like OSes as well as GNU Hurd. Partial Windows support is available (no internal programmer support at the moment, hence no "BIOS flashing").
2022 Program

Successful Projects

Contributor
Aarya
Mentor
Thomas Heijligen, Simon_B
Organization
Flashrom
GSoC Project Proposal for Flashrom
The write operation in flash can only change bits in a specific way and the erase operation changes all the bits of a block to 1s. So to modify any...