Summary: Added linux spi programmer type based on spidev
Project: AVR Downloader/UploaDEr
Submitted by: kcuzner
Submitted on: Thu 31 Oct 2013 04:10:19 PM GMT
Priority: 5 - Normal
Assigned to: None
Discussion Lock: Any
I've been sitting on this a little while, but I just discovered how to submit
a patch. I apologize if this isn't what is supposed to go in the "Original
Submission" field. I have attached my patch as an attachment.
The linuxspi programmer type allows avrdude to use the built-in spidev
userspace SPI drivers on linux to communicate to an attached AVR. While this
doesn't have much application for desktop or laptop computers, for
single-board linux computers such as the Raspberry Pi or Beaglebone, it allows
the single-board computer to be used as a stand-alone AVR programmer with
little to no extra hardware. I think this is useful on many levels, including
being able to embed an AVR onto a computer with spidev support and have it be
in-system programmable by executing a userspace program.
The port switch is used to direct the linuxspi programmer to which SPI bus to
use. The baud rate switch can be used to change the frequency at which the SPI
The comments on my blog post show that most people using it have been able to
get it to work and in many cases, using a lower frequency on the SPI bus via
the baud rate switch solved communication issues.
The patch was created by git, so it probably has to be applied with the -p1
flag to strip off the a/ and b/ that git likes to prepend to path names.
This should definitely be included in the standard AVRDUDE.
Consider how many people have Raspberry PI's and how many people use
microcontrollers such as Arduino with the Pi. It must be better to have one
version of AVRDude rather than different forks of it. I've used the KCUZNER
version and it works well.
Curious: shouldn't HAVE_SPIDEV default to NO for standard desktop-type Linux
systems? I don't think linuxspi would make much sense on those systems, so
just enabling it based on the presence of a header file is IMHO not a good
What I don't like is the trailing whitespace on many lines of your new files
(but I could fix that myself).
linuxspi.c: In function ‘linuxspi_gpio_op_wr’:
linuxspi.c:170:5: warning: format not a string literal and no format arguments
if (fprintf(f, val) < 0)
If I get it correctly, it would not even be necessary to use fprintf here, as
"val" is always a fixed string when being passed to linuxspi_gpio_op_wr(),
Thus, replacing "fprintf(f, val) < 0" by "fputs(val, f) != EOF" ought to be a
better solution (and avoids the overhead of fprintf trying to interpret a
format string that is known to not have format conversions at all).
I just logged into my email after many months and saw movement on this patch!!
I'm surprised! I apologize for the roughness of the code in this patch. If
you're working on this patch, I would recommend instead looking at #9816. Ralf
Ramsauer put a bunch of effort in to get things up to speed with how avrdude
has morphed over the past 8 years. Any work I would do to clean this up has
already been done by Ralf in that patch.