PlatformIO Community

DFU upload support (at90usb support)?


The at90usb1286 MPUs come from the factory with DFU bootloader programmed into them.

Is there a built-in tool/protocol that I can use to upload to this chip?

If not, it would be nice to get a pointer to an extra_script that will do the job.



Assuming you’re using the Teensy++ or Teensy++ 2.0 then PlatformIO defines the “teensy-gui” tool as the upload tool (source). This is this tool (source).

I don’t however know if that tools uses the factory programmed DFU bootloader you reference. What upload tool do you use for interacting with this boot loader? Have you tried uploading firmwares with the teensy-gui?


Marlin supports 5-6 different AT90USB1286 based boards. They’ve always been a pain when it comes to IDE support. I’d really like to get them supported by PlatformIO.

Some of them have a DFU bootloader on them. They’re supposed to be unloadable by the Teensyduino loader that pops up when I use PlatformIO and the teensy platform. Based on my sample of one I’m beginning to have doubts.

Sample of one is definitely not ideal. I have a couple of different flavors on order so hopefully I can have more confidence in what I’m seeing.

I was able to upload my sample of one via the dfu-programmer in the Linux environment. When I try PlatformIO the teensy loader pops up, tells me to press the button and then exits about 5 seconds later no matter what I do or don’t do.

Besides a learning curve I think there may be some apples/oranges going on. The Teensy site says Half Kay and others tell me that it’s DFU. No way to tell for sure until I get my hands on a real Teensy++2.0.

Others have a CDC bootloader. That combo is not yet supported by PlatformIO. I’ll be looking into adding a board to the Arduino platform to support this. I have verified that the Arduino platform will compile for this chip & that the image at least boots to the command prompt.


For the PIO part, you could write a script which replaces the UPLOADHEXCMD with a shell command which invokes your dfu-programmer (this one I guess?) instead (docs). This documentation might also be useful.