|
|
(51 intermediate revisions by 5 users not shown) |
Line 1: |
Line 1: |
| {{DISPLAYTITLE:serprog}} | | {{#externalredirect: https://www.flashrom.org/supported_hw/supported_prog/serprog/overview.html}} |
| This page is a first draft only and serves to collect information about the serprog protocol and the programmers implementing it.
| |
| | |
| = Protocol =
| |
| | |
| See [http://flashrom.org/trac/flashrom/browser/trunk/Documentation/serprog-protocol.txt serprog-protocol.txt] in the source tree. It is designed to be compact and allow efficient storage in limited memory of programmer devices.
| |
| | |
| = Hardware =
| |
| | |
| == AVR flasher by Urja Rannikko ==
| |
| | |
| [[File:Avr rs232 programmer.jpg|thumb|right|Prototype RS232 AVR parallel flash programmer]]
| |
| | |
| The [http://www.randomprojects.org/wiki/Prototype_RS232_AVR_parallel_flash_programmer Prototype RS232 AVR parallel flash programmer] Urja Rannikko was the first implementation of the serprog protocol.
| |
| | |
| FIXME: AVR source code is somewhere in the coreboot mailing list archives...
| |
| | |
| == AVR flasher by eightdot ==
| |
| | |
| FIXME: Link?
| |
| | |
| == Arduino Mega flasher by fritz ==
| |
| | |
| [http://www.flashrom.org/pipermail/flashrom/2010-May/003250.html]
| |
| [http://www.coldelectrons.com/blog/?page_id=165]
| |
| [http://www.coldelectrons.com/blog/wp-content/uploads/2010/05/flashprg.txt]
| |
| FIXME: More info?
| |
| | |
| == InSystemFlasher by Juhana Helovuo ==
| |
| This is one talks to SPI devices via serial over USB. Details can be found in the [http://www.coreboot.org/InSystemFlasher coreboot wiki] and in this [http://www.coreboot.org/pipermail/coreboot/2011-February/063349.html coreboot mailing list thread].
| |
| | |
| == atmegaXXu2-flasher by Stefan Tauner ==
| |
| Like the InSystemFlasher this one uses LUFA on an AVR microcontroller to tunnel the serial data over USB.
| |
| [[File:atmegaXXu2-flasher.jpg|200px|thumb|right|atmegaXXu2-flasher with Pomona SOIC hook attached]]
| |
| | |
| == Arduino flasher by GNUtoo ==
| |
| '''WARNING, I heard that the SPI levels were at 5V, while I tried it with 3.3V chip and that it worked, it may not work for you and break the chip...'''
| |
| | |
| This flasher require the following hardware parts:
| |
| * An arduino uno or an arduino Duemilanove(way faster) and its usb cable
| |
| * some wires(optionally some connectors to solder on(for easier plugin and more reliability)
| |
| * <s>a 10k resistor</s>
| |
| * A flash chip with the following characteristics:
| |
| ** supported by flashrom
| |
| ** SPI
| |
| ** 3.3v or 5v(the arduino has a 3.3v and a 5v output, only 3.3v was tested...)
| |
| | |
| === Pictures ===
| |
| <gallery caption="Pictures " widths="250px" heights="250px" perrow="4">
| |
| File:Serprog_0001.jpeg
| |
| File:Serprog_0002.jpeg
| |
| File:Serprog_0003.jpeg
| |
| File:Serprog_0004.jpeg
| |
| File:Serprog_0005.jpeg
| |
| File:Serprog_0006.jpeg
| |
| File:Serduino_laptop.jpeg| Because of the long cables flashrom had to retry once before reflashing the BIOS but at the end it worked. So don't use cables that are that long...
| |
| File:W1qtO.jpg| Setup by Sebastian Parborg (DarkDefender)
| |
| File:Arduino_topview_noresistor.jpeg| It now seem to also work without resistor...
| |
| </gallery>
| |
| | |
| === Building ===
| |
| | |
| Left pins of the BIOS chip:
| |
| --------------------------------------------------------
| |
| [pin1 of the bios chip] /CS<->10k resistor<->VCC
| |
|
| |
| [pin1 of the bios chip] /CS<->Arduino pin10(SS, PORTB2)
| |
| [pin2 of the bios chip] DO<->Arduino pin12(MISO, PORTB4)
| |
| [pin3 of the bios chip] /WP<->VCC
| |
| [pin4 of the bios chip] GND<->GND on the power pins
| |
|
| |
| Right pins of the BIOS chip:
| |
| --------------------------------------------------------
| |
| [pin8 of the bios chip] VCC<->+3.3V on the power pins of the Arduino
| |
| [pin7 of the bios chip] /HOLD<->VCC
| |
| [pin6 of the bios chip] CLK<->Arduino pin13(SCK, PORTB5)
| |
| [pin5 of the bios chip] DIO<->Arduino pin11(MOSI, PORTB3)
| |
|
| |
| The Bios chip used is a W25X80.
| |
| The Arduino is an arduino uno.
| |
| | |
| === Software ===
| |
| ==== Settings ====
| |
| {| class="wikitable" border="1"
| |
| !git branch
| |
| !Compatible Arduino version
| |
| !flashrom arguments
| |
| !Comments
| |
| |-
| |
| | master
| |
| |
| |
| * Arduino uno
| |
| | -p serprog:dev=/dev/ttyACM0:2000000
| |
| |
| |
| * reliability issues (flashrom blocks waiting for data from the arduino indefinitely) with the code that is in the 8u2/16u2 beeing investigated...
| |
| |-
| |
| | ftdi
| |
| |
| |
| * Arduino Duemilanove
| |
| * Arduino uno with an external FTDI serial<->usb adapter or any other kind of adapter capable of 2000000 bps
| |
| | -p serprog:dev=/dev/ttyUSB0:2000000
| |
| |
| |
| * Works flawlessly
| |
| * Very fast
| |
| |-
| |
| |}
| |
| | |
| ==== Performances ====
| |
| # time flashrom -p serprog:dev=/dev/ttyACM0:2000000 -r coreboot.rom
| |
| flashrom v0.9.5.2-r1541 on Linux 2.6.38-14-generic (x86_64)
| |
| flashrom is free software, get the source code at http://www.flashrom.org
| |
|
| |
| Calibrating delay loop... OK.
| |
| serprog: Programmer name is "serprog-duino"
| |
| Found Winbond flash chip "W25X80" (1024 kB, SPI) on serprog.
| |
| Reading flash... done.
| |
|
| |
| real 0m16.602s
| |
| user 0m0.930s
| |
| sys 0m0.000s
| |
| | |
| # time flashrom -p serprog:dev=/dev/ttyACM0:2000000 -w build/coreboot.rom
| |
| flashrom v0.9.5.2-r1541 on Linux 2.6.38-14-generic (x86_64)
| |
| flashrom is free software, get the source code at http://www.flashrom.org
| |
|
| |
| Calibrating delay loop... OK.
| |
| serprog: Programmer name is "serprog-duino"
| |
| Found Winbond flash chip "W25X80" (1024 kB, SPI) on serprog.
| |
| Reading old flash chip contents... done.
| |
| Erasing and writing flash chip... Erase/write done.
| |
| Verifying flash... VERIFIED.
| |
|
| |
| real 0m39.548s
| |
| user 0m2.650s
| |
| sys 0m0.000s
| |
| | |
| ==== Required software ====
| |
| To make it work you need:
| |
| * flashrom from svn
| |
| * [https://gitorious.org/gnutoo-personal-arduino-projects/serprog-duino serprog-duino which runs on the arduino]
| |
| * The avr toolchain(avr-gcc, avr-libc,make etc...)
| |
| ==== Building the software ====
| |
| $ svn co svn://flashrom.org/flashrom/trunk flashrom
| |
| $ cd flashrom && make
| |
| $ cd ../
| |
| $ git clone git://gitorious.org/gnutoo-personal-arduino-projects/serprog-duino.git
| |
| $ cd serprog-duino && make && make upload
| |
| | |
| ==== Running flashrom ====
| |
| ./flashrom -p serprog:dev=/dev/ttyACM0:2000000
| |
| | |
| === Advantages and disadvantages ===
| |
| * <s>The speed isn't that great(about 3 minutes for reading+writing+verifying a 1M chip)</s>
| |
| * The speed is now much better thanks to a patch by Sebastian Parborg.
| |
| * it is made of very commonly available parts(if you can find an arduino uno, you will be able to build it).
| |