Can fuses be programmed through an Arduino's serial connection?

So I have read over and over that you cannot set fuses without going through the ICSP connection.

I also read however that the IDE can set those fuses in the process of burning a bootloader, through the USB connection.

Does this mean that the USB connection to the UNO can do both Serial & ICSP? And thus that an "FTDI adapter" for a pro mini for example doesn't fully replace that USB connection, since the adapter can't do ICSP?

The reason I am asking is because my pro minis will have an RFM69 module connected through ICSP, and I would have liked the ability to adjust the fuses w/o having to disconnect the radio.

Thanks!
Franck

(deleted)

franck102:
I also read however that the IDE can set those fuses in the process of burning a bootloader, through the USB connection.

Please post a link to where you read that. Use the chain links icon on the toolbar to make the URL clickable.

franck102:
The reason I am asking is because my pro minis will have an RFM69 module connected through ICSP, and I would have liked the ability to adjust the fuses w/o having to disconnect the radio.

You can connect a programmer to the SPI pins and reset on the Pro Mini. The ICSP header is just a convenient way to connect a programmer to those pins, there's no magic to it.

"I also read however that the IDE can set those fuses in the process of burning a bootloader, through the USB connection."
Burning a bootloader requires connecting a Programmer to the appropriate pins - D11 (MOSI), D12 (MISO), D13 (SCK), Power, Gnd, and Reset.
Those are conveniently arranged on the ICSP header, but can also be connected to directly: here I show a programming adapter in use between my Programmer and the pins on a '1284P for example:
http://www.crossroadsfencing.com/BobuinoRev17/


You can bring those pins out to a connecter that you can connect your programmer to in your Promini project.
Or you can use a SMD adapter that is held in place over the chip itself:

I have one of these also, with a similar adapter to connect the correct 6 pins to the Programmer. (10 pin header just has extra grounds).

Why do you feel you need to be changing fuses?

pert:
Please post a link to where you read that.

Hundreds of posts in these very forums. Here is one that provides some more insight in answer #1:

http://forum.arduino.cc/index.php?topic=315838.0

"Clarifying a bit:
...
3) The IDE "Burn bootloader" command DOES burn the fuses, using whatever programmer you've selected.
"
So I guess I can rephrase my question is in terms of IDE commands if you prefer:

  • Can I use the IDE to burn a bootloader to the board connected to the PC via USB (I assume yes)?
  • In that process the IDE will set the fuses according to what I read
  • my question: how does it do that? Can the PC-USB-board connection be used for SPI? Or are the fuses set through Serial?

Franck

CrossRoads:
"I also read however that the IDE can set those fuses in the process of burning a bootloader, through the USB connection."
Burning a bootloader requires connecting a Programmer to the appropriate pins - D11 (MOSI), D12 (MISO), D13 (SCK), Power, Gnd, and Reset.

I understand that; but it can also be done over the PC to USB connection for an UNO for example, right? Hmmm... I guess I answered my own question, if the IDE can burn the bootloader over USB that means that USB input on an UNO for example can do SPI programming.

I had somehow equated the FTDI adapters to the USB connector on the UNO, but the latter apparently has more capabilities.

CrossRoads:
Why do you feel you need to be changing fuses?

To run a pro mini from batteries: I want a 1MHz clock and disabled brown out settings.

Franck

franck102:
Hundreds of posts in these very forums. Here is one that provides some more insight in answer #1:

Does bootloader burn fuses? - Microcontrollers - Arduino Forum

Nope, that says absolutely nothing about setting fuses or burning a bootloader through an Arduino's USB connection.

pert:
Nope, that says absolutely nothing about setting fuses or burning a bootloader through an Arduino's USB connection.

Ok, sorry for being dense, I got it now :slight_smile: I had always assumed that the IDE could do that, hence the confusion.

Franck

Reading Section 30 and 31 of the November 2016 '328P datasheet, I see nothing that indicates the High/Low/Extended fuse can be changed by any means other than entering Programming Mode (using SPI interface or Parallel interface). Bootloader code can be written to read the fuses, but not write them.

An FTDI Adapter is just a USB/Serial adapter, the same function the 16U2 performs on the Uno. The 16U2 can be reprogrammed to do other things, I suppose the FT232 can also, just not as easily.

An FTDI Adapter can be connected to the ICSP pins for bootloader installation, it is very slow. I still have a Duemilanove set up with pins for this:
http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html

There has been code written for the 16U2 to do the same, which unfortunately I do not have bookmarked, and finding it in the forum is not easy.

Nick Gammon has some topics on the fuses:

The most detailed explanation:

Using Uno's '16U2 as a bootload installer:

CrossRoads:
Using Uno's '16U2 as a bootload installer:
http://make.kosakalab.com/make/electronic-work/burn_bootloader_uno_en/

Right, found this as well:

Not that I would consider trying something like that...

Franck

Yes, I had read those...

I guess what can be confusing for a beginner like me is that "Burn Bootloader" menu entry that is right in your face in the IDE even though you only have your first UNO connected through USB.
When I first opened the IDE a Programmer was selected (not sure which anymore) and I assumed it was being used to program my brand new UNO.

A simple Programmer->"None" menu entry that disables controls that require a programmer (upload using programmer, burn bootloader...) would be nice IMHO.

Franck