Serprog: Difference between revisions

From flashrom
Jump to navigation Jump to search
(Replaced content with "{{#externalredirect: https://www.flashrom.org/supported_hw/supported_prog/serprog/overview.html}}")
Tag: Replaced
 
(52 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).

Latest revision as of 09:04, 21 May 2024