firmware update problem 1.017 -> 1.0xx

Discuss use it and firmware update
  • [EDIT]I wrote different ArduinoISP code, it is revised.

    hello,

    I have tried instruction by e-licktronic.
    however, it has been still 1.017.

    at first, I tried with windows pc which I borrowed, but error occur following.

    Code: Select all

    avrdude: ser_open(): can't set com-state for "\\.\COM4"
    
    I tried uninstall and re-install ArduinoIDE and driver, but these can not help it.

    so I tried with Mac OSX.
    writer is arduino duemilanove with Arduino ISP and IDE v1.8.0.
    I wrote Arduino ISP to arduino duemilanove, and connected with nava.
    commands are following.

    Code: Select all

    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -u -e -U lock:w:0x3F:m -v
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -u -U efuse:w:0xFD:m -v
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -u -U hfuse:w:0xDC:m -v
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -u -U lfuse:w:0xD6:m -v
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -U flash:w:~/nava/tool/Nava_v1_020.hex:i -v
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -U flash:w:~/nava/tool/BootNava.hex:i -v -D
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c avrisp -p m1284p -b 19200 -U lock:w:0x0F:m -v
    
    first, protocol error occurs

    Code: Select all

    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "~/nava/tool/bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : avrisp
             Overriding Baud Rate          : 19200
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel AVR ISP
    
    avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14
    
    avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x02
    
    avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x10
             Hardware Version: 32767
             Firmware Version: 1.214220458
             Topcard         : STK502
             Vtarget         : 1.8 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: stk500_initialize(): (b) protocol error, expect=0x10, resp=0x01
    avrdude: initialization failed, rc=-1
             Double check connections and try again, or use -F to override
             this check.
    
    avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10
    
    avrdude done.  Thank you.
    I found solution.
    https://github.com/arduino/Arduino/issues/730
    I modified Arduino ISP and wrote again.

    Code: Select all

    // ArduinoISP
    // Copyright (c) 2008-2011 Randall Bohn
    // If you require a license, see
    //     http://www.opensource.org/licenses/bsd-license.php
    //
    // This sketch turns the Arduino into a AVRISP
    // using the following arduino pins:
    //
    // Pin 10 is used to reset the target microcontroller.
    //
    // By default, the hardware SPI pins MISO, MOSI and SCK pins are used
    // to communicate with the target. On all Arduinos, these pins can be found
    // on the ICSP/SPI header:
    //
    //               MISO °. . 5V (!) Avoid this pin on Due, Zero...
    //               SCK   . . MOSI
    //                     . . GND
    //
    // On some Arduinos (Uno,...), pins MOSI, MISO and SCK are the same pins
    // as digital pin 11, 12 and 13, respectively. That is why many tutorials
    // instruct you to hook up the target to these pins. If you find this wiring
    // more practical, have a define USE_OLD_STYLE_WIRING. This will work even
    // even when not using an Uno. (On an Uno this is not needed).
    //
    // Alternatively you can use any other digital pin by configuring software ('BitBanged')
    // SPI and having appropriate defines for PIN_MOSI, PIN_MISO and PIN_SCK.
    // 
    // IMPORTANT: When using an Arduino that is not 5V tolerant (Due, Zero, ...)
    // as the programmer, make sure to not expose any of the programmer's pins to 5V.
    // A simple way to accomplish this is to power the complete system (programmer
    // and target) at 3V3.
    //
    // Put an LED (with resistor) on the following pins:
    // 9: Heartbeat   - shows the programmer is running
    // 8: Error       - Lights up if something goes wrong (use red if that makes sense)
    // 7: Programming - In communication with the slave
    //
    
    #include "Arduino.h"
    #undef SERIAL
    
    
    #define PROG_FLICKER true
    
    // Configure SPI clock (in Hz).
    // E.g. for an attiny @128 kHz: the datasheet states that both the high
    // and low spi clock pulse must be > 2 cpu cycles, so take 3 cycles i.e.
    // divide target f_cpu by 6:
    //     #define SPI_CLOCK            (128000/6)
    //
    // A clock slow enough for an attiny85 @ 1MHz, is a reasonable default:
    
    #define SPI_CLOCK 		(1000000/6)
    
    
    // Select hardware or software SPI, depending on SPI clock.
    // Currently only for AVR, for other archs (Due, Zero,...),
    // hardware SPI is probably too fast anyway.
    
    #if defined(ARDUINO_ARCH_AVR)
    
    #if SPI_CLOCK > (F_CPU / 128)
    #define USE_HARDWARE_SPI
    #endif
    
    #endif
    
    // Configure which pins to use:
    
    // The standard pin configuration.
    #ifndef ARDUINO_HOODLOADER2 
    
    #define RESET     10 // Use pin 10 to reset the target rather than SS
    #define LED_HB    9
    #define LED_ERR   8
    #define LED_PMODE 7
    
    // Uncomment following line to use the old Uno style wiring
    // (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due...
    
    //#define USE_OLD_STYLE_WIRING
    
    #ifdef USE_OLD_STYLE_WIRING
    
    #define PIN_MOSI	11
    #define PIN_MISO	12
    #define PIN_SCK		13
    
    #endif
    
    // HOODLOADER2 means running sketches on the atmega16u2 
    // serial converter chips on Uno or Mega boards.
    // We must use pins that are broken out:
    #else 
    
    #define RESET     	4
    #define LED_HB    	7
    #define LED_ERR   	6
    #define LED_PMODE 	5
    
    #endif
    
    // By default, use hardware SPI pins:
    #ifndef PIN_MOSI
    #define PIN_MOSI 	MOSI
    #endif
    
    #ifndef PIN_MISO
    #define PIN_MISO 	MISO
    #endif
    
    #ifndef PIN_SCK
    #define PIN_SCK 	SCK
    #endif
    
    // Force bitbanged SPI if not using the hardware SPI pins:
    #if (PIN_MISO != MISO) ||  (PIN_MOSI != MOSI) || (PIN_SCK != SCK)
    #undef USE_HARDWARE_SPI
    #endif
    
    
    // Configure the serial port to use.
    //
    // Prefer the USB virtual serial port (aka. native USB port), if the Arduino has one:
    //   - it does not autoreset (except for the magic baud rate of 1200).
    //   - it is more reliable because of USB handshaking.
    //
    // Leonardo and similar have an USB virtual serial port: 'Serial'.
    // Due and Zero have an USB virtual serial port: 'SerialUSB'.
    //
    // On the Due and Zero, 'Serial' can be used too, provided you disable autoreset.
    // To use 'Serial': #define SERIAL Serial
    
    #ifdef SERIAL_PORT_USBVIRTUAL
    #define SERIAL SERIAL_PORT_USBVIRTUAL
    #else
    #define SERIAL Serial
    #endif
    
    
    // Configure the baud rate:
    
    #define BAUDRATE	19200
    // #define BAUDRATE	115200
    // #define BAUDRATE	1000000
    
    
    #define HWVER 2
    #define SWMAJ 1
    #define SWMIN 18
    
    // STK Definitions
    #define STK_OK      0x10
    #define STK_FAILED  0x11
    #define STK_UNKNOWN 0x12
    #define STK_INSYNC  0x14
    #define STK_NOSYNC  0x15
    #define CRC_EOP     0x20 //ok it is a space...
    
    void pulse(int pin, int times);
    
    #ifdef USE_HARDWARE_SPI
    #include "SPI.h"
    #else
    
    #define SPI_MODE0 0x00
    
    class SPISettings {
    public:
      // clock is in Hz
      SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) : clock(clock){
        (void) bitOrder;
        (void) dataMode;
      };
    
    private:
      uint32_t clock;
    
    friend class BitBangedSPI;
    };
    
    class BitBangedSPI {
    public:
      void begin() {
        digitalWrite(PIN_SCK, LOW);
        digitalWrite(PIN_MOSI, LOW);
        pinMode(PIN_SCK, OUTPUT);
        pinMode(PIN_MOSI, OUTPUT);
        pinMode(PIN_MISO, INPUT);
      }
    
      void beginTransaction(SPISettings settings) {
        pulseWidth = (500000 + settings.clock - 1) / settings.clock;
        if (pulseWidth == 0)
          pulseWidth = 1;
      }
    
      void end() {}
    
      uint8_t transfer (uint8_t b) {
        for (unsigned int i = 0; i < 8; ++i) {
          digitalWrite(PIN_MOSI, (b & 0x80) ? HIGH : LOW);
          digitalWrite(PIN_SCK, HIGH);
          delayMicroseconds(pulseWidth);
          b = (b << 1) | digitalRead(PIN_MISO);
          digitalWrite(PIN_SCK, LOW); // slow pulse
          delayMicroseconds(pulseWidth);
        }
        return b;
      }
    
    private:
      unsigned long pulseWidth; // in microseconds
    };
    
    static BitBangedSPI SPI;
    
    #endif
    
    void setup() {
      SERIAL.begin(BAUDRATE);
    
      pinMode(LED_PMODE, OUTPUT);
      pulse(LED_PMODE, 2);
      pinMode(LED_ERR, OUTPUT);
      pulse(LED_ERR, 2);
      pinMode(LED_HB, OUTPUT);
      pulse(LED_HB, 2);
    
    }
    int initSent=0;
    int error = 0;
    int pmode = 0;
    // address for reading and writing, set by 'U' command
    unsigned int here;
    uint8_t buff[256]; // global block storage
    
    #define beget16(addr) (*addr * 256 + *(addr+1) )
    typedef struct param {
      uint8_t devicecode;
      uint8_t revision;
      uint8_t progtype;
      uint8_t parmode;
      uint8_t polling;
      uint8_t selftimed;
      uint8_t lockbytes;
      uint8_t fusebytes;
      uint8_t flashpoll;
      uint16_t eeprompoll;
      uint16_t pagesize;
      uint16_t eepromsize;
      uint32_t flashsize;
    }
    parameter;
    
    parameter param;
    
    // this provides a heartbeat on pin 9, so you can tell the software is running.
    uint8_t hbval = 128;
    int8_t hbdelta = 8;
    void heartbeat() {
      static unsigned long last_time = 0;
      unsigned long now = millis();
      if ((now - last_time) < 40)
        return;
      last_time = now;
      if (hbval > 192) hbdelta = -hbdelta;
      if (hbval < 32) hbdelta = -hbdelta;
      hbval += hbdelta;
      analogWrite(LED_HB, hbval);
    }
    
    static bool rst_active_high;
    
    void reset_target(bool reset) {
      digitalWrite(RESET, ((reset && rst_active_high) || (!reset && !rst_active_high)) ? HIGH : LOW);
    }
    
    void loop(void) {
      
      // is pmode active?
      if (pmode) {
        digitalWrite(LED_PMODE, HIGH);
      } else {
        digitalWrite(LED_PMODE, LOW);
      }
      // is there an error?
      if (error) {
        digitalWrite(LED_ERR, HIGH);
      } else {
        digitalWrite(LED_ERR, LOW);
      }
    
      // light the heartbeat LED
      heartbeat();
      if (SERIAL.available()) {
        avrisp();
      }
    }
    
    uint8_t getch() {
      while (!SERIAL.available());
      return SERIAL.read();
    }
    void fill(int n) {
      for (int x = 0; x < n; x++) {
        buff[x] = getch();
      }
    }
    
    #define PTIME 30
    void pulse(int pin, int times) {
      do {
        digitalWrite(pin, HIGH);
        delay(PTIME);
        digitalWrite(pin, LOW);
        delay(PTIME);
      } while (times--);
    }
    
    void prog_lamp(int state) {
      if (PROG_FLICKER) {
        digitalWrite(LED_PMODE, state);
      }
    }
    
    uint8_t spi_transaction(uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
      SPI.transfer(a);
      SPI.transfer(b);
      SPI.transfer(c);
      return SPI.transfer(d);
    }
    
    void empty_reply() {
      if (CRC_EOP == getch()) {
        SERIAL.print((char)STK_INSYNC);
        SERIAL.print((char)STK_OK);
      } else {
        error++;
        SERIAL.print((char)STK_NOSYNC);
      }
    }
    
    void breply(uint8_t b) {
      if (CRC_EOP == getch()) {
        SERIAL.print((char)STK_INSYNC);
        SERIAL.print((char)b);
        SERIAL.print((char)STK_OK);
      } else {
        error++;
        SERIAL.print((char)STK_NOSYNC);
      }
    }
    
    void get_version(uint8_t c) {
      switch (c) {
        case 0x80:
          breply(HWVER);
          break;
        case 0x81:
          breply(SWMAJ);
          break;
        case 0x82:
          breply(SWMIN);
          break;
        case 0x93:
          breply('S'); // serial programmer
          break;
        default:
          breply(0);
      }
    }
    
    void set_parameters() {
      // call this after reading paramter packet into buff[]
      param.devicecode = buff[0];
      param.revision   = buff[1];
      param.progtype   = buff[2];
      param.parmode    = buff[3];
      param.polling    = buff[4];
      param.selftimed  = buff[5];
      param.lockbytes  = buff[6];
      param.fusebytes  = buff[7];
      param.flashpoll  = buff[8];
      // ignore buff[9] (= buff[8])
      // following are 16 bits (big endian)
      param.eeprompoll = beget16(&buff[10]);
      param.pagesize   = beget16(&buff[12]);
      param.eepromsize = beget16(&buff[14]);
    
      // 32 bits flashsize (big endian)
      param.flashsize = buff[16] * 0x01000000
                        + buff[17] * 0x00010000
                        + buff[18] * 0x00000100
                        + buff[19];
    
      // avr devices have active low reset, at89sx are active high
      rst_active_high = (param.devicecode >= 0xe0);
    }
    
    void start_pmode() {
    
      // Reset target before driving PIN_SCK or PIN_MOSI
    
      // SPI.begin() will configure SS as output,
      // so SPI master mode is selected.
      // We have defined RESET as pin 10,
      // which for many arduino's is not the SS pin.
      // So we have to configure RESET as output here,
      // (reset_target() first sets the correct level)
      reset_target(true);
      pinMode(RESET, OUTPUT);
      SPI.begin();
      SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
    
      // See avr datasheets, chapter "SERIAL_PRG Programming Algorithm":
    
      // Pulse RESET after PIN_SCK is low:
      digitalWrite(PIN_SCK, LOW);
      delay(20); // discharge PIN_SCK, value arbitrally chosen
      reset_target(false);
      // Pulse must be minimum 2 target CPU clock cycles
      // so 100 usec is ok for CPU speeds above 20KHz
      delayMicroseconds(100);
      reset_target(true);
    
      // Send the enable programming command:
      delay(50); // datasheet: must be > 20 msec
      spi_transaction(0xAC, 0x53, 0x00, 0x00);
      pmode = 1;
    }
    
    void end_pmode() {
      SPI.end();
      // We're about to take the target out of reset
      // so configure SPI pins as input
      pinMode(PIN_MOSI, INPUT);
      pinMode(PIN_SCK, INPUT);
      reset_target(false);
      pinMode(RESET, INPUT);
      pmode = 0;
    }
    
    void universal() {
      uint8_t ch;
    
      fill(4);
      ch = spi_transaction(buff[0], buff[1], buff[2], buff[3]);
      breply(ch);
    }
    
    void flash(uint8_t hilo, unsigned int addr, uint8_t data) {
      spi_transaction(0x40 + 8 * hilo,
                      addr >> 8 & 0xFF,
                      addr & 0xFF,
                      data);
    }
    void commit(unsigned int addr) {
      if (PROG_FLICKER) {
        prog_lamp(LOW);
      }
      spi_transaction(0x4C, (addr >> 8) & 0xFF, addr & 0xFF, 0);
      if (PROG_FLICKER) {
        delay(PTIME);
        prog_lamp(HIGH);
      }
    }
    
    unsigned int current_page() {
      if (param.pagesize == 32) {
        return here & 0xFFFFFFF0;
      }
      if (param.pagesize == 64) {
        return here & 0xFFFFFFE0;
      }
      if (param.pagesize == 128) {
        return here & 0xFFFFFFC0;
      }
      if (param.pagesize == 256) {
        return here & 0xFFFFFF80;
      }
      return here;
    }
    
    
    void write_flash(int length) {
      fill(length);
      if (CRC_EOP == getch()) {
        SERIAL.print((char) STK_INSYNC);
        SERIAL.print((char) write_flash_pages(length));
      } else {
        error++;
        SERIAL.print((char) STK_NOSYNC);
      }
    }
    
    uint8_t write_flash_pages(int length) {
      int x = 0;
      unsigned int page = current_page();
      while (x < length) {
        if (page != current_page()) {
          commit(page);
          page = current_page();
        }
        flash(LOW, here, buff[x++]);
        flash(HIGH, here, buff[x++]);
        here++;
      }
    
      commit(page);
    
      return STK_OK;
    }
    
    #define EECHUNK (32)
    uint8_t write_eeprom(unsigned int length) {
      // here is a word address, get the byte address
      unsigned int start = here * 2;
      unsigned int remaining = length;
      if (length > param.eepromsize) {
        error++;
        return STK_FAILED;
      }
      while (remaining > EECHUNK) {
        write_eeprom_chunk(start, EECHUNK);
        start += EECHUNK;
        remaining -= EECHUNK;
      }
      write_eeprom_chunk(start, remaining);
      return STK_OK;
    }
    // write (length) bytes, (start) is a byte address
    uint8_t write_eeprom_chunk(unsigned int start, unsigned int length) {
      // this writes byte-by-byte,
      // page writing may be faster (4 bytes at a time)
      fill(length);
      prog_lamp(LOW);
      for (unsigned int x = 0; x < length; x++) {
        unsigned int addr = start + x;
        spi_transaction(0xC0, (addr >> 8) & 0xFF, addr & 0xFF, buff[x]);
        delay(45);
      }
      prog_lamp(HIGH);
      return STK_OK;
    }
    
    void program_page() {
      char result = (char) STK_FAILED;
      unsigned int length = 256 * getch();
      length += getch();
      char memtype = getch();
      // flash memory @here, (length) bytes
      if (memtype == 'F') {
        write_flash(length);
        return;
      }
      if (memtype == 'E') {
        result = (char)write_eeprom(length);
        if (CRC_EOP == getch()) {
          SERIAL.print((char) STK_INSYNC);
          SERIAL.print(result);
        } else {
          error++;
          SERIAL.print((char) STK_NOSYNC);
        }
        return;
      }
      SERIAL.print((char)STK_FAILED);
      return;
    }
    
    uint8_t flash_read(uint8_t hilo, unsigned int addr) {
      return spi_transaction(0x20 + hilo * 8,
                             (addr >> 8) & 0xFF,
                             addr & 0xFF,
                             0);
    }
    
    char flash_read_page(int length) {
      for (int x = 0; x < length; x += 2) {
        uint8_t low = flash_read(LOW, here);
        SERIAL.print((char) low);
        uint8_t high = flash_read(HIGH, here);
        SERIAL.print((char) high);
        here++;
      }
      return STK_OK;
    }
    
    char eeprom_read_page(int length) {
      // here again we have a word address
      int start = here * 2;
      for (int x = 0; x < length; x++) {
        int addr = start + x;
        uint8_t ee = spi_transaction(0xA0, (addr >> 8) & 0xFF, addr & 0xFF, 0xFF);
        SERIAL.print((char) ee);
      }
      return STK_OK;
    }
    
    void read_page() {
      char result = (char)STK_FAILED;
      int length = 256 * getch();
      length += getch();
      char memtype = getch();
      if (CRC_EOP != getch()) {
        error++;
        SERIAL.print((char) STK_NOSYNC);
        return;
      }
      SERIAL.print((char) STK_INSYNC);
      if (memtype == 'F') result = flash_read_page(length);
      if (memtype == 'E') result = eeprom_read_page(length);
      SERIAL.print(result);
    }
    
    void read_signature() {
      if (CRC_EOP != getch()) {
        error++;
        SERIAL.print((char) STK_NOSYNC);
        return;
      }
      SERIAL.print((char) STK_INSYNC);
      uint8_t high = spi_transaction(0x30, 0x00, 0x00, 0x00);
      SERIAL.print((char) high);
      uint8_t middle = spi_transaction(0x30, 0x00, 0x01, 0x00);
      SERIAL.print((char) middle);
      uint8_t low = spi_transaction(0x30, 0x00, 0x02, 0x00);
      SERIAL.print((char) low);
      SERIAL.print((char) STK_OK);
    }
    //////////////////////////////////////////
    //////////////////////////////////////////
    
    
    ////////////////////////////////////
    ////////////////////////////////////
    void avrisp() {
      uint8_t ch = getch();
      switch (ch) {
        case '0': // signon
          error = 0;
    
          if(! initSent) empty_reply();
          initSent = 1;
    
          break;
        case '1': 
          if (getch() == CRC_EOP) {
            SERIAL.print((char) STK_INSYNC);
            SERIAL.print("AVR ISP");
            SERIAL.print((char) STK_OK);
          }
          else {
            error++;
            SERIAL.print((char) STK_NOSYNC);
          }
          break;
        case 'A':
          get_version(getch());
          break;
        case 'B':
          fill(20);
          set_parameters();
          empty_reply();
          break;
        case 'E': // extended parameters - ignore for now
          fill(5);
          empty_reply();
          break;
        case 'P':
          if (!pmode)
            start_pmode();
          empty_reply();
          break;
        case 'U': // set address (word)
          here = getch();
          here += 256 * getch();
          empty_reply();
          break;
    
        case 0x60: //STK_PROG_FLASH
          getch(); // low addr
          getch(); // high addr
          empty_reply();
          break;
        case 0x61: //STK_PROG_DATA
          getch(); // data
          empty_reply();
          break;
    
        case 0x64: //STK_PROG_PAGE
          program_page();
          break;
    
        case 0x74: //STK_READ_PAGE 't'
          read_page();
          break;
    
        case 'V': //0x56
          universal();
          break;
        case 'Q': //0x51
          error = 0;
          end_pmode();
          empty_reply();
          break;
    
        case 0x75: //STK_READ_SIGN 'u'
          read_signature();
          break;
    
        // expecting a command, not CRC_EOP
        // this is how we can get back in sync
        case CRC_EOP:
          error++;
          SERIAL.print((char) STK_NOSYNC);
          break;
    
        // anything else we will return STK_UNKNOWN
        default:
          error++;
          if (CRC_EOP == getch())
            SERIAL.print((char)STK_UNKNOWN);
          else
            SERIAL.print((char)STK_NOSYNC);
      }
    }
    
    
    next, I tried to execute avrdude command, there were problem verifying lock bit like pistrix case.

    Code: Select all

    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "~/nava/tool/bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : avrisp
             Overriding Baud Rate          : 19200
    
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel AVR ISP
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x15
             Hardware Version: 32767
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.04s
    
    avrdude: Device signature = 0x1e9705 (probably m1284p)
    avrdude: erasing chip
    avrdude: reading input file "0x3F"
    avrdude: writing lock (1 bytes):
    
    Writing |                                                    | 0% 0.00s ***failed;  
    Writing | ################################################## | 100% 0.13s
    
    avrdude: 1 bytes of lock written
    avrdude: verifying lock memory against 0x3F:
    avrdude: load data lock data from input file 0x3F:
    avrdude: input file 0x3F contains 1 bytes
    avrdude: reading on-chip lock data:
    
    Reading | ################################################## | 100% 0.02s
    
    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0000
             0x0f != 0x3f
    avrdude: verification error; content mismatch
    
    avrdude done.  Thank you.
    
    
    I modified command value of bit "0x3F" to "0x0F", it look like success.

    Code: Select all

    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "~/nava/tool/bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : avrisp
             Overriding Baud Rate          : 19200
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel AVR ISP
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x15
             Hardware Version: 32767
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.05s
    
    avrdude: Device signature = 0x1e9705 (probably m1284p)
    avrdude: erasing chip
    avrdude: reading input file "0x0F"
    avrdude: writing lock (1 bytes):
    
    Writing | ################################################## | 100% 0.01s
    
    avrdude: 1 bytes of lock written
    avrdude: verifying lock memory against 0x0F:
    avrdude: load data lock data from input file 0x0F:
    avrdude: input file 0x0F contains 1 bytes
    avrdude: reading on-chip lock data:
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude: verifying ...
    avrdude: 1 bytes of lock verified
    
    avrdude done.  Thank you.
    
    then I executed commands efuse, hfuse and lfuse, these were success.
    next, I tried execute writing Nava_v1_020.hex to flash. however, verifying error occurred.

    Code: Select all

    
    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "~/nava/tool/bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : avrisp
             Overriding Baud Rate          : 19200
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel AVR ISP
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x15
             Hardware Version: 32767
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.04s
    
    avrdude: Device signature = 0x1e9705 (probably m1284p)
    avrdude: safemode: hfuse reads as DC
    avrdude: safemode: efuse reads as FD
    avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "~/nava/tool/Nava_v1_020.hex"
    avrdude: writing flash (39292 bytes):
    
    Writing | ################################################## | 100% 39.40s
    
    avrdude: 39292 bytes of flash written
    avrdude: verifying flash memory against ~/nava/tool/Nava_v1_020.hex:
    avrdude: load data flash data from input file ~/nava/tool/Nava_v1_020.hex:
    avrdude: input file ~/nava/tool/Nava_v1_020.hex contains 39292 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 24.62s
    
    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0002
             0xf2 != 0xf8
    avrdude: verification error; content mismatch
    
    avrdude: safemode: hfuse reads as DC
    avrdude: safemode: efuse reads as FD
    avrdude: safemode: Fuses OK (E:FD, H:DC, L:D6)
    
    avrdude done.  Thank you.
    
    and following log with add more verbose.
    https://www.dropbox.com/s/0ohfp9t6qa7ev ... se.log.txt

    additional, I notice that Error LED lighted up while executing command.

    Should I tried Arduino UNO not duemilanove?
    please help or further instruction.

    Thank you.
    Last edited by junk16 on Jan 6th, '17, 08:27, edited 2 times in total.
  • Junk16,

    Try to replace "avrIsp" programmer name in the bat file by "arduino".

    Best regards,
    e-licktronic
    Best regards,
    e-licktronic
  • e-licktronic

    I tried to replace programmer 'arduino'.

    Code: Select all

    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ~/nava/tool/bin/avrdude.conf -c arduino -p m1284p -b 19200 -U flash:w:~/nava/tool/Nava_v1_020.hex:i -v
    
    but it is same result like before programmer avrIsp.
    following is execution log.

    Code: Select all

    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "~/nava/tool/bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : arduino
             Overriding Baud Rate          : 19200
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : Arduino
             Description     : Arduino
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x15
             Hardware Version: 32767
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude: Device signature = 0x1e9705 (probably m1284p)
    avrdude: safemode: hfuse reads as DC
    avrdude: safemode: efuse reads as FD
    avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "~/nava/tool/bin/Nava_v1_020.hex"
    avrdude: writing flash (39292 bytes):
    
    Writing | ################################################## | 100% 39.39s
    
    avrdude: 39292 bytes of flash written
    avrdude: verifying flash memory against ~/nava/tool/bin/Nava_v1_020.hex:
    avrdude: load data flash data from input file ~/nava/tool/bin/Nava_v1_020.hex:
    avrdude: input file ~/nava/tool/bin/Nava_v1_020.hex contains 39292 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 24.62s
    
    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0002
             0xf2 != 0xf8
    avrdude: verification error; content mismatch
    
    avrdude: safemode: hfuse reads as DC
    avrdude: safemode: efuse reads as FD
    avrdude: safemode: Fuses OK (E:FD, H:DC, L:D6)
    
    avrdude done.  Thank you.
    
    adding more verbose log.
    https://drive.google.com/file/d/0ByZNlu ... sp=sharing.

    thank you.
  • e-licktronic wrote:Pistrix,

    Replace the value "0x0F" on the last line of the Nava_v_1_020_All.bat file by "0x3F"
    Save the file and try again to burn your chip

    Best regards,
    e-licktronic
    That results in the last line failing verification just as the first line does.

    But if I change the "0x3F" in the first line to "0x0F" it passes verification.

    However the "Nava_v1_020.hex" file still fails verification:
    avrdude.exe: verification error, first mismatch at byte 0x0002
    0xf2 != 0xf8
    avrdude.exe: verification error; content mismatch
    Just looked at his code quotations, It seems junk16 and I are getting identical results..
  • Pistrix,

    On the Nava ICSP connector "MISO" and "MOSI" are reversed.
    You should switch this two pins.

    Try it and let me know

    Best regards,
    e-licktronic
    Best regards,
    e-licktronic
  • e-licktronic
    On the Nava ICSP connector "MISO" and "MOSI" are reversed.
    You should switch this two pins.
    I have tried, and signature error occurred.

    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ./bin/avrdude.conf -c avrisp -p m1284p -b 19200 -u -e -U lock:w:0x0F:m -v

    Code: Select all

    
    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "./bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : avrisp
             Overriding Baud Rate          : 19200
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel AVR ISP
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x15
             Hardware Version: 32767
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.05s
    
    avrdude: Device signature = 0xffffff (probably .reduced_core_tiny) (retrying)
    
    Reading | ################################################## | 100% 0.04s
    
    avrdude: Device signature = 0xffffff (probably .reduced_core_tiny) (retrying)
    
    Reading | ################################################## | 100% 0.05s
    
    avrdude: Device signature = 0xff0000
    avrdude: Expected signature for ATmega1284P is 1E 97 05
             Double check chip, or use -F to override this check.
    
    avrdude done.  Thank you.
    
    /usr/local/bin/avrdude -P /dev/cu.usbserial-A900abz5 -C ./bin/avrdude.conf -c avrisp -p m1284p -b 19200 -U flash:w:./Nava_v1_020.hex:i -v

    Code: Select all

    
    avrdude: Version 6.3, compiled on Mar 15 2016 at 21:26:45
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "./bin/avrdude.conf"
             User configuration file is "/Users/junk16/.avrduderc"
             User configuration file does not exist or is not a regular file, skipping
    
             Using Port                    : /dev/cu.usbserial-A900abz5
             Using Programmer              : avrisp
             Overriding Baud Rate          : 19200
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
             AVR Part                      : ATmega1284P
             Chip Erase delay              : 55000 us
             PAGEL                         : PD7
             BS2                           : PA0
             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    10   128    0 no       4096    8      0  9000  9000 0xff 0xff
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0xff 0xff
               lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel AVR ISP
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x15
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x15
             Hardware Version: 32767
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.05s
    
    avrdude: Device signature = 0xffffff (probably .reduced_core_tiny) (retrying)
    
    Reading | ################################################## | 100% 0.05s
    
    avrdude: Device signature = 0xffffff (probably .reduced_core_tiny) (retrying)
    
    Reading | ################################################## | 100% 0.04s
    
    avrdude: Device signature = 0xffffff (probably .reduced_core_tiny)
    avrdude: Yikes!  Invalid device signature.
             Double check connections and try again, or use -F to override
             this check.
    
    
    avrdude done.  Thank you.
    
    
    regard
  • e-licktronic wrote:Pistrix,

    On the Nava ICSP connector "MISO" and "MOSI" are reversed.
    You should switch this two pins.

    Try it and let me know

    Best regards,
    e-licktronic
    Yes, I noticed the NAVA ICSP pins. I tried it both ways. When the MISO/MOSI pins are switched, avrdude gives critical errors (same results as junk16).
  • pistrix, junk16,

    Do you have an other *.HEX file to burn on your Atmega1284p ?
    To know if the problem come from the program, the chip or your IDE burner.

    Best regards,
    e-licktronic
    Best regards,
    e-licktronic
  • It does seem to successfully burn and verify the "BootNava.hex" step of the process, but I suppose that's a different part of the chip's memory.

    I noticed that the Arduino site says to add a 10uf capacitor between reset and ground on the Arduino Uno (as well as the Duemilanove) when using it with ArduinoISP. I hadn't done this before, but have added it now. It didn't change my results though.

    I tried to burn the Yocto 2.0 firmware instead of the Nava firmware. It doesn't succeed either, with similar results.

    Code: Select all

    avrdude.exe: input file c:\tools\Yocto_2_0.hex contains 26976 bytes
    avrdude.exe: reading on-chip flash data:
    
    Reading | ################################################## | 100% 18.99s
    
    avrdude.exe: verifying ...
    avrdude.exe: verification error, first mismatch at byte 0x0002
                 0xf2 != 0x89
    avrdude.exe: verification error; content mismatch