Solved: avrdude-original: Using autoreset DTR on GPIO Pin 7

So I tried a new thing today, updating the firmware on the RFMpi. Since I'm about to replace the RFM12b with a RFM69cw I figured it would be wise to try and upload the RFM12b firmware first before I'd start replacing the hardware.

I followed the (very easy) guide - http://wiki.openenergymonitor.org/index.php?title=RFM69Pi_V3 - and used the firmware for the RFM12b

avrdude -v -c arduino -p ATMEGA328P -P /dev/ttyAMA0 -b 38400 -U flash:w:RFM12_Demo_ATmega328.cpp.hex

Unfortunately this led to quick stop. After the "using autoreset..." message it simply stopped. 

avrdude-original: Version 6.1, compiled on Jul  7 2015 at 13:18:47
                  Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
                  Copyright (c) 2007-2014 Joerg Wunsch

                  System wide configuration file is "/etc/avrdude.conf"
                  User configuration file is "/root/.avrduderc"
                  User configuration file does not exist or is not a regular file, skipping

                  Using Port                    : /dev/ttyAMA0
                  Using Programmer              : arduino
                  Overriding Baud Rate          : 38400
avrdude-original: Using autoreset DTR on GPIO Pin 7
pi@raspberrypi ~/RFM2Pi/firmware/RF12_Demo_atmega328 $

Fortunately I'm not the only one (link) and found out that avrdude version 6.1 was the culprit and this could be solved by using an older version (5.11). So an easy solution to my misery was to remove 6.11

sudo apt-get remove avrdude
sudo rm /usr/bin/avrdude-original

and update the installation script of avrdude-rpi to force apt-get to use version 5.11:

#!/bin/bash

echo "display serial console to enable use of /dev/AMA0 serial port"
sudo wget https://raw.githubusercontent.com/openenergymonitor/rpi-serial-console/m... -O /usr/bin/rpi-serial-console && sudo chmod +x /usr$
sudo rpi-serial-console disable

sudo apt-get install -y avrdude=5.11.1-1 python-dev python-rpi.gpio minicom

echo "install avrdude autoreset"

sudo cp /home/pi/avrdude-rpi/autoreset /usr/bin
sudo cp /home/pi/avrdude-rpi/avrdude-autoreset /usr/bin

if [ ! -f /usr/bin/avrdude-original ]; then 
        sudo mv /usr/bin/avrdude /usr/bin/avrdude-original
        sudo ln -s /usr/bin/avrdude-autoreset /usr/bin/avrdude
fi

Now when I issue the same command, everything works :-)

pi@raspberrypi ~/RFM2Pi/firmware/RFM69CW_RF_Demo_ATmega328 $ avrdude -v -c arduino -p ATMEGA328P -P /dev/ttyAMA0 -b 38400 -U flash:w:RFM12_Demo_ATmega328.cpp.hex

avrdude-original: Version 5.11.1, compiled on May 23 2012 at 11:08:25
                  Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
                  Copyright (c) 2007-2009 Joerg Wunsch

                  System wide configuration file is "/etc/avrdude.conf"
                  User configuration file is "/root/.avrduderc"
                  User configuration file does not exist or is not a regular file, skipping

                  Using Port                    : /dev/ttyAMA0
                  Using Programmer              : arduino
                  Overriding Baud Rate          : 38400
avrdude-original: Using autoreset DTR on GPIO Pin 7
                  AVR Part                      : ATMEGA328P
                  Chip Erase delay              : 9000 us
                  PAGEL                         : PD7
                  BS2                           : PC2
                  RESET disposition             : dedicated
                  RETRY pulse                   : SCK
                  serial program mode           : yes
                  parallel program mode         : yes
                  Timeout                       : 200
                  StabDelay                     : 100
                  CmdexeDelay                   : 25
                  SyncLoops                     : 32
                  ByteDelay                     : 0
                  PollIndex                     : 3
                  PollValue                     : 0x53
                  Memory Detail                 :

                                           Block Poll               Page                       Polled
                    Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
                    ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
                    eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
                    flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
                    lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                    hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                    efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                    lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                    calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                    signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

                  Programmer Type : Arduino
                  Description     : Arduino
                  Hardware Version: 3
                  Firmware Version: 4.4
                  Vtarget         : 0.3 V
                  Varef           : 0.3 V
                  Oscillator      : 28.800 kHz
                  SCK period      : 3.3 us

avrdude-original: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude-original: Device signature = 0x1e950f
avrdude-original: safemode: lfuse reads as 0
avrdude-original: safemode: hfuse reads as 0
avrdude-original: safemode: efuse reads as 0
avrdude-original: NOTE: FLASH memory has been specified, an erase cycle will be performed
                  To disable this feature, specify the -D option.
avrdude-original: erasing chip
avrdude-original: reading input file "RFM12_Demo_ATmega328.cpp.hex"
avrdude-original: input file RFM12_Demo_ATmega328.cpp.hex auto detected as Intel Hex
avrdude-original: writing flash (8982 bytes):

Writing | ################################################## | 100% 3.17s

avrdude-original: 8982 bytes of flash written
avrdude-original: verifying flash memory against RFM12_Demo_ATmega328.cpp.hex:
avrdude-original: load data flash data from input file RFM12_Demo_ATmega328.cpp.hex:
avrdude-original: input file RFM12_Demo_ATmega328.cpp.hex auto detected as Intel Hex
avrdude-original: input file RFM12_Demo_ATmega328.cpp.hex contains 8982 bytes
avrdude-original: reading on-chip flash data:

Reading | ################################################## | 100% 2.87s

avrdude-original: verifying ...
avrdude-original: 8982 bytes of flash verified

avrdude-original: safemode: lfuse reads as 0
avrdude-original: safemode: hfuse reads as 0
avrdude-original: safemode: efuse reads as 0
avrdude-original: safemode: Fuses OK

 

Hope this helps for others with the same challenge

glyn.hudson's picture

Re: Solved: avrdude-original: Using autoreset DTR on GPIO Pin 7

Nice work, thanks a lot for figuring this out. It's strange that the new version of avrdude caused issues. Avrdude V6.1 works fine uploading to the emonPi and autorest via GPIO 

 

avrdude version 6.1

I'm using baud 115200, this is the only difference I can see. 

https://github.com/openenergymonitor/emonpi/blob/master/emonpiupdate

=================================
EmonPi update started
=================================
Start ATmega328 serial upload using avrdude with emonPi_latest.hex
avrdude-original: Using autoreset DTR on GPIO Pin 7
strace: |autoreset: Broken pipe
strace: |autoreset: Broken pipe

avrdude-original: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude-original: Device signature = 0x1e950f
avrdude-original: NOTE: "flash" memory has been specified, an erase cycle will be performed
                  To disable this feature, specify the -D option.
avrdude-original: erasing chip
avrdude-original: reading input file "/home/pi/emonpi/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling/compiled/emonPi_latest.hex"
avrdude-original: input file /home/pi/emonpi/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling/compiled/emonPi_latest.hex auto detected as Intel Hex
avrdude-original: writing flash (19074 bytes):

Writing | ################################################## | 100% 2.73s

avrdude-original: 19074 bytes of flash written
avrdude-original: verifying flash memory against /home/pi/emonpi/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling/compiled/emonPi_latest.hex:
avrdude-original: load data flash data from input file /home/pi/emonpi/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling/compiled/emonPi_latest.hex:
avrdude-original: input file /home/pi/emonpi/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling/compiled/emonPi_latest.hex auto detected as Intel Hex
avrdude-original: input file /home/pi/emonpi/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling/compiled/emonPi_latest.hex contains 19074 bytes
avrdude-original: reading on-chip flash data:

Reading | ################################################## | 100% 2.06s

avrdude-original: verifying ...
avrdude-original: 19074 bytes of flash verified
strace: |autoreset: Broken pipe
strace: |autoreset: Broken pipe
strace: |autoreset: Broken pipe
strace: |autoreset: Broken pipe
strace: |autoreset: Broken pipe

avrdude-original done.  Thank you.

strace: |autoreset: Broken pipe

pb66's picture

Re: Solved: avrdude-original: Using autoreset DTR on GPIO Pin 7

avrdude 6.1 breaking changes #4

I can confirm this as I have been using 0.3s for some months now, at that time I found anywhere between 0.24s to 0.34s seconds worked but had hoped to find out what the actual required timing by spec was, to be sure it was right but I haven't as yet.

Paul

glyn.hudson's picture

Re: Solved: avrdude-original: Using autoreset DTR on GPIO Pin 7

Thanks, I've updated our version and tested 0.32 sleep. Works fine https://github.com/openenergymonitor/avrdude-rpi

​Do you mean 0.32 or 0.34? 

the github issue says 0.32. They both probably work! 

pb66's picture

Re: Solved: avrdude-original: Using autoreset DTR on GPIO Pin 7

I'm sure 0.32 will be fine!

In my tests anything from 0.24 to 0.34 seemed to work, I use 0.3 since 0.29 is centre of the working range (and 2 decimal places seemed overkill at this level of science).

This has worked for me for many months as I was using 6.1 way before ir reached wheezy stable due to it's spi/gpio programming ability not in 5.11.

Paul

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.