|
|
(41 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
| == Introduction ==
| | {{#externalredirect: https://www.flashrom.org/supported_hw/supported_prog/serprog/arduino_flasher_3.3v.html }} |
| This explains how to:
| |
| * Easily lower the voltage of an arduino
| |
| * Use that arduino to flash a coreboot image on a GM45 Thinkpad with a SOIC16 chip
| |
| | |
| It requires:
| |
| * An AVR Arduino at 5v
| |
| * An USB<->Serial adapter capable of providing enough current to power up:
| |
| ** The arduino
| |
| ** The flash chip
| |
| ** The circuits around the flash chip
| |
| | |
| It was tested with:
| |
| * An Arduino.org "nano version 3.3"
| |
| * A Sparkfun "FTDI Basic 3v3" (Uses an FTDI FT232R)
| |
| | |
| == Theory ==
| |
| In the [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf Atmega328/P datasheet], the "32.3. Speed Grades" chapter describes (pages 368 and 369) the link between maximum frequency of the microcontroller and the voltage. At 3.3v, the maximum frequency is 12Mhz.
| |
| | |
| == HOWTO ==
| |
| First download frser-duino:
| |
| git clone --recursive https://github.com/urjaman/frser-duino.git
| |
| Then modify the F_CPU value in main.h to be 12Mhz instead of 16Mhz:
| |
| F_CPU will look like that:
| |
| #define F_CPU 16000000UL
| |
| Change it to:
| |
| #define F_CPU 12000000UL
| |
| * Flash the Arduino with frser-duino
| |
| # make ftdi
| |
| # make flash-ftdi
| |
| * Connect the FTDI adapter to RX and TX of the arduino
| |
| * Connect the 3V3 of the FTDI adapter to the 5V pin of the Arduino
| |
| * Connect the GND of the FTDI adapter to the GDN of the arduino.
| |
| * Get an USB cable and don't connect it to the computer
| |
| * Connect it to the FTDI adapter
| |
| * If you use a clip (Like a SOIC-8 or SOIC16 Pomona clip), connect it to the arduino
| |
| * Connect the chip to the clip, or if you don't use a clip, the chip to the arduino
| |
| * Connect the USB cable to the computer.
| |
| | |
| == Flashing ==
| |
| * Run flashrom like that:
| |
| flashrom -p serprog:dev=/dev/ttyUSB0:115200
| |
| | |
| == Research and thanks ==
| |
| * At 3.3V setup doesn't work with frser-duino default settings (make ftdi && make flash-ftdi)
| |
| * Thanks a lot to SwiftGeek on IRC (#libreboot on Freenode) for finding and explaning to me how to workaround it
| |
| * I still need to understand why it works when lowering the clock, it is probably related to the crystal. I need to look in the atmega328P datasheet to understand.
| |