mirror of
git://projects.qi-hardware.com/ben-blinkenlights.git
synced 2024-11-27 17:05:20 +02:00
uart/avrdude/: patch and build instructions for avrdude
This commit is contained in:
parent
f67f7a9a30
commit
1826cc2d89
16
uart/avrdude/README
Normal file
16
uart/avrdude/README
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
wget http://download.savannah.gnu.org/releases/avrdude/avrdude-5.10.tar.gz
|
||||||
|
tar xfz avrdude-5.10.tar.gz
|
||||||
|
cd avrdude-5.10
|
||||||
|
|
||||||
|
quilt push -a
|
||||||
|
|
||||||
|
aclocal
|
||||||
|
automake
|
||||||
|
./configure --prefix=/ --host=mipsel-linux
|
||||||
|
make </dev/null
|
||||||
|
# the joy of autocrap
|
||||||
|
./configure --prefix=/ --host=mipsel-linux
|
||||||
|
make
|
||||||
|
|
||||||
|
scp avrdude.conf jlime:/etc/
|
||||||
|
scp avrdude jlime:/usr/bin/
|
410
uart/avrdude/patches/nanonote.patch
Normal file
410
uart/avrdude/patches/nanonote.patch
Normal file
@ -0,0 +1,410 @@
|
|||||||
|
Index: avrdude/avrdude-5.10/Makefile.am
|
||||||
|
===================================================================
|
||||||
|
--- avrdude.orig/avrdude-5.10/Makefile.am 2011-02-01 20:25:15.000000000 -0300
|
||||||
|
+++ avrdude/avrdude-5.10/Makefile.am 2011-02-01 20:25:54.000000000 -0300
|
||||||
|
@@ -111,6 +111,8 @@
|
||||||
|
lists.c \
|
||||||
|
lists.h \
|
||||||
|
my_ddk_hidsdi.h \
|
||||||
|
+ nanonote.c \
|
||||||
|
+ nanonote.h \
|
||||||
|
par.c \
|
||||||
|
par.h \
|
||||||
|
pgm.c \
|
||||||
|
Index: avrdude/avrdude-5.10/config_gram.y
|
||||||
|
===================================================================
|
||||||
|
--- avrdude.orig/avrdude-5.10/config_gram.y 2011-02-01 18:50:48.000000000 -0300
|
||||||
|
+++ avrdude/avrdude-5.10/config_gram.y 2011-02-01 20:27:31.000000000 -0300
|
||||||
|
@@ -48,6 +48,7 @@
|
||||||
|
#include "avr.h"
|
||||||
|
#include "jtagmkI.h"
|
||||||
|
#include "jtagmkII.h"
|
||||||
|
+#include "nanonote.h"
|
||||||
|
|
||||||
|
#if defined(WIN32NATIVE)
|
||||||
|
#define strtok_r( _s, _sep, _lasts ) \
|
||||||
|
@@ -99,6 +100,7 @@
|
||||||
|
%token K_DRAGON_JTAG
|
||||||
|
%token K_DRAGON_PDI
|
||||||
|
%token K_DRAGON_PP
|
||||||
|
+%token K_NANONOTE
|
||||||
|
%token K_STK500_DEVCODE
|
||||||
|
%token K_AVR910_DEVCODE
|
||||||
|
%token K_EEPROM
|
||||||
|
@@ -551,6 +553,12 @@
|
||||||
|
}
|
||||||
|
} |
|
||||||
|
|
||||||
|
+ K_TYPE TKN_EQUAL K_NANONOTE {
|
||||||
|
+ {
|
||||||
|
+ nanonote_initpgm(current_prog);
|
||||||
|
+ }
|
||||||
|
+ } |
|
||||||
|
+
|
||||||
|
K_DESC TKN_EQUAL TKN_STRING {
|
||||||
|
strncpy(current_prog->desc, $3->value.string, PGM_DESCLEN);
|
||||||
|
current_prog->desc[PGM_DESCLEN-1] = 0;
|
||||||
|
Index: avrdude/avrdude-5.10/lexer.l
|
||||||
|
===================================================================
|
||||||
|
--- avrdude.orig/avrdude-5.10/lexer.l 2011-02-01 18:53:11.000000000 -0300
|
||||||
|
+++ avrdude/avrdude-5.10/lexer.l 2011-02-01 18:53:40.000000000 -0300
|
||||||
|
@@ -164,6 +164,7 @@
|
||||||
|
min_write_delay { yylval=NULL; return K_MIN_WRITE_DELAY; }
|
||||||
|
miso { yylval=NULL; return K_MISO; }
|
||||||
|
mosi { yylval=NULL; return K_MOSI; }
|
||||||
|
+nanonote { yylval=NULL; return K_NANONOTE; }
|
||||||
|
num_banks { yylval=NULL; return K_NUM_PAGES; }
|
||||||
|
num_pages { yylval=NULL; return K_NUM_PAGES; }
|
||||||
|
nvm_base { yylval=NULL; return K_NVM_BASE; }
|
||||||
|
Index: avrdude/avrdude-5.10/nanonote.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ avrdude/avrdude-5.10/nanonote.c 2011-02-01 21:33:19.000000000 -0300
|
||||||
|
@@ -0,0 +1,302 @@
|
||||||
|
+/*
|
||||||
|
+ * avrdude - A Downloader/Uploader for AVR device programmers
|
||||||
|
+ * Copyright (C) 2000, 2001, 2002, 2003 Brian S. Dean <bsd@bsdhome.com>
|
||||||
|
+ * Copyright (C) 2005 Michael Holzt <kju-avr@fqdn.org>
|
||||||
|
+ * Copyright (C) 2006 Joerg Wunsch <j@uriah.heep.sax.de>
|
||||||
|
+ *
|
||||||
|
+ * This program is free software; you can redistribute it and/or modify
|
||||||
|
+ * it under the terms of the GNU General Public License as published by
|
||||||
|
+ * the Free Software Foundation; either version 2 of the License, or
|
||||||
|
+ * (at your option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This program is distributed in the hope that it will be useful,
|
||||||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ * GNU General Public License for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU General Public License
|
||||||
|
+ * along with this program; if not, write to the Free Software
|
||||||
|
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
+ */
|
||||||
|
+/* $Id: serbb_posix.c 917 2010-01-15 16:40:17Z joerg_wunsch $ */
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * Posix serial bitbanging interface for avrdude.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+//#include "ac_cfg.h"
|
||||||
|
+
|
||||||
|
+#include <stdint.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+#include <fcntl.h>
|
||||||
|
+#include <sys/mman.h>
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+#include <errno.h>
|
||||||
|
+#include <sys/ioctl.h>
|
||||||
|
+#include <termios.h>
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
+//#include "avrdude.h"
|
||||||
|
+#include "avr.h"
|
||||||
|
+//#include "pindefs.h"
|
||||||
|
+#include "pgm.h"
|
||||||
|
+#include "bitbang.h"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static volatile void *mem;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#define POWER_OFF 3, 2 /* PD02, drive low to enable power */
|
||||||
|
+#define CMD 3, 8 /* PD08, CMD */
|
||||||
|
+#define CLK 3, 9 /* PD09, CLK */
|
||||||
|
+#define DAT0 3, 10 /* PD10, DAT0 */
|
||||||
|
+#define DAT1 3, 11 /* PD11, DAT1 */
|
||||||
|
+#define DAT2 3, 12 /* PD12, DAT2 */
|
||||||
|
+#define DAT3 3, 13 /* PD13, DAT3 */
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static struct {
|
||||||
|
+ unsigned port;
|
||||||
|
+ unsigned bit;
|
||||||
|
+} pin_map[] = {
|
||||||
|
+ { 3, 11 }, /* 1: PD11, DAT1 */
|
||||||
|
+ { 3, 10 }, /* 2: PD12, DAT0 */
|
||||||
|
+ { 0, 0 }, /* 3: VSS */
|
||||||
|
+ { 0, 0 }, /* 4: PD09, CLK (reserved) */
|
||||||
|
+ { 0, 0 }, /* 5: VDD */
|
||||||
|
+ { 3, 8 }, /* 6: PD08, CMD */
|
||||||
|
+ { 3, 13 }, /* 7: PD13, DAT3 */
|
||||||
|
+ { 3, 12 } /* 8: PD13, DAT2 */
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#define BASE 0x10010000
|
||||||
|
+
|
||||||
|
+#define REG(off) (*(volatile uint32_t *) (mem+(off)))
|
||||||
|
+
|
||||||
|
+#define port_pin(port) REG(port*0x100)
|
||||||
|
+#define port_dats(port) REG(port*0x100+0x14)
|
||||||
|
+#define port_datc(port) REG(port*0x100+0x18)
|
||||||
|
+#define port_func(port) REG(port*0x100+0x48)
|
||||||
|
+#define port_dirs(port) REG(port*0x100+0x64)
|
||||||
|
+#define port_dirc(port) REG(port*0x100+0x68)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static inline void gpio_high(unsigned port, unsigned bit)
|
||||||
|
+{
|
||||||
|
+ port_dats(port) = 1 << bit;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void gpio_low(unsigned port, unsigned bit)
|
||||||
|
+{
|
||||||
|
+ port_datc(port) = 1 << bit;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void gpio_set(unsigned port, unsigned bit, int value)
|
||||||
|
+{
|
||||||
|
+ if (value)
|
||||||
|
+ gpio_high(port, bit);
|
||||||
|
+ else
|
||||||
|
+ gpio_low(port, bit);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int gpio_get(unsigned port, unsigned bit)
|
||||||
|
+{
|
||||||
|
+ return (port_pin(port) >> bit) & 1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void gpio_output(unsigned port, unsigned bit)
|
||||||
|
+{
|
||||||
|
+ port_dirs(port) = 1 << bit;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void gpio_input(unsigned port, unsigned bit)
|
||||||
|
+{
|
||||||
|
+ port_dirc(port) = 1 << bit;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int nanonote_setpin(PROGRAMMER *pgm, int pin, int value)
|
||||||
|
+{
|
||||||
|
+ if (pin & PIN_INVERSE) {
|
||||||
|
+ value = !value;
|
||||||
|
+ pin &= PIN_MASK;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (pin < 1 || pin > sizeof(pin_map)/sizeof(*pin_map))
|
||||||
|
+ return -1;
|
||||||
|
+ if (!pin_map[pin-1].port)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+#if 0
|
||||||
|
+fprintf(stderr, "pin %d (%u, %u) = %d\n",
|
||||||
|
+pin, pin_map[pin-1].port, pin_map[pin-1].bit, value);
|
||||||
|
+#endif
|
||||||
|
+ gpio_set(pin_map[pin-1].port, pin_map[pin-1].bit, value);
|
||||||
|
+
|
||||||
|
+ {
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * @@@ investigate later
|
||||||
|
+ * We get unstable results with values <= 15 but stable results
|
||||||
|
+ * with 16.
|
||||||
|
+ */
|
||||||
|
+ for (i = 0; i != 100; i++)
|
||||||
|
+ gpio_get(pin_map[pin-1].port, pin_map[pin-1].bit);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (pgm->ispdelay > 1)
|
||||||
|
+ bitbang_delay(pgm->ispdelay);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int nanonote_getpin(PROGRAMMER *pgm, int pin)
|
||||||
|
+{
|
||||||
|
+ int invert = 0;
|
||||||
|
+ int v;
|
||||||
|
+
|
||||||
|
+ if (pin & PIN_INVERSE) {
|
||||||
|
+ invert = 1;
|
||||||
|
+ pin &= PIN_MASK;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (pin < 1 || pin > sizeof(pin_map)/sizeof(*pin_map))
|
||||||
|
+ return -1;
|
||||||
|
+ if (!pin_map[pin].port)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ v = gpio_get(pin_map[pin-1].port, pin_map[pin-1].bit);
|
||||||
|
+#if 0
|
||||||
|
+fprintf(stderr, "pin %d (%u, %u): %d\n",
|
||||||
|
+pin, pin_map[pin-1].port, pin_map[pin-1].bit, v);
|
||||||
|
+#endif
|
||||||
|
+ return pin & PIN_INVERSE ? !v : v;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int nanonote_highpulsepin(PROGRAMMER *pgm, int pin)
|
||||||
|
+{
|
||||||
|
+ return -1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void nanonote_display(PROGRAMMER *pgm, const char *p)
|
||||||
|
+{
|
||||||
|
+ /* nothing */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void misc_high(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ gpio_high(POWER_OFF);
|
||||||
|
+ gpio_high(DAT1);
|
||||||
|
+ gpio_high(DAT0);
|
||||||
|
+ gpio_high(CMD);
|
||||||
|
+ gpio_high(DAT3);
|
||||||
|
+ gpio_high(DAT2);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void nanonote_enable(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ misc_high(pgm);
|
||||||
|
+ /* @@@ set CLK to function and output clock */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void nanonote_disable(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ misc_high(pgm);
|
||||||
|
+ /* @@@ set CLK to GPIO */
|
||||||
|
+ gpio_high(CLK);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void nanonote_powerup(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ gpio_low(POWER_OFF);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void nanonote_powerdown(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ misc_high(pgm);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int nanonote_open(PROGRAMMER *pgm, char *port)
|
||||||
|
+{
|
||||||
|
+ bitbang_check_prerequisites(pgm);
|
||||||
|
+
|
||||||
|
+ pgm->fd.ifd = open("/dev/mem", O_RDWR | O_SYNC);
|
||||||
|
+ if (pgm->fd.ifd < 0) {
|
||||||
|
+ perror("/dev/mem");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ mem = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||||
|
+ pgm->fd.ifd, BASE);
|
||||||
|
+ if (mem == MAP_FAILED) {
|
||||||
|
+ perror("mmap");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ gpio_output(POWER_OFF);
|
||||||
|
+ gpio_output(DAT0);
|
||||||
|
+ gpio_output(CLK);
|
||||||
|
+ gpio_output(CMD);
|
||||||
|
+ gpio_output(DAT3);
|
||||||
|
+ gpio_output(DAT2);
|
||||||
|
+ gpio_input(DAT1); /* @@@ hack */
|
||||||
|
+
|
||||||
|
+ nanonote_disable(pgm);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static void nanonote_close(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ if (pgm->fd.ifd != -1)
|
||||||
|
+ close(pgm->fd.ifd);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+void nanonote_initpgm(PROGRAMMER *pgm)
|
||||||
|
+{
|
||||||
|
+ strcpy(pgm->type, "NANONOTE");
|
||||||
|
+
|
||||||
|
+ pgm->rdy_led = bitbang_rdy_led;
|
||||||
|
+ pgm->err_led = bitbang_err_led;
|
||||||
|
+ pgm->pgm_led = bitbang_pgm_led;
|
||||||
|
+ pgm->vfy_led = bitbang_vfy_led;
|
||||||
|
+ pgm->initialize = bitbang_initialize;
|
||||||
|
+ pgm->display = nanonote_display;
|
||||||
|
+ pgm->enable = nanonote_enable;
|
||||||
|
+ pgm->disable = nanonote_disable;
|
||||||
|
+ pgm->powerup = nanonote_powerup;
|
||||||
|
+ pgm->powerdown = nanonote_powerdown;
|
||||||
|
+ pgm->program_enable = bitbang_program_enable;
|
||||||
|
+ pgm->chip_erase = bitbang_chip_erase;
|
||||||
|
+ pgm->cmd = bitbang_cmd;
|
||||||
|
+ pgm->open = nanonote_open;
|
||||||
|
+ pgm->close = nanonote_close;
|
||||||
|
+ pgm->setpin = nanonote_setpin;
|
||||||
|
+ pgm->getpin = nanonote_getpin;
|
||||||
|
+ pgm->highpulsepin = nanonote_highpulsepin;
|
||||||
|
+ pgm->read_byte = avr_read_byte_default;
|
||||||
|
+ pgm->write_byte = avr_write_byte_default;
|
||||||
|
+}
|
||||||
|
Index: avrdude/avrdude-5.10/nanonote.h
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ avrdude/avrdude-5.10/nanonote.h 2011-02-01 20:27:11.000000000 -0300
|
||||||
|
@@ -0,0 +1,6 @@
|
||||||
|
+#ifndef nanonote_h
|
||||||
|
+#define nanonote_h
|
||||||
|
+
|
||||||
|
+void nanonote_initpgm(PROGRAMMER *pgm);
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
Index: avrdude/avrdude-5.10/avrdude.conf.in
|
||||||
|
===================================================================
|
||||||
|
--- avrdude.orig/avrdude-5.10/avrdude.conf.in 2011-02-01 21:34:08.000000000 -0300
|
||||||
|
+++ avrdude/avrdude-5.10/avrdude.conf.in 2011-02-01 21:36:11.000000000 -0300
|
||||||
|
@@ -592,6 +592,29 @@
|
||||||
|
type = avr910;
|
||||||
|
;
|
||||||
|
|
||||||
|
+#
|
||||||
|
+# 8:10 card pin assignment:
|
||||||
|
+#
|
||||||
|
+# DAT1 1
|
||||||
|
+# DAT0 2
|
||||||
|
+# VSS -
|
||||||
|
+# CLK -
|
||||||
|
+# VDD -
|
||||||
|
+# CMD 5
|
||||||
|
+# DAT3 7
|
||||||
|
+# DAT2 8
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+programmer
|
||||||
|
+ id = "nanonote_uart";
|
||||||
|
+ desc = "NanoNote UART 8:10 card";
|
||||||
|
+ type = nanonote;
|
||||||
|
+ reset = 8;
|
||||||
|
+ sck = 2;
|
||||||
|
+ mosi = 7;
|
||||||
|
+ miso = 1;
|
||||||
|
+;
|
||||||
|
+
|
||||||
|
@HAVE_PARPORT_BEGIN@ Inclusion of the following depends on --enable-parport
|
||||||
|
# Parallel port programmers.
|
||||||
|
|
1
uart/avrdude/patches/series
Normal file
1
uart/avrdude/patches/series
Normal file
@ -0,0 +1 @@
|
|||||||
|
nanonote.patch
|
Loading…
Reference in New Issue
Block a user