Go Down

Topic: Flashing a sketch from SD card using 2boot bootloader (Read 36704 times) previous topic - next topic


Hi, I am very interested in this project and I would like to get involved.  In addition make it compatible with the 2560.  Can someone tell me where it currently stands what the latest builds are etc?


I haven't had time to write it up yet, but I can send you a zip with the code. What Chip select are you using for the SD card?
Unique Mui Ne Resort


I am using a 2560v running at 8Mhz so the whole board is running at 3.3v so I have no level shifter.  The SD card is connected directly to the SPI lines.

My board is one of these with an W5200 Ethernet module attached. (Same way as the W5100)


Over a year ago there was interest in a very small SD read program as the base for a boot loader.  I wrote the attached program which may be useful.

It is FAT16 only for standard (2GB or less) SD cards.

I estimate the size is about 1200 bytes.

It has two functions
Code: [Select]

bool fileOpen(uint8_t* dirName);
int fileRead();

dirName is the filename in directory format, 11 bytes with blank fill like this.
Code: [Select]

  // open TEST.BIN
  if (!fileOpen((uint8_t*)"TEST    BIN")) {
    // open failed

fileRead() reads a single byte or returns -1 for error or EOF.

The programs are packaged as a library.  Try the examples.

You must be logged in to download the attached zip file.


My goal is to place a sketch on the SD Card and run program that sketch to the chip itself or run the sketch off the chip.  travelvietnam I am using pin 53 as chip select for the SD


hello everyone,
i'm trying to do something similar to this by uploading a sketch from an external memory.
my goal is to rewrite the bootloader that started in this post, with osbock, and make it first compile under atmel studio (i hade to change some global variables to constants...).

finally i've succeeded compiling that bootloader under atmel studio and now i have a few  quwstions please:

1) this bootloader can't upload .hex file at all and specifically from the arduino ide, correct? if so why not?
2) if i want that bootloader to upload only sketches with the correct name (app.bin or lets say app.hex) will it check for changes? on restart and program the sketch only if it's new? if not why?
3) if i won't to do the same thing but from external flash chip, on a breadboard and make the bootloader check whether there is a "new" file on the uSD or ext. Flash, what changes are needed? any reference?

4) what are the correct numbers for this bootloader on arduino mega 2560 with sparkfun micro-sd shield (not eth') (speed, legs CS etc, memory addresses... etc)

thank you,


hello, where is the current stand of this project?


I think the project has somewhat stalled.  I have tried to message the original contributors with no results.  :(


What a pity this has stalled. Just what I was looking for :(


Sep 18, 2013, 12:17 pm Last Edit: Sep 18, 2013, 12:43 pm by willie1968 Reason: 1

What a pity this has stalled. Just what I was looking for :(

I think, it was stalled, but then i found this.
The thread owner has found a way to make it work.
His changes are on his own github repository...
und Tschoe


Hi, I am serching for some info about this quite a long time. And still I am not sure which project is actualy working or how to use it. Could somebody help me, give me some clues and summarize the situation. thx



because of the problems (only FAT16 and endless loop with FAT32 sd card in on boot) with the 2boots bootloader, i switched to the avr_boot. (https://github.com/osbock/avr_boot)
I have made some changes for my project.
The main differences between 2boot and avr_boot:

  • booting only from sd card. No serial option

  • booting from SDHC possible, FAT32 and FAT16

  • much bigger, about 4kb...

  • no support for hex file, you need to convert the hex file into a binary file

my changes: (you can find it in https://github.com/willie68/OpenSeaMapLogger/tree/master/bootloader/avr_boot-master)

  • desired platform ATMega328P with attached SD Card standard connection (MOSI, MISO...)

  • names of firmware files will be OSMFWxxx.BIN, will be programmed, if xxx > EEPROM-Version number. If no EEPROM Version number is present 12 is the magic number. if not, file will be ignored. The next version must be within 10 version numbers. (Files will be testet from EEPROM Version + 10 down to EEPROM Version + 1) if nothing is found at last a file name OSMFIRMW.BIN will be testet and programmed, if present.

  • In the firmware setup routine the actual version is written into the EEPROM.

  • a small java program helps to convert the hex file to a bin file.

und Tschoe


Hello forum,

I finally managed to write the bootloader to my atmega 328p (with some help of a friend to compile it) and ran into the next problem. what format the file on the sd card must have? what must i do with the .ino file to make the thing work.

Thanks in advance for your answers, Michael


Which bootloader?
Some prefer hex files (which the arduino IDE already generate, look into the build folder in the temp folder.), my avr_boot needs a binary file, so i must convert the hex file into a binary version...
und Tschoe


Hi all,

just a short message to thanks everybody that contribute to release avr_boot.

After a long time and many tries, I find the right flow to be able to burn the new boot loader on an atmega328p dip28 and load the blink example project into the avr from a 512Mo SD card:

- get the github from

- check your hardware SD <-> Arduino with avr_boot-master/asmfunc.S

- make

- burn fuse
avrdude -p atmega328p -c usbasp -P usb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m

- burn boot loader
avrdude -p atmega328p -c usbasp -P usb -U flash:w:avr_boot-master/avr_boot.hex:i -Ulock:w:0x0F:m

- compile blink project

- find the compiled file
find $TMPDIR -name Blink.cpp.elf

- convert hex to binary
avr-objcopy -O binary Blink.cpp.elf OSMFIRMW.BIN

- plug the SD card and wait the reboot (it may take long time)

Go Up