Arduino flasher 3.3v

From flashrom
Revision as of 10:32, 27 February 2018 by GNUtoo (talk | contribs) (→‎Theory)
Jump to navigation Jump to search

This wiki is retired

Our website is https://www.flashrom.org, instructions on how to add or update documentation are here

All wiki content available in read-only mode at wiki.flashrom.org

Introduction

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 Atmega328/P datasheet, the "32.3. Speed Grades" chapter describes 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.