Go Down

Topic: Question on difference between bootloaders? (Read 6445 times) previous topic - next topic

xl97

Thanks for the reply.


Im not sure I understand 100%.. so let me try to regurgitate it back to you and see what Im missing here.. :)


1.) because I successfully flashed Optiboot (using the Otiloader sketch.. that auto detects chip signature) in a jig/circuit that was set-up with 16MHz external crystal,..... I can just take that chip out.. and pop it into the 'final' circuit that is set-up to use an 8MHz external resonator.. and have ZERO problems? side effects?......nothing??



2.) There is no 'pre-existing' entry in the boards menu in the Arduino IDE for ANYTHING Optiboot related?  16Mhz or 8Mhz??
(kinda lost on that one I guess?)

I think there is actually 2 piece of info there that are useful (even if not usable currently) from the rest of you post:


A.)
Quote

There is no pre-existing definition in the Arduino IDE for a board with Optiboot at 8MHz, but it's easy to add one:  Find the boards.txt file and duplicate the uno definition (the first block of text).  Change the uno prefix in the duplicated text to something else, change upload.speed to 57600, change f_cpu to 8000000L, and change name to something else.


I would do/follow the above process if:
    i.) I had an 8Mhz set-up (including crystal/resonator).. and wanted to flash Optiboot bootloader to a blank chip that is intended to run @ +3.3v & 8Mhz clock....yes?

(because Optiboot doesnt by default have a 8Mhz entry to use/burn)... correct?


B.)
Quote

Likewise you can burn a bootloader binary made for an 8MHz board onto a chip running at 16MHz.  To test it with the 16MHz crystal you just need to upload at twice the normal baud, and to do that you make a new entry in boards.txt as described above.


now this seems like an answer to addresses my current situation/problem...(correct?)

I would do/follow the above process if: (like my current situation)
    i.) I have a 16Mhz set-up for FLASHING the BOOTLOADER to the chip.. but in the end the FINAL circuit the chip will go into is a 8Mhz set-up?



So if I was to follow the above..

I would be making 2 NEW bootloader entries:

1.)   8Mhz  >> 8Mhz  Optiboot

and a

2.) 16Mhz >> 8Mhz Optiboot


entry.......yes?

and in theory.. (taking this another step)..

if my flashing/bootloader 'jig' was ONLY set-up as a 8Mhz set-up.... but the target chip was eventually going to go into a 16Mhz set-up..

I could make another (3rd) entry..

3.) 8Mhz >> 16Mhz Optiboot..

(or can you NOT be compatible that way?  8Mhz to 16Mhz?)



am I following you correctly so far?


And all this is done by duplicating the UNO (Optiboot) entry and renaming, and changing the upload rate?


and again.. no side-effects/problems flashing in one environment and using in another?


so giving it a try:.

here are my two new BOARDS.txt entries..


1 x straight 8Mhz   (flashed in 8MHz circuit and used in final 8MHz circuit)
1 x 16Mhz to 8Mhz  (flashed in 16MHz circuit and used in final 8MHz circuit)



Quote

optiboot_8MHz.name=Optiboot @ 8MHz
optiboot_8MHz.upload.protocol=arduino
optiboot_8MHz.upload.maximum_size=32256
optiboot_8MHz.upload.speed=57600
optiboot_8MHz.bootloader.low_fuses=0xff
optiboot_8MHz.bootloader.high_fuses=0xde
optiboot_8MHz.bootloader.extended_fuses=0x05
optiboot_8MHz.bootloader.path=optiboot
optiboot_8MHz.bootloader.file=optiboot_atmega328.hex
optiboot_8MHz.bootloader.unlock_bits=0x3F
optiboot_8MHz.bootloader.lock_bits=0x0F
optiboot_8MHz.build.mcu=atmega328p
optiboot_8MHz.build.f_cpu=8000000L
optiboot_8MHz.build.core=arduino
optiboot_8MHz.build.variant=standard





optiboot_16-8MHz.name=Optiboot 16MHz >> 8MHz
optiboot_16-8MHz.upload.protocol=arduino
optiboot_16-8MHz.upload.maximum_size=32256
optiboot_16-8MHz.upload.speed=115200
optiboot_16-8MHz.bootloader.low_fuses=0xff
optiboot_16-8MHz.bootloader.high_fuses=0xde
optiboot_16-8MHz.bootloader.extended_fuses=0x05
optiboot_16-8MHz.bootloader.path=optiboot
optiboot_16-8MHz.bootloader.file=optiboot_atmega328.hex
optiboot_16-8MHz.bootloader.unlock_bits=0x3F
optiboot_16-8MHz.bootloader.lock_bits=0x0F
optiboot_16-8MHz.build.mcu=atmega328p
optiboot_16-8MHz.build.f_cpu=8000000L
optiboot_16-8MHz.build.core=arduino
optiboot_16-8MHz.build.variant=standard



thanks!



@pito-

thanks for reply too!  :)

pito

Quote
optiboot_16-8MHz.upload.speed=115200

You cannot run 115k2 upload with 8MHz clock reliably. The max recommended is 57k6..

tim7


1.) because I successfully flashed Optiboot (using the Otiloader sketch.. that auto detects chip signature) in a jig/circuit that was set-up with 16MHz external crystal,..... I can just take that chip out.. and pop it into the 'final' circuit that is set-up to use an 8MHz external resonator.. and have ZERO problems? side effects?......nothing??


That's right.  The only extra thing you'll have to do is add an extra entry in boards.txt.  You have installed an Optiboot binary which is made for running at 16MHz.  It will still run at 8MHz, but at half the speed.  The only change you have to make is ensure that the communications coming from your PC are also running at half the normal speed.

Quote

2.) There is no 'pre-existing' entry in the boards menu in the Arduino IDE for ANYTHING Optiboot related?  16Mhz or 8Mhz??


No, that's not right.  The Uno, the Arduino Mini, and the Arduino Ethernet all use Optiboot at 16MHz.

Quote

now this seems like an answer to addresses my current situation/problem...(correct?)


I'm not quite sure that your current problem is.  If you've got Optiboot running, isn't that enough?

xl97


Quote
optiboot_16-8MHz.upload.speed=115200

You cannot run 115k2 upload with 8MHz clock reliably. The max recommended is 57k6..


thanks.


so then what wold be the difference between the two??  (none?)


pito

1. if you flash an "optiboot for 8MHz and 57k6" and run the chip @16MHz the upload baudrate will be 115k2 - ok
2. if you flash an "optiboot for 16MHz and 115k2" and run the chip @8MHz the upload baudrate will be 57k6 - ok



xl97



1.) because I successfully flashed Optiboot (using the Otiloader sketch.. that auto detects chip signature) in a jig/circuit that was set-up with 16MHz external crystal,..... I can just take that chip out.. and pop it into the 'final' circuit that is set-up to use an 8MHz external resonator.. and have ZERO problems? side effects?......nothing??


That's right.  The only extra thing you'll have to do is add an extra entry in boards.txt.  You have installed an Optiboot binary which is made for running at 16MHz.  It will still run at 8MHz, but at half the speed.  The only change you have to make is ensure that the communications coming from your PC are also running at half the normal speed.

Quote

2.) There is no 'pre-existing' entry in the boards menu in the Arduino IDE for ANYTHING Optiboot related?  16Mhz or 8Mhz??


No, that's not right.  The Uno, the Arduino Mini, and the Arduino Ethernet all use Optiboot at 16MHz.

Quote

now this seems like an answer to addresses my current situation/problem...(correct?)


I'm not quite sure that your current problem is.  If you've got Optiboot running, isn't that enough?



sorry..

I suppose I wasnt clear enough..

I understand that the UNO uses the Optiboot bootloader..

I guess meant it more as there are no entries that are labeled as Optiboot.. in ANY flavor.. (they are named Uno, ..etc)




As far as the current problem..

* I have blank ATmega328P-AU (smd) chips I need to flash

* the END/FINAL pcb they will be going into is an 8Mhz external resonator circuit..

* the END/FINAL pcb has NO ICSP headers/pins broken out to flash AFTER being assembled.

* I have a 'TEST JIG' that I can use to flash bootloaders onto these BLANK ATmega 328P-AU chips BEFORE they get assembled into the (final/target) 8MHz external resonator pcb

* The FLASHING  'TEST JIG' I have is that 1ISoG board I linked to above.. it is set-up with a 16MHz external crystal.



thats the current situation/problem that prompted this.

I have what I believe to be a FLASHED chip with Optiboot on it.   Since it 'auto detects' the chip signature.. and there is no 8Mhz version.. (and you cant choose anyways.. Optiloader just 'goes'..and runs when a chip is detected)... this chip is set-up to use 16Mhz.


which Im assuming will NOT work in the final/target board that is set up with an 8MHz external resonator..

So no.. I dont believe just because Optiboot is running that is enough.

I need tp ensure that even though Im using a 16MHZ based circuit to FLASH the bootloader with.. there will be NO side effects with that chip being used in the final 8MHZ circuit.


So I created those two 'new' entries.. (& apparently one is wrong) LOL...

and at this point.. Im still confused??

thanks

pito

#21
Apr 09, 2013, 08:54 pm Last Edit: Apr 09, 2013, 08:58 pm by pito Reason: 1
"Flashing a chip" and "running a bootloader" are two different instances. You may flash a chip with "any recommended crystal value" connected to it, afaik (provided you are using a standard programming method).

kf2qd


Found the summary I was doing.

You can see I was toying with a new board type:
the existing 328 types with 20 IO
the existing 1284 types with 32 IO
a new 1281 type with 54 IO, "milliduino"
the existing 250 types with 86 IO

I should make one up & try it ...


Good chart, lots of info and takes a bit to digest.
Flash is there, needs a column for Ram and EEprom.

tim7


I have what I believe to be a FLASHED chip with Optiboot on it.   Since it 'auto detects' the chip signature.. and there is no 8Mhz version.. (and you cant choose anyways.. Optiloader just 'goes'..and runs when a chip is detected)... this chip is set-up to use 16Mhz.


which Im assuming will NOT work in the final/target board that is set up with an 8MHz external resonator..


It will work.  Trust me.  The bootloader will run at half the normal speed, but that's just fine.  Once the bootloader has finished running it passes control to your sketch, which will run at the speed you expect just the same as on any other 8MHz board.

You could recompile Optiboot for an 8MHz processor.  You will find (I've tried it) that at 8MHz the "normal" baud rate of 115200 is unreliable, so you'll need to slow it down to 57600.  But now the 8MHz version of Optiboot is (aside from some very minor cosmetic issues) exactly the same as the 16MHz version.  The instructions to communicate at 115200 baud, if carried out at half speed, correspond precisely to 57600 baud.

The only problem you have is that there is no standard Arduino which uses Optiboot at 8MHz, and that means that you cannot use one of the existing definitions in boards.txt.  But that's very easily overcome, as described above.  If you really really do not want to alter boards.txt, then you'll need to start over (although the 16MHz jig will still be ok).

xl97


1. if you flash an "optiboot for 8MHz and 57k6" and run the chip @16MHz the upload baudrate will be 115k2 - ok
2. if you flash an "optiboot for 16MHz and 115k2" and run the chip @8MHz the upload baudrate will be 57k6 - ok





ok.. (Im trying here.. bear with me) :)

I want to use an 8MHz Optiboot bootloader ON an 8MHz board..  (but I only have a 16MHz board that I can FLASH the chip with)


So if I use 16MHz board JUST TO FLASH THE BLANK CHIP....  that is intended to be used with a FINAL 8MHz pcb/board..

I would create this entry:


optiboot_8MHz.name=Optiboot @ 8MHz
optiboot_8MHz.upload.protocol=arduino
optiboot_8MHz.upload.maximum_size=32256
optiboot_8MHz.upload.speed=57600
optiboot_8MHz.bootloader.low_fuses=0xff
optiboot_8MHz.bootloader.high_fuses=0xde
optiboot_8MHz.bootloader.extended_fuses=0x05
optiboot_8MHz.bootloader.path=optiboot
optiboot_8MHz.bootloader.file=optiboot_atmega328.hex
optiboot_8MHz.bootloader.unlock_bits=0x3F
optiboot_8MHz.bootloader.lock_bits=0x0F
optiboot_8MHz.build.mcu=atmega328p
optiboot_8MHz.build.f_cpu=8000000L
optiboot_8MHz.build.core=arduino
optiboot_8MHz.build.variant=standard


correct?


Im still not clear on the different BOARD entries I would make then to fill these needs (out of curiosity)

ALL OF THE BELOW WOULD BE A 8MHz based Optiboot bootloader

8MHz board to FLASH with >>>  8MHz final circuit     // same as above posted? no difference?
16MHz board to FLASH with >>>  8MHz final circuit    // same as above posted? no difference?



As mentioned in a prior post here..
Quote

Likewise you can burn a bootloader binary made for an 8MHz board onto a chip running at 16MHz.  To test it with the 16MHz crystal you just need to upload at twice the normal baud, and to do that you make a new entry in boards.txt as described above.


if I wanted to take my 8MHz bootloader..   take my 16MHz hardware.. and flash it to a blank chip..

if I wanted to 'test' that chip.. Id need to also do something different?


xl97

Im open to whatever.. (with-in reason!)  :)

I made two board entries for review.. I would have added them if 'signed-off' on as being OK. :)


Im trying to grasp it all!..

and get a true understanding (as well as?) instead of just following blindly.


(maybe I shouldnt even be asking this..LOL)..

but lets take OPTIBOOT out of the equation (even though its a better bootloader that many prefer)..

and go back to the plain old Ardiuno IDE.. and using Arduino as programmer option for a second..


I have my Arduino Duemilanove wired up to the 1ISoG board..  (!ISoG = the 16MHz jig, hardware/board)..

I flash Duemilanove with the Arduino as ISP sketch..  ...wire up board..

make sure com port is right...  choose - Arduino Pro/Pro-Mini @+3.3v & 8MHz entry from BOARDS menu..

and then choose BURN BOOTLOADER..


results?


Pito made reference to what may be my problem/hang-up on understanding..

flashing the bootloader to a chip != running a bootloader at specific clock speed?




If the external clock/resonator on the board used ONLY to flash the bootloader with ISNT a concern/issue..

then maybe excluding Optiboot (for now) is better, more clear?




tim7


Quote
that being said.. 'is' moving toward +3.3v based boards the trend? (future?)..

Yes.


Oo-er.  That's perhaps overstating it.  Fast processors have used lower voltages for many years, and even 3.3V is rather high for a modern chip.

But 5V still has plenty of advantages in an Arduino.  Minimalist boards based on the 32U4 chip can run off 5V USB power without a regulator.  Many components require 5V or run better at 5V: audio amplifiers, buzzers, large LED displays, power transistors, relays...

tim7


correct?

Spot on. :-)


I flash Duemilanove with the Arduino as ISP sketch..  ...wire up board..
make sure com port is right...  choose - Arduino Pro/Pro-Mini @+3.3v & 8MHz entry from BOARDS menu..
and then choose BURN BOOTLOADER..


This will also work.  However you'll need to remove your chip from the 16MHz jig and install it in the 8MHz circuit before you can test it (or create yet another new entry in boards.txt).

CrossRoads

SRAM, EEPROM, yes I noticed that was missing as I looked at it again. Will update when I get a little free time.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

tim7


"Flashing a chip" and "running a bootloader" are two different instances. You may flash a chip with "any recommended crystal value" connected to it, afaik (provided you are using a standard programming method).


The processor must be running, so the set fuse values must correspond to the crystal used during programming.  Is so happens that the fuse values for 8MHz and 16MHz are the same, so in this case we can ignore the fact that we're using the "wrong" clock during programming.

Go Up