💬 Various bootloader files based on Optiboot 6.2
-
@GertSanders
Thank you for the file, however I have some troubles, I can flash via USBtiny but I am not able to upload sketch via Arduino IDE+ FTDI,
will you check my settings are correct?Here is my boards.txt file for the optiboot
##############################################################pro328opti.name=BJa BOD 1,8V Optiboot, Arduino Pro Mini (3.3V, 8 MHz) w/ ATmega328
pro328opti.upload.protocol=arduino
pro328opti.upload.maximum_size=30720
pro328opti.upload.speed=4800pro328opti.bootloader.low_fuses=0x77
pro328opti.bootloader.high_fuses=0xDF
pro328opti.bootloader.extended_fuses=0x06
pro328opti.bootloader.path=optiboot
pro328opti.bootloader.file=1457256062840-optiboot_atmega328_x8m1_004800_b5.hex
pro328opti.bootloader.unlock_bits=0x3F
pro328opti.bootloader.lock_bits=0x0F
pro328opti.build.mcu=atmega328p
pro328opti.build.f_cpu=8000000L
pro328opti.build.core=arduino
pro328opti.build.variant=standard -
@GertSanders
Thank you for the file, however I have some troubles, I can flash via USBtiny but I am not able to upload sketch via Arduino IDE+ FTDI,
will you check my settings are correct?Here is my boards.txt file for the optiboot
##############################################################pro328opti.name=BJa BOD 1,8V Optiboot, Arduino Pro Mini (3.3V, 8 MHz) w/ ATmega328
pro328opti.upload.protocol=arduino
pro328opti.upload.maximum_size=30720
pro328opti.upload.speed=4800pro328opti.bootloader.low_fuses=0x77
pro328opti.bootloader.high_fuses=0xDF
pro328opti.bootloader.extended_fuses=0x06
pro328opti.bootloader.path=optiboot
pro328opti.bootloader.file=1457256062840-optiboot_atmega328_x8m1_004800_b5.hex
pro328opti.bootloader.unlock_bits=0x3F
pro328opti.bootloader.lock_bits=0x0F
pro328opti.build.mcu=atmega328p
pro328opti.build.f_cpu=8000000L
pro328opti.build.core=arduino
pro328opti.build.variant=standardAs you use the clock divider, you should inform the Arduino IDE that the processor is running slower.
So you need to set this:
pro328opti.build.f_cpu=1000000L
-
Sounds like good idea :-) Thanks
now the board.tx file is updated: pro328opti.build.f_cpu=1000000L
restart Arduino, but still get upload errors
Error messages:
Binary sketch size: 1,102 bytes (of a 30,720 byte maximum)
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
I feel it's an unlucky Sunday... Can you provide more ideas what I can do? -
Sounds like good idea :-) Thanks
now the board.tx file is updated: pro328opti.build.f_cpu=1000000L
restart Arduino, but still get upload errors
Error messages:
Binary sketch size: 1,102 bytes (of a 30,720 byte maximum)
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
I feel it's an unlucky Sunday... Can you provide more ideas what I can do?Not sure, but an out of sync message is usually because of a mismatch in speed between what the IDE en avrdude expect, and what the cpu does.
So I would check the fuses of the cpu to be sure. I will try this boot loader on one of my nodes to see if the boot loader itself is the problem. -
@GertSanders I installed your compiled bootloaders - thanks for compiling them, but I cannot compile a Blink sketch using 1Mhz internal one
Board GertSanders:avr:atmega328pO5M16c doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328PO5M16C Board GertSanders:avr:atmega328pO5M8c doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328PO5M8C Board breadboard:avr:atmega328bb doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328BB WARNING: Category '' in library UIPEthernet is not valid. Setting to 'Uncategorized' Build options changed, rebuilding all In file included from sketch\Blink.ino.cpp:1:0: C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:249:26: fatal error: pins_arduino.h: No such file or directory #include "pins_arduino.h" ^ compilation terminated. exit status 1 Error compiling.``` -
@GertSanders I installed your compiled bootloaders - thanks for compiling them, but I cannot compile a Blink sketch using 1Mhz internal one
Board GertSanders:avr:atmega328pO5M16c doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328PO5M16C Board GertSanders:avr:atmega328pO5M8c doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328PO5M8C Board breadboard:avr:atmega328bb doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328BB WARNING: Category '' in library UIPEthernet is not valid. Setting to 'Uncategorized' Build options changed, rebuilding all In file included from sketch\Blink.ino.cpp:1:0: C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:249:26: fatal error: pins_arduino.h: No such file or directory #include "pins_arduino.h" ^ compilation terminated. exit status 1 Error compiling.```My boards.txt file is pointing to a location you are not using.
You have your library in a different place then I.
You should make sure that the directory in which you put the variant matches with what you have. I can not know which directory you put the Arduino IDE, so matching this is an exercise for you ;-)
In my case, my variants boards is here:
\Dropbox\Arduino\hardware\atmega328p\avr\variants\BlueBoard\pins_arduino.h
This is matched with the fact that my boards file is here:
\Dropbox\Arduino\hardware\atmega328p\avr\boards.txt
Within the boards.txt file, I'm referring to the following variant: "BlueBoard". This is done here:
BlueBoard.build.core=arduino:arduino
BlueBoard.build.mcu=atmega328pBlueBoard.build.board=AVR_GERTSANDERSBLUEBOARD
BlueBoard.build.variant=BlueBoardYou seem to have a different path:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino
I'm not sure where you added my files or boards.txt, but do not just copy it. You need to adapt your boards.txt file.
My "hardware" directory is within the Arduino sketch directory and contains this:

All my boot loaders are in directory "bootloaders\myoptiboot":

the file pins_arduino.h is a pins layout file for a standard atmega328p (copied from the "standard" variant directory.
If you have a pro micro with the flat atmega328p, you need to use the "eightanaloginputs" variant.
This is what it looks like in my Arduino IDE installation directory:

-
My boards.txt file is pointing to a location you are not using.
You have your library in a different place then I.
You should make sure that the directory in which you put the variant matches with what you have. I can not know which directory you put the Arduino IDE, so matching this is an exercise for you ;-)
In my case, my variants boards is here:
\Dropbox\Arduino\hardware\atmega328p\avr\variants\BlueBoard\pins_arduino.h
This is matched with the fact that my boards file is here:
\Dropbox\Arduino\hardware\atmega328p\avr\boards.txt
Within the boards.txt file, I'm referring to the following variant: "BlueBoard". This is done here:
BlueBoard.build.core=arduino:arduino
BlueBoard.build.mcu=atmega328pBlueBoard.build.board=AVR_GERTSANDERSBLUEBOARD
BlueBoard.build.variant=BlueBoardYou seem to have a different path:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino
I'm not sure where you added my files or boards.txt, but do not just copy it. You need to adapt your boards.txt file.
My "hardware" directory is within the Arduino sketch directory and contains this:

All my boot loaders are in directory "bootloaders\myoptiboot":

the file pins_arduino.h is a pins layout file for a standard atmega328p (copied from the "standard" variant directory.
If you have a pro micro with the flat atmega328p, you need to use the "eightanaloginputs" variant.
This is what it looks like in my Arduino IDE installation directory:

@GertSanders said:
I'm not sure where you added my files or boards.txt, but do not just copy it. You need to adapt your boards.txt file.
That's what I did - I adopted your boards.txt
All my bootloaders are in the hardware directory (C:\Users\Alex\Documents\Arduino\hardware). The hardware directory is located together with all my sketches in the Arduino directory. Now, for whatever reason, the error is point out to the completely different location:C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino
-
@GertSanders OK, I sorted it out.
I had to create "BlueBoard" and "standard" under "variants" and copy two corresponding files pins_arduino.h
At least I can compile now.Will try to upload a sketch later on and see if it works.
-
@GertSanders Unfortunately, I was able to upload the bootloader, but was not able to upload any sketches on the breadboard:
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78 avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xc0 avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x78Not sure why - I can upload a sketch via the programmer though. Will upload Nick Gammon sketch to test the bootloader.
UPDATE1: Nick Gammon's sketch cannot detect the bootloader (tried 1MHz internal). Once again, I uploaded the bootloader (1Mhz internal) and the sketch via the programmer and it works, but....the serial monitor works only on 74880, despite for "1Mhz internal" boards.txt clearly says "9600":
BlueBoard.menu.mhz.1Mi= 1Mhz - internal - 9K6 upload speed BlueBoard.menu.mhz.1Mi.bootloader.low_fuses=0xE2 BlueBoard.menu.mhz.1Mi.bootloader.high_fuses=0xDE BlueBoard.menu.mhz.1Mi.build.f_cpu=1000000L BlueBoard.menu.mhz.1Mi.upload.speed=9600 BlueBoard.menu.mhz.1Mi.bootloader.file=myoptiboot/optiboot_atmega328_01M_009600_B0.hexAdditionally, I loaded the ASCIITable example sketch and it states " Serial.begin(9600);"
I do not understand why it works only on 74880... -
@GertSanders Unfortunately, I was able to upload the bootloader, but was not able to upload any sketches on the breadboard:
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78 avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xc0 avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x78Not sure why - I can upload a sketch via the programmer though. Will upload Nick Gammon sketch to test the bootloader.
UPDATE1: Nick Gammon's sketch cannot detect the bootloader (tried 1MHz internal). Once again, I uploaded the bootloader (1Mhz internal) and the sketch via the programmer and it works, but....the serial monitor works only on 74880, despite for "1Mhz internal" boards.txt clearly says "9600":
BlueBoard.menu.mhz.1Mi= 1Mhz - internal - 9K6 upload speed BlueBoard.menu.mhz.1Mi.bootloader.low_fuses=0xE2 BlueBoard.menu.mhz.1Mi.bootloader.high_fuses=0xDE BlueBoard.menu.mhz.1Mi.build.f_cpu=1000000L BlueBoard.menu.mhz.1Mi.upload.speed=9600 BlueBoard.menu.mhz.1Mi.bootloader.file=myoptiboot/optiboot_atmega328_01M_009600_B0.hexAdditionally, I loaded the ASCIITable example sketch and it states " Serial.begin(9600);"
I do not understand why it works only on 74880...I will do some testing tonight, I have not used the 1MHz bootloader yet.
The instruction Serial.begin(9600) is independant of the upload.speed mentioned in the boards file. But I would expect that at 1MHz the higher serial comms speeds also give errors.
A possible reason for the problem, is that the fuse E2 actually means that you run the processor at 8Mhz internally, but without any clock division, while the bootloader was compiled for 1MHz. Without clock division by 8 the processor actually runs at 8Mhz (the speed of the internal oscillator), while all timing code is set for a cpu working frequency of 1Mhz. This would also explain why you can communicate at 74880 (which is close to 76800, which in turn is 8 times 9600).
I think the fuse should be set to both internal 8MHz oscillator AND clock division by 8. I do not know that correct value by hart, need to check that with a fuse calculator.
UPDATE: I think the lower fuse should be set to 0x62 instead of 0xE2.
-
OK, I have come to the following fuse settings for 1Mhz internal:
BlueBoard.menu.mhz.1Mi.bootloader.low_fuses=0x62 BlueBoard.menu.mhz.1Mi.bootloader.high_fuses=0xDEFor Optiboot, the high fuse is always 0xDE.
Now, a standard example sketch runs at 9600 - I have not checked if atmega328p is running at 1Mhz.Still have a problem uploading a sketch on the breadboard via FTDI
-
OK, I have come to the following fuse settings for 1Mhz internal:
BlueBoard.menu.mhz.1Mi.bootloader.low_fuses=0x62 BlueBoard.menu.mhz.1Mi.bootloader.high_fuses=0xDEFor Optiboot, the high fuse is always 0xDE.
Now, a standard example sketch runs at 9600 - I have not checked if atmega328p is running at 1Mhz.Still have a problem uploading a sketch on the breadboard via FTDI
I will do some tests later tonight.
-
OK, I have come to the following fuse settings for 1Mhz internal:
BlueBoard.menu.mhz.1Mi.bootloader.low_fuses=0x62 BlueBoard.menu.mhz.1Mi.bootloader.high_fuses=0xDEFor Optiboot, the high fuse is always 0xDE.
Now, a standard example sketch runs at 9600 - I have not checked if atmega328p is running at 1Mhz.Still have a problem uploading a sketch on the breadboard via FTDI
I just loaded a blink sketch at 4800 baud using FTDI and that works with the following combination:
Boot loader:
0_1457554985438_optiboot_atmega328_08M1_004800_B0.hexFuses:
BlueBoard.menu.mhz.1Mi48= 1Mhz - internal 8MHz DIV 8 - 4K8 upload speed
BlueBoard.menu.mhz.1Mi48.bootloader.low_fuses=0x62
BlueBoard.menu.mhz.1Mi48.bootloader.high_fuses=0xDE
BlueBoard.menu.mhz.1Mi48.build.f_cpu=1000000L
BlueBoard.menu.mhz.1Mi48.upload.speed=4800
BlueBoard.menu.mhz.1Mi48.bootloader.file=myoptiboot/optiboot_atmega328_08M1_004800_B0.hexYou will have to strip the "0_1457554985438_" part from the uploaded filename.
Loading the sketch is VERY slow, but it works perfectly. The Blink sketch blinks the led at 500ms on and 500ms off, and that is checked on the breadboard.
Whether the processor actually runs at 1MHz I do not know for sure, since I have no frequency meter (still missing from my toolbox).
I used an arduino as ISP to load the boot loader, and then used an FTDI interface (from Adafruit) to load the sketch while the atmega328 was plugged in a breadboard (Gammon style).
Next I will try with the 9600 baud version at 1Mhz.
-
I just loaded a blink sketch at 4800 baud using FTDI and that works with the following combination:
Boot loader:
0_1457554985438_optiboot_atmega328_08M1_004800_B0.hexFuses:
BlueBoard.menu.mhz.1Mi48= 1Mhz - internal 8MHz DIV 8 - 4K8 upload speed
BlueBoard.menu.mhz.1Mi48.bootloader.low_fuses=0x62
BlueBoard.menu.mhz.1Mi48.bootloader.high_fuses=0xDE
BlueBoard.menu.mhz.1Mi48.build.f_cpu=1000000L
BlueBoard.menu.mhz.1Mi48.upload.speed=4800
BlueBoard.menu.mhz.1Mi48.bootloader.file=myoptiboot/optiboot_atmega328_08M1_004800_B0.hexYou will have to strip the "0_1457554985438_" part from the uploaded filename.
Loading the sketch is VERY slow, but it works perfectly. The Blink sketch blinks the led at 500ms on and 500ms off, and that is checked on the breadboard.
Whether the processor actually runs at 1MHz I do not know for sure, since I have no frequency meter (still missing from my toolbox).
I used an arduino as ISP to load the boot loader, and then used an FTDI interface (from Adafruit) to load the sketch while the atmega328 was plugged in a breadboard (Gammon style).
Next I will try with the 9600 baud version at 1Mhz.
@GertSanders said:
Next I will try with the 9600 baud version at 1Mhz.
THanks
I'm looking forward to this - 4800 is way too slow.
I think the way to check the frequency is to time delay(1000); in the blink sketch... -
@GertSanders said:
Next I will try with the 9600 baud version at 1Mhz.
THanks
I'm looking forward to this - 4800 is way too slow.
I think the way to check the frequency is to time delay(1000); in the blink sketch...I just tested with the 9600 baud version at 1MHz, and the blink sketch at 250ms, 500ms and 1000ms per on/off cycle. All rock solid and as expected.
Here is the setup I tested the transfer with FTDI:


I used the following combination:
Boot loader:
0_1457556618255_optiboot_atmega328_01M_009600_B0.hex
Fuses:
BlueBoard.menu.mhz.1Mi= 1Mhz - internal 8MHz DIV 8 - 9K6 upload speed
BlueBoard.menu.mhz.1Mi.bootloader.low_fuses=0x62
BlueBoard.menu.mhz.1Mi.bootloader.high_fuses=0xDE
BlueBoard.menu.mhz.1Mi.build.f_cpu=1000000L
BlueBoard.menu.mhz.1Mi.upload.speed=9600
BlueBoard.menu.mhz.1Mi.bootloader.file=myoptiboot/optiboot_atmega328_01M_009600_B0.hexAlso here the "0_1457556618255_" is added by uploading on this forum, strip when downloaded.
Uploads were at twice the speed then before. Still slow, but acceptable.
-
@GertSanders I have the same breadboard setup, but can only read serial and cannot upload a sketch (out of sync). My settings are the same as yours as per my post earlier on today so I reckon it must be something wrong with the wiring on the breadboard since "Uploading using Programmer" works fine. Not sure what it is as I checked it a few times today.
-
@GertSanders I have the same breadboard setup, but can only read serial and cannot upload a sketch (out of sync). My settings are the same as yours as per my post earlier on today so I reckon it must be something wrong with the wiring on the breadboard since "Uploading using Programmer" works fine. Not sure what it is as I checked it a few times today.
@alexsh1
Maybe make a picture of your setup?
Upload using programmer means you use another Arduino to load the sketch on the atmega328, which at the same time deletes any bootloader.
I load bootloaders with an Arduino and the sketch ArduinoISP loaded on that one. Then I issue a "burn bootloader" command.
To load sketches I switch to my FTDI interface and upload sketches with the same processor setting. But as said with a different interface. And I do not use "upload using programmer", but the upload button next to the compile button.Maybe I should try to make a video like Mr Pete.
-
@alexsh1
Maybe make a picture of your setup?
Upload using programmer means you use another Arduino to load the sketch on the atmega328, which at the same time deletes any bootloader.
I load bootloaders with an Arduino and the sketch ArduinoISP loaded on that one. Then I issue a "burn bootloader" command.
To load sketches I switch to my FTDI interface and upload sketches with the same processor setting. But as said with a different interface. And I do not use "upload using programmer", but the upload button next to the compile button.Maybe I should try to make a video like Mr Pete.
@GertSanders Yes, this is normally the way I do (burn bootloader and then upload a sketch via FTDI on the breadboard). Will post photos shortly.
Are you sure "Upload using programmer" deleting the bootloader?
-
@GertSanders Yes, this is normally the way I do (burn bootloader and then upload a sketch via FTDI on the breadboard). Will post photos shortly.
Are you sure "Upload using programmer" deleting the bootloader?
Are you sure "Upload using programmer" deleting the bootloader?
Yes, looks like you are right - it kills the bootloader. So what's happening? I do not have any bootloader when I use this method to load up sketches?
-
Are you sure "Upload using programmer" deleting the bootloader?
Yes, looks like you are right - it kills the bootloader. So what's happening? I do not have any bootloader when I use this method to load up sketches?
If you load a sketch with "Upload using programmer" you replace anything in flash with the sketch. Just the sketch will run on the mcu.
In the very narrow node, there is no FTDI connector, so for those nodes it does not make sense to have a boot loader in flash (it does not hurt either). You couldvjust as well just load the sketch and skip the boot loader altogether.
If you need the extra 512 that optiboot occupies, then "Upload using programmer" allows you to recuperate that space.
So this shoudl explain why you can reed data from the Node via Serial (because the sketch is running and taking care of the serial connection), but why uploading a sketch fails, because for that you need a boot loader in flash.