I have built a custom board that has an ATmega328p connected to an ESP8266 module via UART. I am currently programming the ATmega328p using a USBtiny programmer via an SPI header. The ESP8266 module is programmed via an FTDI cable connected the the UART.
Firmware for both are created in Arduino IDE.
I have set up a webserver on the ESP that allows for files to be uploaded to the SPIFFS via FTP. I would like to be able to upload a hex file for the ATmega and then have the ESP program the ATmega via the UART connection. A GPIO on the ESP controls a transistor that can pull the reset pin on the ATmega to ground.
I know I need a bootloader on the ATmega (e.g. optiboot), but I don't know what I need to make the ESP do to trigger the bootloader and flash the ATmega. I'm thinking I need something like:
void initialiseAtmegaFlash () {
// Trigger the bootloader to accept incoming hex over UART
}
void flashHexToAtmega (File atmegaHex) {
for (uint32_t i = 0; i < atmegaHex.size(); ++i) {
// Handle timing of sending byte by byte over serial... or chunk by chunk?
}
}
-
You need to start by understanding the STK500 protocol. Read and digest: ww1.microchip.com/downloads/en/AppNotes/doc2591.pdfMajenko– Majenko2019年03月07日 11:11:37 +00:00Commented Mar 7, 2019 at 11:11
-
you can use the dfu library from here github.com/jandrassy/…Juraj– Juraj ♦2019年03月07日 12:13:18 +00:00Commented Mar 7, 2019 at 12:13
-
That dfu library looks like I need to initiate the upload from Arduino IDE on the same network. The STK500 protocol documentation looks like the sort of thing I need. I was hoping there might be a neat library already, but looks like the info I need to get the functionality.Pinja– Pinja2019年03月07日 15:49:23 +00:00Commented Mar 7, 2019 at 15:49
-
github.com/ciminaghi/libdfuJuraj– Juraj ♦2019年03月08日 09:57:43 +00:00Commented Mar 8, 2019 at 9:57
-
did u managed to do it? If yes, kindly share the details with me also and the connections.Saqib Manan– Saqib Manan2020年06月29日 10:28:47 +00:00Commented Jun 29, 2020 at 10:28
1 Answer 1
To answer my own question in case someone else ends up here, the library Juraj suggested (https://github.com/ciminaghi/libdfu) looks like it does the job. I also found another project doing something similar (https://github.com/rene-win/esp_avr_programmer). Also the STK500 docs linked to by Majenko (http://ww1.microchip.com/downloads/en/AppNotes/doc2591.pdf) are really useful for understanding the nuts and bolts!