Coder Social home page Coder Social logo

avrdudess's Introduction

AVRDUDESS - A GUI for AVRDUDE

This is a GUI for AVRDUDE (https://github.com/avrdudes/avrdude/).

https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/

AVRDUDESS pic

Windows:

Requires .NET Framework 2.0 SP1 or later. All systems since Windows Vista will have the required version already installed.

Linux & macOS:

Can be ran using Mono (http://www.mono-project.com).
Has not been tested on macOS, but should work. Might need the --arch=32 argument.

mono --arch=32 avrdudess.exe

Installing on Ubuntu 18.04 and later:

Install Mono (this is the minimum required, you can use mono-complete for a full install):

sudo apt install libmono-system-windows-forms4.0-cil

On older versions of Ubuntu you might need to use libmono-winforms2.0-cil instead.

Install AVRDUDE and AVR Binutils (for avr-size):

sudo apt install avrdude binutils-avr

Run AVRDUDESS with Mono, you might have to run as root (sudo) so that AVRDUDE can access ports if you haven't changed any permissions or rules.d stuff:

mono avrdudess.exe

Building:

You will need Microsoft Visual Studio 2015 or later installed (older might work too). Open ./src/avrdudess.sln and click the 'Start' button at the top and it will build and run AVRDUDESS.
You can find the output in ./src/avrdudess/bin/Debug/, or ./src/avrdudess/bin/Release/ if you chose to build for Release (the drop down box second from the left of the Start button is where you can choose the configuration).

Making the Installer:

You will need Inno Setup installed. Once you've used Visual Studio to build the Release version of AVRDUDESS, run ./installer/installer.bat and the installer exe will appear in the same directory.

avrdudess's People

Contributors

adnbr avatar der-pw avatar fareeha-takanashi avatar gmagician avatar jacky4566 avatar lucas458 avatar lumitoluma avatar oless-n avatar radiolee avatar redsnake64 avatar ta1aub avatar zakkemble avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

avrdudess's Issues

Support for ATmega16u4

Oddly enough AVRDUDE does not currently support the ATmega16u4.

Below is the modified config for this chip.
Ref - https://gist.github.com/davepeake/0df41e77678babfe1e0b849a448abefd

#------------------------------------------------------------
# ATmega16u4
#------------------------------------------------------------

part
    id               = "m16u4";
    desc             = "ATmega16U4";
    signature        = 0x1e 0x94 0x88;
    usbpid           = 0x2ff4;
    has_jtag         = yes;
#    stk500_devcode   = 0xB2;
#    avr910_devcode   = 0x43;
    chip_erase_delay = 9000;
    pagel            = 0xD7;
    bs2              = 0xA0;
    reset            = dedicated;
    pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
                       "x x x x  x x x x    x x x x  x x x x";

    chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 0  0 0 0 0",
                       "x x x x  x x x x    x x x x  x x x x";

    timeout		= 200;
    stabdelay		= 100;
    cmdexedelay		= 25;
    synchloops		= 32;
    bytedelay		= 0;
    pollindex		= 3;
    pollvalue		= 0x53;
    predelay		= 1;
    postdelay		= 1;
    pollmethod		= 1;

    pp_controlstack     =
        0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
        0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
        0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
        0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay    = 100;
    progmodedelay       = 0;
    latchcycles         = 5;
    togglevtg           = 1;
    poweroffdelay       = 15;
    resetdelayms        = 1;
    resetdelayus        = 0;
    hvleavestabdelay    = 15;
    chiperasepulsewidth = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    idr                 = 0x31;
    spmcr               = 0x57;
    rampz               = 0x3b;
    allowfullpagebitstream = no;

    ocdrev              = 3;

    memory "eeprom"
        paged           = no; /* leave this "no" */
        page_size       = 4;  /* for parallel programming */
        size            = 512;
        min_write_delay = 9000;
        max_write_delay = 9000;
        readback_p1     = 0x00;
        readback_p2     = 0x00;
        read            = "  1   0   1   0      0   0   0   0",
                          "  x   x   x   x      x a10  a9  a8",
                          " a7  a6  a5  a4     a3  a2  a1  a0",
                          "  o   o   o   o      o   o   o   o";

        write           = "  1   1   0   0      0   0   0   0",
                          "  x   x   x   x      x a10  a9  a8",
                          " a7  a6  a5  a4     a3  a2  a1  a0", 
                          "  i   i   i   i      i   i   i   i";

	loadpage_lo	= "  1   1   0   0      0   0   0   1",
			  "  0   0   0   0      0   0   0   0",
			  "  0   0   0   0      0  a2  a1  a0",
			  "  i   i   i   i      i   i   i   i";

	writepage	= "  1   1   0   0      0   0   1   0",
			  "  0   0   x   x      x a10  a9  a8",
			  " a7  a6  a5  a4     a3   0   0   0",
			  "  x   x   x   x      x   x   x   x";

	mode		= 0x41;
	delay		= 20;
	blocksize	= 4;
	readsize	= 256;
      ;

    memory "flash"
        paged           = yes;
        size            = 16384;
        page_size       = 128;
        num_pages       = 128;
        min_write_delay = 4500;
        max_write_delay = 4500;
        readback_p1     = 0x00;
        readback_p2     = 0x00;
        read_lo         = "  0   0   1   0      0   0   0   0",
                          "  0 a14 a13 a12    a11 a10  a9  a8",
                          " a7  a6  a5  a4     a3  a2  a1  a0",
                          "  o   o   o   o      o   o   o   o";

        read_hi         = "  0   0   1   0      1   0   0   0",
                          "  0 a14 a13 a12    a11 a10  a9  a8",
                          " a7  a6  a5  a4     a3  a2  a1  a0",
                          "  o   o   o   o      o   o   o   o";

        loadpage_lo     = "  0   1   0   0      0   0   0   0",
                          "  x   x   x   x      x   x   x   x",
                          "  x   x  a5  a4     a3  a2  a1  a0",
                          "  i   i   i   i      i   i   i   i";

        loadpage_hi     = "  0   1   0   0      1   0   0   0",
                          "  x   x   x   x      x   x   x   x",
                          "  x   x  a5  a4     a3  a2  a1  a0",
                          "  i   i   i   i      i   i   i   i";

        writepage       = "  0   1   0   0      1   1   0   0",
                          " a15 a14 a13 a12    a11 a10  a9  a8",
                          " a7  a6   x   x      x   x   x   x",
                          "  x   x   x   x      x   x   x   x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 128;
	readsize	= 256;
      ;

    memory "lfuse"
        size            = 1;
        write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 0 0 0",
                          "x x x x  x x x x  i i i i  i i i i";

        read            = "0 1 0 1  0 0 0 0  0 0 0 0  0 0 0 0",
                          "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
      ;

    memory "hfuse"
        size            = 1;
        write           = "1 0 1 0  1 1 0 0  1 0 1 0  1 0 0 0",
                          "x x x x  x x x x  i i i i  i i i i";

        read            = "0 1 0 1  1 0 0 0  0 0 0 0  1 0 0 0",
                          "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
      ;

    memory "efuse"
        size            = 1;
        write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 1 0 0",
                          "x x x x  x x x x  x x x x  i i i i";

        read            = "0 1 0 1  0 0 0 0  0 0 0 0  1 0 0 0",
                          "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
      ;

    memory "lock"
        size            = 1;
        read            = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0",
                          "x x x x  x x x x   x x o o  o o o o";

        write           = "1 0 1 0  1 1 0 0   1 1 1 x  x x x x",
                          "x x x x  x x x x   1 1 i i  i i i i";
        min_write_delay = 9000;
        max_write_delay = 9000;
      ;

    memory "calibration"
        size            = 1;
        read            = "0 0 1 1  1 0 0 0    x x x x  x x x x",
                          "0 0 0 0  0 0 0 0    o o o o  o o o o";
      ;

    memory "signature"
        size            = 3;
        read            = "0  0  1  1   0  0  0  0   x  x  x  x   x  x  x  x",
                          "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
      ;
  ;

Leonardo support

I have my own frontend just for Arduino Leonardo's and similar boards that use the Catarina bootloader that I currently use and this is the code I use to program them. I hope it is of use to you.

                mySerial.Close();
                Thread.Sleep(500);

                int OldBaud = mySerial.BaudRate;
                mySerial.BaudRate = 1200; // toggles the Leonardo into programming mode
                mySerial.Open();     
                Thread.Sleep(1000);
                mySerial.Close();
                Thread.Sleep(4000);
                int progPortNum;
                //Note that the port is whatever com port it was before + 1
                //So I grab the port number and add one to it here.
                int.TryParse(mySerial.PortName.Replace("COM", ""), out progPortNum);

                var app = new ConsoleAppLauncher.ConsoleApp(avrDudePath, String.Format(@"""-C{0}"" -v -patmega32u4 -cavr109 -P{1} -b57600 -D -Uflash:w:{2}:i", confPath, String.Format("COM{0}", progPortNum + 1), HexPath));
                app.ConsoleOutput += updateListBox;

Fuse read fails on some MCUs

Since v2.8 if the MCU doesn't have all high, low and extended fuses then reading fuses will fail, like on the ATmega8 which only has high and low.
Need to read only the fuses that the MCU supports, which can be found from avrdude.conf. Same thing for writing fuses.

Remove Mono icon from docky and leave only an icon for AVRDUDDESS in Ubuntu

In case someone is interested here the script that I did to remove Mono icon from docky.

#!/bin/bash
for ((var = 0; var < 5; var++)); do
    if((var == 0)); then
        nohup mono avrdudess.exe --runtime=4 > program.out &
    fi
    sleep 1
    xprop -name "AVRDUDESS 2.8 (avrdude version 6.3)" -f WM_CLASS 8s -set WM_CLASS "avrdudessicone"
done

Add StartupWMClass=avrdudessicone to .desktop file.

Adjust window title AVRDUDESS 2.8 (avrdude version 6.3) if needed.

I'm using binaries since setup-AVRDUDESS-2.8.exe doesn't not work for me.

avrdudess

@zkemble can you add a StartupWMClass to your script please?

Update language files

Language files need to be updated with translations for new strings. Currently French, Russian, Polish and Chinese.

Push flash in atemga16

I have a project in atmega16. I using USP ISP to push the hex file. But, I don't know how to setup. Please help me

image
av00700-01-thumbnail-1080x1080-70

Release for avrdude-6.3

Please release AVRDUDESS for avrdude-6.3. Ubuntu use avrdude-6.3, AVRDUDESS can't detect chip anymore. Already compiled latest code in linux, and AVRDUDESS can detect it. But maybe your official release be better.

JIT error with 2.10 version

Just updated AVRDUDESS from 2.8 to 2.10; When I am starting up AVRDUDESS 2.10 an error appears with the following text:

************** Tekst van uitzondering **************
System.NullReferenceException: De objectverwijzing is niet op een exemplaar van een object ingesteld.
bij avrdudess.CmdLine.addWriteFuses()
bij avrdudess.CmdLine.generate()
bij avrdudess.Form1.event_controlChanged(Object sender, EventArgs e)
bij System.Windows.Forms.CheckBox.OnCheckedChanged(EventArgs e)
bij System.Windows.Forms.CheckBox.set_CheckState(CheckState value)
bij avrdudess.Form1.set_setFuses(Boolean value)
bij avrdudess.Form1.loadPresetData(PresetData item)
bij avrdudess.Form1.Form1_Load(Object sender, EventArgs e)
bij System.Windows.Forms.Form.OnLoad(EventArgs e)
bij System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bij System.Windows.Forms.Control.CreateControl()
bij System.Windows.Forms.Control.WmShowWindow(Message& m)
bij System.Windows.Forms.Control.WndProc(Message& m)
bij System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bij System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

(I am sorry that I am using the dutch version)

I can choose between continue or shutdown. When I continue the interface of AVRDUDESS is a mess.
After reinstalling AVRDUDESS 2.10 I am still getting the same error. When I downgrade to 2.8 there is no error anymore.

avr-size.exe is not able to get filepath when there are spaces between filepath

avr-size.exe is unable to get filepath when there are spaces between hexfile path for example:
C:\Users\Hello World\Desktop\New File.hex

Although programmer work fine, but due to this memory bar above flash textbox is not visible.
I've fixed the issue just replace these lines in the code.
File: avr-size.cs

public int getSize(string file)
{
int totalSize = INVALID;
//CHANGE 1
file = @"" + file;
if (File.Exists(file))
{
//CHANGE 2
file = """ + file + """;
if (launch(file, null, null, OutputTo.Log))
{
waitForExit();
totalSize = parse();
}
}
return totalSize;
}

Update .NET version

Requires .NET Framework 2.0 SP1.

🤢

On Windows 10 and maybe 8 and 8.1 you'll probably get a prompt about installing .NET Framework 3.5 (which includes .NET 2.0), click install and it will do the rest for you.

There is no sane reason to keep using the horribly outdated .NET <=3.5. The reason is that any .NET above, should be compatible with whats below. At least this is true in more recent versions, since there are some methods to allow to use .NET < using xml config files. TBH. I have never done this, but have seen it done here and there.

BUT. I do know, that no sane person want to pollute their system by having to install anything 3.5 or less. So please consider updating the app. 👍

Bit clock (-B) drop down values are outputting wrong values for -B in command line.

Select USBasp from Programmer list. select a bit clock and observe incorrect values on -B in in the command line output at the bottom. Also there is no 16 KHz or 32 KHz. There is however 46.88 KHz and 20.96 KHz which is not in the drop down list but show up when selecting 16 KHz and 32 KHz respectively.

Edit:
After testing it appears the drop down list value is actually used in the calls to Avrdude. The incorrect values only show up in the command line output at the bottom.

Using the flashFile parameter in preset.xml file

Hello!

I have one of my own presets made... But I cant get the flashFile parameter to work.

Here is what I am trying... I'm sure I am missing something simple.
<flashFile />C:\firmware.hex</flashFile>

Thank you for any help.

Curtis

Consider using the programmer id in the programmer drop-down list

It doesn't make much sense (to me) to use the description as the selector text for the (-p) programmer.
It would be much better to have the original programmer id instead, and then perhaps add the desciption as a mouse-over or additional text field after having selected.

Example:

People using BusPirate with avr dude use avrdude -p buspirate, whereas in avrdudess you need to scroll all the wa down to the bottom to find it under The Bus Pirate, which is not obvious at all.

Manjaro AVRDUDESS

Hello!

I am trying to use AVRDUDESS in Manjaro. I installed mono, but when I use the mono command, mono AVRDUDESS-2.13-setup.exe, the following error occurred:

The set 'AVRDUDESS-2.13-setup.exe' cannot be opened: the file does not contain a valid CIL image.

How can I correct that?

Thank you!

Record using Arduino Uno without microcontroller

Hello!
I'm here with another question kkk.

If I remove the Arduino Uno microcontroller and make connections on the other board, what would the settings be like for recording on my board?

I'm using only the Arduino Uno board recorder.

thanks in advance

Inno Setup 6 update

I built AVRDudess from the latest Github source. The .exe built without issue.

I did not have Inno Setup, so I installed the latest version. I had to modify installer/installer.bat to reflect the version change from 5 to 6. I also had to modify installer/avrduddess.iss to comment out several languages which are apparently not supported (yet?) in Inno Setup 6:

;Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl"
;Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
;Name: "scottishgaelic"; MessagesFile: "compiler:Languages\ScottishGaelic.isl"
;Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl"
;Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl"

Does not detect USBasp

Hello!

I have a USBasp recorder, but AVRDUDESS does not recognize it.
I tried avrdude on the command line and it seems to work.
I added the file to the rules and it still doesn't work.

Thanks in advance

Instructions on updating bits.xml to add support for ATTINY1626?

Hi,
I am using ATTINY 1626 and am unable to set fuses because they have not been defined. I added the signature to the XML file but that hard part still remains. Is there a document anywhere that explains how to update "bits.xml" file to add support for other chips?


	<mcu signature="1e9429" name="attiny1626">
		<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
		<low>CKSEL0,CKSEL1,,,SUT0,SUT1,CKOUT,CKDIV8</low>
		<ext>SELFPRGEN,,,,,,,</ext>
		<lock>LB1,LB2,,,,,,</lock>
	</mcu>

Arduino Uno ISP

Hello!

I am using Arduino Uno as an ISP to record to an Atmega328.
I recorded the ISP code on Arduino Uno.
My programmer is the Atmel AVR ISP and is giving a signature error when I try to detect the board.

Am I using the correct programmer method?

Thank you very much in advance

atm

www.engbedded.com website not available & "Fuse settings" feature/link does't work

The best solution for resolve issue is add the ability to modify link to the website in text (xml) configuration file (for emxample, in the config.xml file).
Yes, it more heavy case, in this case pattern of the link and arguments (fuses) should be described in the configuration file also.
Or hardcore - change website in the source code.

bit clock (-B)

i was trying to upload a hex file to test my atmega32, but i forgot to set the fuse bits for clock source selection, the code uploaded just fine but the delay function was much slower (i was using 12MHz crystal and the default settings was the internal 1MHz), i edited the fuse bits and uploaded the code, nothing bad so far, but when i tried to upload it again it gave me an error rc=-1 and that it can't set clock bit to specified value which was 1.5MHz.
is there a value i should use for clock bits (-B) corresponding to the selected frequency ?

Needs entry for "Arduino as ISP" sketch.

What should we select? Arduino? Atmel AVR ISP? Atmel STK500?

All are true.. None seem to work.

Arduino and Atmel STK500 do seem to communicate with the programmer, but incorrectly report the ACTUAL arduino's chip, the atmega328p when using Detect.... Should that be opened as a separate issue, maybe?

Avrdude is missing!

Hello!

I am trying to run avrdudess in manjaro, but it is giving this error: Gtk not found (missing LD_LIBRARY_PATH to libgtk-x11-2.0.so.0?), Using built-in colorscheme.

I don't know how to solve this, I'm not able to install this missing package.

Thank you very much in advance!

New action/button -

Add new button - "Erase chip".
This action should erase flash, eeprom and set default values of the fusebits (lockbit).

Yes, the application has checkbox "erase flash and EEPROM", but sometimes is necessary just erase the chip without programming the memory.

Improvement to the Polish translation from an actual Pole.

Hello there!
First of all, thank you so much for this program, it saved me a lot of time!
Second of all, i noticed a few translation typos.

  1. "Fuses and lock bits" shloud be translated to "Bezpieczniki i bity blokujące"
  2. "uC" seems a little bit off, since the full name is "Układy Scalone", i think it shloud be "Ukł. Scal.", it's way more clear, since we don't have a good acronym for the ICs, and we usually call them "Scalaki".
  3. "Nie zapisuj (-n)" shloud be "Nie pisz (-n)", since the original insinuates saving to a file. Same with "Nie weryfikuj po zapisaniu", shloud be "Nie weryfikuj po pisaniu".
  4. "Gadanie" shloud be "Szczegółowość wyjścia", since "Gadanie" is roughly the same thing as "Babbling"
  5. "Binary Raw" shloud be "Czysty binarny"

Other than that, i think it's a great translation and i am quite amazed at it, since Polish isn't particularly easy.
If you need any more details, you can message me on DMs in github or at [email protected]

Does not support newer TinyAVR0, 1, 2 parts with Atmel-ICE in UPDI mode

Tested the GUI with ATtiny1626 connected to Atmel-ICE in UPDI mode. AVRDudess displays the proper command string above the console area as the -p parameter says -p t1626 but when the command is issued to avrdude it actually sends -p m8

Using the very latest avrdude.conf and avrdude.exe copied from the megaTinyCore project.

Please add support for these newer ATTiny parts. They are very cool and provide a lot of functions in a small low-cost package. I prefer them to ATMega parts for small simple projects.

ATMEL ICE DRIVERS. Add to Readme.

More of an FYI. Maybe add this to the readme. For windows users with Atmel ICE.

Under AVRDUDE 6.3 I was forced to use these drivers:
FOR AVR DUDE
CMSIS libusb0 1.2.6.0
DATA GATEWAY WinUSB 42.0.2.0 OR libusb 1.2.6.0

For Atmel Studio
CMSIS HidUsb v6.1.7601 (Uninstall)
Gateway WinUSB 6.1.76

Under AVRDUDE 6.4+ you can now use the same drivers for both.
CMSIS HidUsb v6.1.7601
Gateway WinUSB 6.1.76

Zadig is a great tool for swapping drivers.

Clicking "Fuse settings" causes crash

Workaround: I searched the code and found the URL it is trying to open:
http://www.engbedded.com/fusecalc

System.ComponentModel.Win32Exception (0x80004005): Cannot find the specified file
  at System.Diagnostics.Process.StartWithShellExecuteEx (System.Diagnostics.ProcessStartInfo startInfo) [0x00102] in <6bc04dcac0a443ee834a449c98b8ed9d>:0 
  at System.Diagnostics.Process.Start () [0x00032] in <6bc04dcac0a443ee834a449c98b8ed9d>:0 
  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process.Start()
  at System.Diagnostics.Process.Start (System.Diagnostics.ProcessStartInfo startInfo) [0x0001b] in <6bc04dcac0a443ee834a449c98b8ed9d>:0 
  at System.Diagnostics.Process.Start (System.String fileName) [0x00006] in <6bc04dcac0a443ee834a449c98b8ed9d>:0 
  at avrdudess.Form1.linkLabel1_LinkClicked (System.Object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) [0x0014f] in <ee9c15179d05459a821ec33b7514f195>:0 
  at System.Windows.Forms.LinkLabel.OnLinkClicked (System.Windows.Forms.LinkLabelLinkClickedEventArgs e) [0x00019] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.LinkLabel.OnMouseUp (System.Windows.Forms.MouseEventArgs e) [0x00060] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) [0x00078] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x001b4] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.Label.WndProc (System.Windows.Forms.Message& m) [0x00017] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.LinkLabel.WndProc (System.Windows.Forms.Message& msg) [0x00000] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x0000b] in <a0f8b82443494dec9b517126f4032efe>:0 
  at System.Windows.Forms.NativeWindow.WndProc (System.IntPtr hWnd, System.Windows.Forms.Msg msg, System.IntPtr wParam, System.IntPtr lParam) [0x00085] in <a0f8b82443494dec9b517126f4032efe>:0 
mono --version
Mono JIT compiler version 6.12.0.107 (tarball Thu Dec 10 05:22:56 UTC 2020)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug 
	Interpreter:   yes
	LLVM:          yes(610)
	Suspend:       hybrid
	GC:            sgen (concurrent by default)

Ubuntu 18.04, but I'm using mono from this package repo: https://download.mono-project.com/repo/ubuntu

avrdude.conf location is not passed to avrdude

When avrdude is ran it is not passed a conf location (-C argument), so it uses the default location instead of the avrdude.conf that AVRDUDESS has been configured to use. Add option to pass conf location to avrdude.

Attiny10 and tpi interface support in the AVRDUDESS

Attiny10 has only tpi interface for programming. Some features in the AVRDUDESS has limited support for the attiny10 chip.

(1) Function of chip's detection doesn't work with attiny tpi interface.
for example, attiny10 cannot be detected, because command line for spi interface doesn't work with chip with tpi interface, see sample below:

: avrdude -u -c usbasp -P usb -B 8.0 -q -C avrdude.conf -p m8

Command line below works correctly for chip with the tpi interface :

: avrdude -u -c usbasp -P usb -B 8.0 -q -C avrdude.conf -p t10

(2) Also, please, add support attiny10 in the "Fuse && Lock bits" window
The sample is below:

<mcu signature="1e9003" name="attiny10">
	<high>,,,,,,,</high>
	<low>CKOUT,WDTON,RSTDISBL,,,,,</low>
	<ext>,,,,,,,</ext>
	<lock>LB1,LB2,,,,,,</lock>

Fuse programming for the new Attiny and Atmega's

I'd love to see the ability to program the fuses for the relatively new tinyAVR 0/1/2 and Atmega series (like mega3208/09, mega4808/09, AVR128DBxx. I use AVRDUDESS regularly for "mass" flashing (haha, 10, 20 boards or so) and to keep the wonderful AVRDUDESS for this would be highly appreciated. I'm aware that things are quite different here, compared to the good ol' HFUSE, LFUSE, EFUSE...
BTW: Programming of the mentioned chips via UPDI and jtag2UPDI programmer works fine in AVRDUDESS already, so the fuses thing cries out for implementation ;-)
I have quite some experience with .NET / C# development for WinForms applications; maybe I can assist? If you can give some pointers how to go I'd give it a try!

Improve MCU auto-detect

MCU auto-detect doesn't always work, depending on the programmer and MCU programming interface.

Auto-detect works by running avrdude with the chosen programmer and MCU set to ATmega8, since avrdude needs to have an MCU set before it will do anything. It then reports the device signature which we use to work out what MCU we're really talking to.
But this doesn't always work, for example, if an ATtiny10 is connected to an USBasp then auto-detect will fail because it is expecting an MCU with the usual SPI programming interface, but the ATtiny10 uses TPI.

This can probably be fixed by going through a list of MCUs that have different interfaces until one works and reports its signature. ATmega8 (SPI) -> ATtiny202 (UPDI) -> ATtiny10 (TPI) -> ATxmega16A4U (PDI) -> DebugWire? -> JTAG?

Simple uploader only mode

It would be nice if there were an uploader only mode or a simple mode just for boards that have known settings like most Arduino boards and clones. Also this would be a setting that the programmer should remember ie. if I reopen the app it should open back up in simple mode.

Basically just a hex file selection and drop down for selecting the board type.

Better interface with fuse calculator web site

I propose a simple modification to the "Fuse settings" link. It would be really useful if the fuse calculator was alreay in sync with the selected part and fuse settings possibly present in the GUI.
It would suffice to modify the linkLabel1_LinkClicked function by replacing it with the following code:

            string sParam, sURL = WEB_ADDR_FUSE_SETTINGS;

            if (cmbMCU.SelectedIndex != 0) {
                sParam = "?P=" + cmbMCU.Text;
                if (txtLFuse.Text != "") sParam += "&V_LOW=" + txtLFuse.Text;
                if (txtHFuse.Text != "") sParam += "&V_HIGH=" + txtHFuse.Text;                
                if (txtEFuse.Text != "") sParam += "&V_EXTENDED=" + txtEFuse.Text;
                if (txtLFuse.Text != "" || txtHFuse.Text != "" || txtEFuse.Text != "")
                    sParam+= "&O_HEX=Apply+values";
                sURL += sParam;
            }
            System.Diagnostics.Process.Start(sURL);

Support for ATmega328PB

Request to add ATmega328PB to included AVRDUDE config.

Below is the modified ATmega328 config that includes this chip.
Ref - https://github.com/watterott/ATmega328PB-Testing/blob/master/hardware/atmega328pb/avr/tools/avrdude.conf

#------------------------------------------------------------
# ATmega328
#------------------------------------------------------------

part
    id			= "m328";
    desc		= "ATmega328";
    has_debugwire	= yes;
    flash_instr		= 0xB6, 0x01, 0x11;
    eeprom_instr	= 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
			  0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
			  0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode	= 0x86;
    # avr910_devcode	= 0x;
    signature		= 0x1e 0x95 0x14;
    pagel		= 0xd7;
    bs2			= 0xc2;
    chip_erase_delay	= 9000;
    pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
		 "x x x x x x x x x x x x x x x x";

    chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
		 "x x x x x x x x x x x x x x x x";

    timeout	= 200;
    stabdelay	= 100;
    cmdexedelay	= 25;
    synchloops	= 32;
    bytedelay	= 0;
    pollindex	= 3;
    pollvalue	= 0x53;
    predelay	= 1;
    postdelay	= 1;
    pollmethod	= 1;

    pp_controlstack =
	0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay	= 100;
    progmodedelay	= 0;
    latchcycles		= 5;
    togglevtg		= 1;
    poweroffdelay	= 15;
    resetdelayms	= 1;
    resetdelayus	= 0;
    hvleavestabdelay	= 15;
    resetdelay		= 15;
    chiperasepulsewidth	= 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    ocdrev              = 1;

    memory "eeprom"
	paged		= no;
	page_size	= 4;
	size		= 1024;
	min_write_delay = 3600;
	max_write_delay = 3600;
	readback_p1	= 0xff;
	readback_p2	= 0xff;
	read = " 1 0 1 0 0 0 0 0",
	       " 0 0 0 x x x a9 a8",
	       " a7 a6 a5 a4 a3 a2 a1 a0",
	       " o o o o o o o o";

	write = " 1 1 0 0 0 0 0 0",
	      	" 0 0 0 x x x a9 a8",
		" a7 a6 a5 a4 a3 a2 a1 a0",
		" i i i i i i i i";

	loadpage_lo = " 1 1 0 0 0 0 0 1",
		      " 0 0 0 0 0 0 0 0",
		      " 0 0 0 0 0 0 a1 a0",
		      " i i i i i i i i";

	writepage = " 1 1 0 0 0 0 1 0",
		    " 0 0 x x x x a9 a8",
		    " a7 a6 a5 a4 a3 a2 0 0",
		    " x x x x x x x x";

	mode		= 0x41;
	delay		= 20;
	blocksize	= 4;
	readsize	= 256;
    ;

    memory "flash"
	paged		= yes;
	size		= 32768;
	page_size	= 128;
	num_pages	= 256;
	min_write_delay = 4500;
	max_write_delay = 4500;
	readback_p1	= 0xff;
	readback_p2	= 0xff;
	read_lo = " 0 0 1 0 0 0 0 0",
		  " 0 0 a13 a12 a11 a10 a9 a8",
		  " a7 a6 a5 a4 a3 a2 a1 a0",
		  " o o o o o o o o";

	read_hi = " 0 0 1 0 1 0 0 0",
		  " 0 0 a13 a12 a11 a10 a9 a8",
		  " a7 a6 a5 a4 a3 a2 a1 a0",
		  " o o o o o o o o";

	loadpage_lo = " 0 1 0 0 0 0 0 0",
		      " 0 0 0 x x x x x",
		      " x x a5 a4 a3 a2 a1 a0",
		      " i i i i i i i i";

	loadpage_hi = " 0 1 0 0 1 0 0 0",
		      " 0 0 0 x x x x x",
		      " x x a5 a4 a3 a2 a1 a0",
		      " i i i i i i i i";

	writepage = " 0 1 0 0 1 1 0 0",
		    " 0 0 a13 a12 a11 a10 a9 a8",
		    " a7 a6 x x x x x x",
		    " x x x x x x x x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 128;
	readsize	= 256;

    ;

    memory "lfuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
	      	"x x x x x x x x i i i i i i i i";
    ;

    memory "hfuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
	      	"x x x x x x x x i i i i i i i i";
    ;

    memory "efuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
	      	"x x x x x x x x x x x x x i i i";
    ;

    memory "lock"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
	      	"x x x x x x x x 1 1 i i i i i i";
    ;

    memory "calibration"
	size = 1;
	read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
	       "0 0 0 0 0 0 0 0 o o o o o o o o";
    ;

    memory "signature"
	size = 3;
	read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
	       "x x x x x x a1 a0 o o o o o o o o";
    ;
;

part parent "m328"
    id			= "m328p";
    desc		= "ATmega328P";
    signature		= 0x1e 0x95 0x0F;

    ocdrev              = 1;
;

part parent "m328"
    id			= "m328pb";
    desc		= "ATmega328PB";
    signature		= 0x1e 0x95 0x16;

    ocdrev              = 1;
;

Feature Request: Program Sequential Serial Numbers to EEPROM

While programming batches of boards I've often needed to give each board a sequential serial number by burning the S# value to a location in the chips EEPROM.

While searching to figure out how to do this most effectively I happened across this program. It has a feature that allows you to write unique ids to a boards EEPROM. Unfortunately it has a very limited number of programmers that it supports and I found the user interface really clunky.

I then discovered that AVRDUDE actually has a "memory operation" command that allows writing a value to memory including EEPROM.

-U memtype:op:filename[:format] (reference manual)

Using AVRDUDESS's "Additional command line args" input I can write a serial number(s) to the boards eeprom while programming the chip. The only limitation is that you cannot specify the location it writes the value to. It starts at the first location and if additional values are included it writes them to subsequence locations.

Example;

-U eeprom:w:1,2,3:m

Yields an EEPROM download with a first line value of

:20000000010203FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7

This works great except that the serial number has to be incremented manually each time a board is programmed.

Is it possible to add an input box(s) to AVRDUDESS that when selected increment the number "x" in the command -U eeprom:w:x,x,x:m each time the "Program!" button is pressed?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.