Merged r1000-1006,1008-1009 from trunk, in preparation of a 5.11.1
release. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/branches/RELEASE_5_11@1012 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
1339ff76ee
commit
8ec4b019a1
|
@ -1,3 +1,60 @@
|
||||||
|
2011-09-15 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* stk500v2.c (stk600_xprog_paged_load, stk600_xprog_paged_write):
|
||||||
|
Fix regression in the AVRISPmkII/STK600 TPI handling introduced
|
||||||
|
by the USBasp's TPI implementation which added a pagesize even for
|
||||||
|
the minor memory regions of TPI devices.
|
||||||
|
|
||||||
|
2011-09-15 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* avr.c (avr_read, avr_write): Don't bail out on TPI parts if
|
||||||
|
their programmer doesn't provide a (low-level) cmd_tpi method;
|
||||||
|
instead, fall back to the normal programmer methods which are
|
||||||
|
supposed to handle the situation.
|
||||||
|
This fixes a regression where the recent bitbang-TPI implementation
|
||||||
|
broke TPI handling of STK600/AVRISPmkII.
|
||||||
|
|
||||||
|
2011-09-13 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* stk500v2.c (stk500v2_command): Treat warnings as errors rather than
|
||||||
|
success.
|
||||||
|
|
||||||
|
2011-08-30 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
bug #34027: avrdude AT90S1200 Problem (part 3 - documentation)
|
||||||
|
* avrdude.1: Document the programmer type restrictions for AT90S1200
|
||||||
|
devices.
|
||||||
|
* doc/avrdude.texi: (Ditto.)
|
||||||
|
|
||||||
|
2011-08-30 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
bug #34027: avrdude AT90S1200 Problem (part 2 - stk500v2 and relatives)
|
||||||
|
* stk500v2.c (stk500v2_initialize): For the AT90S1200, release
|
||||||
|
/RESET for a moment before reinitializing, as this is required by
|
||||||
|
its programming protocol.
|
||||||
|
|
||||||
|
2011-08-30 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* configure.ac: In AC_CHECK_LIB for libftdi, check for
|
||||||
|
ftdi_usb_get_strings() rathern than ftdi_init(), as this is a more
|
||||||
|
specific thing to search for in order to make sure getting a
|
||||||
|
recent enough libftdi.
|
||||||
|
|
||||||
|
2011-08-29 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
bug #34027: avrdude AT90S1200 Problem (part 1 - bitbang
|
||||||
|
programmers)
|
||||||
|
* config_gram.y: Introduce new keyword "is_at90s1200".
|
||||||
|
* lexer.l: (Ditto.)
|
||||||
|
* avrdude.conf.in: Applew new keyword to the AT90S1200 device.
|
||||||
|
* avrpart.h: Introduce new flag AVRPART_IS_AT90S1200, reflecting
|
||||||
|
the is_at90s1200 configuration keyword.
|
||||||
|
* bitbang.c (bitbang_initialize): Replace existing test for
|
||||||
|
AT90S1200 by AVRPART_IS_AT90S1200
|
||||||
|
* avr.c (avr_write_byte_default): Avoid the pre-write reading for
|
||||||
|
the AT90S1200, as this appears to sometimes corrupt the high byte
|
||||||
|
by pre-programming the low byte just written into it.
|
||||||
|
|
||||||
2011-08-27 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
2011-08-27 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
* configure.ac: Bump version for releasing AVRDUDE 5.11.
|
* configure.ac: Bump version for releasing AVRDUDE 5.11.
|
||||||
|
|
|
@ -5,7 +5,14 @@ Approximate change log for AVRDUDE by version.
|
||||||
(For more detailed changes, see the ChangeLog file.)
|
(For more detailed changes, see the ChangeLog file.)
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Current:
|
Version 5.11.1:
|
||||||
|
|
||||||
|
* Bugfixes
|
||||||
|
(see ChangeLog for details)
|
||||||
|
- Fix AT90S1200 (bug #34027: avrdude AT90S1200 Problem)
|
||||||
|
- Fix TPI devices for STK600/AVRISPmkII (no bug ID)
|
||||||
|
|
||||||
|
Version 5.11:
|
||||||
|
|
||||||
* New devices supported:
|
* New devices supported:
|
||||||
- ATmega88P/168P
|
- ATmega88P/168P
|
||||||
|
|
|
@ -239,12 +239,8 @@ int avr_read(PROGRAMMER * pgm, AVRPART * p, char * memtype, int size,
|
||||||
memset(buf, 0xff, size);
|
memset(buf, 0xff, size);
|
||||||
|
|
||||||
/* supports "paged load" thru post-increment */
|
/* supports "paged load" thru post-increment */
|
||||||
if ((p->flags & AVRPART_HAS_TPI) && mem->page_size != 0) {
|
if ((p->flags & AVRPART_HAS_TPI) && mem->page_size != 0 &&
|
||||||
if (pgm->cmd_tpi == NULL) {
|
pgm->cmd_tpi != NULL) {
|
||||||
fprintf(stderr, "%s: Error: %s programmer does not support TPI\n",
|
|
||||||
progname, pgm->type);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (avr_tpi_poll_nvmbsy(pgm));
|
while (avr_tpi_poll_nvmbsy(pgm));
|
||||||
|
|
||||||
|
@ -443,11 +439,17 @@ int avr_write_byte_default(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mem->paged) {
|
if (!mem->paged &&
|
||||||
|
(p->flags & AVRPART_IS_AT90S1200) == 0) {
|
||||||
/*
|
/*
|
||||||
* check to see if the write is necessary by reading the existing
|
* check to see if the write is necessary by reading the existing
|
||||||
* value and only write if we are changing the value; we can't
|
* value and only write if we are changing the value; we can't
|
||||||
* use this optimization for paged addressing.
|
* use this optimization for paged addressing.
|
||||||
|
*
|
||||||
|
* For mysterious reasons, on the AT90S1200, this read operation
|
||||||
|
* sometimes causes the high byte of the same word to be
|
||||||
|
* programmed to the value of the low byte that has just been
|
||||||
|
* programmed before. Avoid that optimization on this device.
|
||||||
*/
|
*/
|
||||||
rc = pgm->read_byte(pgm, p, mem, addr, &b);
|
rc = pgm->read_byte(pgm, p, mem, addr, &b);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
|
@ -708,13 +710,8 @@ int avr_write(PROGRAMMER * pgm, AVRPART * p, char * memtype, int size,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((p->flags & AVRPART_HAS_TPI) && m->page_size != 0) {
|
if ((p->flags & AVRPART_HAS_TPI) && m->page_size != 0 &&
|
||||||
if (pgm->cmd_tpi == NULL) {
|
pgm->cmd_tpi != NULL) {
|
||||||
fprintf(stderr,
|
|
||||||
"%s: Error: %s programmer does not support TPI\n",
|
|
||||||
progname, pgm->type);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (avr_tpi_poll_nvmbsy(pgm));
|
while (avr_tpi_poll_nvmbsy(pgm));
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.Dd DATE August 17, 2011
|
.Dd DATE August 30, 2011
|
||||||
.Os
|
.Os
|
||||||
.Dt AVRDUDE 1
|
.Dt AVRDUDE 1
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -211,7 +211,7 @@ the format. Currently, the following MCU types are understood:
|
||||||
.TS
|
.TS
|
||||||
ll.
|
ll.
|
||||||
\fBOption tag\fP \fBOfficial part name\fP
|
\fBOption tag\fP \fBOfficial part name\fP
|
||||||
1200 AT90S1200
|
1200 AT90S1200 (****)
|
||||||
2313 AT90S2313
|
2313 AT90S2313
|
||||||
2333 AT90S2333
|
2333 AT90S2333
|
||||||
2343 AT90S2343 (*)
|
2343 AT90S2343 (*)
|
||||||
|
@ -322,6 +322,11 @@ and bit-bang programmers.
|
||||||
.It "(***)"
|
.It "(***)"
|
||||||
The ATtiny11 uses the same algorithm, but can only be
|
The ATtiny11 uses the same algorithm, but can only be
|
||||||
programmed in high-voltage serial mode.
|
programmed in high-voltage serial mode.
|
||||||
|
.It "(****)"
|
||||||
|
The ISP programming protocol of the AT90S1200 differs in subtle ways
|
||||||
|
from that of other AVRs. Thus, not all programmers support this
|
||||||
|
device. Known to work are all direct bitbang programmers, and all
|
||||||
|
programmers talking the STK500v2 protocol.
|
||||||
.El
|
.El
|
||||||
.It Fl b Ar baudrate
|
.It Fl b Ar baudrate
|
||||||
Override the RS-232 connection baud rate specified in the respective
|
Override the RS-232 connection baud rate specified in the respective
|
||||||
|
|
|
@ -1523,6 +1523,7 @@ part
|
||||||
part
|
part
|
||||||
id = "1200";
|
id = "1200";
|
||||||
desc = "AT90S1200";
|
desc = "AT90S1200";
|
||||||
|
is_at90s1200 = yes;
|
||||||
stk500_devcode = 0x33;
|
stk500_devcode = 0x33;
|
||||||
avr910_devcode = 0x13;
|
avr910_devcode = 0x13;
|
||||||
signature = 0x1e 0x90 0x01;
|
signature = 0x1e 0x90 0x01;
|
||||||
|
|
|
@ -93,6 +93,7 @@ typedef struct opcode {
|
||||||
#define AVRPART_INIT_SMC 0x0200 /* part will undergo chip erase */
|
#define AVRPART_INIT_SMC 0x0200 /* part will undergo chip erase */
|
||||||
#define AVRPART_WRITE 0x0400 /* at least one write operation specified */
|
#define AVRPART_WRITE 0x0400 /* at least one write operation specified */
|
||||||
#define AVRPART_HAS_TPI 0x0800 /* part has TPI i/f rather than ISP (ATtiny4/5/9/10) */
|
#define AVRPART_HAS_TPI 0x0800 /* part has TPI i/f rather than ISP (ATtiny4/5/9/10) */
|
||||||
|
#define AVRPART_IS_AT90S1200 0x1000 /* part is an AT90S1200 (needs special treatment) */
|
||||||
|
|
||||||
#define AVR_DESCLEN 64
|
#define AVR_DESCLEN 64
|
||||||
#define AVR_IDLEN 32
|
#define AVR_IDLEN 32
|
||||||
|
|
|
@ -606,7 +606,7 @@ int bitbang_initialize(PROGRAMMER * pgm, AVRPART * p)
|
||||||
* order to possibly get back into sync with the chip if we are out
|
* order to possibly get back into sync with the chip if we are out
|
||||||
* of sync.
|
* of sync.
|
||||||
*/
|
*/
|
||||||
if (strcmp(p->desc, "AT90S1200")==0) {
|
if (p->flags & AVRPART_IS_AT90S1200) {
|
||||||
pgm->program_enable(pgm, p);
|
pgm->program_enable(pgm, p);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -225,6 +225,7 @@ static int parse_cmdbits(OPCODE * op);
|
||||||
%token K_HAS_PDI /* MCU has PDI i/f rather than ISP (ATxmega). */
|
%token K_HAS_PDI /* MCU has PDI i/f rather than ISP (ATxmega). */
|
||||||
%token K_HAS_TPI /* MCU has TPI i/f rather than ISP (ATtiny4/5/9/10). */
|
%token K_HAS_TPI /* MCU has TPI i/f rather than ISP (ATtiny4/5/9/10). */
|
||||||
%token K_IDR /* address of OCD register in IO space */
|
%token K_IDR /* address of OCD register in IO space */
|
||||||
|
%token K_IS_AT90S1200 /* chip is an AT90S1200 (needs special treatment) */
|
||||||
%token K_IS_AVR32 /* chip is in the avr32 family */
|
%token K_IS_AVR32 /* chip is in the avr32 family */
|
||||||
%token K_RAMPZ /* address of RAMPZ reg. in IO space */
|
%token K_RAMPZ /* address of RAMPZ reg. in IO space */
|
||||||
%token K_SPMCR /* address of SPMC[S]R in memory space */
|
%token K_SPMCR /* address of SPMC[S]R in memory space */
|
||||||
|
@ -1166,6 +1167,16 @@ part_parm :
|
||||||
free_token($3);
|
free_token($3);
|
||||||
} |
|
} |
|
||||||
|
|
||||||
|
K_IS_AT90S1200 TKN_EQUAL yesno
|
||||||
|
{
|
||||||
|
if ($3->primary == K_YES)
|
||||||
|
current_part->flags |= AVRPART_IS_AT90S1200;
|
||||||
|
else if ($3->primary == K_NO)
|
||||||
|
current_part->flags &= AVRPART_IS_AT90S1200;
|
||||||
|
|
||||||
|
free_token($3);
|
||||||
|
} |
|
||||||
|
|
||||||
K_IS_AVR32 TKN_EQUAL yesno
|
K_IS_AVR32 TKN_EQUAL yesno
|
||||||
{
|
{
|
||||||
if ($3->primary == K_YES)
|
if ($3->primary == K_YES)
|
||||||
|
@ -1175,7 +1186,7 @@ part_parm :
|
||||||
|
|
||||||
free_token($3);
|
free_token($3);
|
||||||
} |
|
} |
|
||||||
|
|
||||||
K_ALLOWFULLPAGEBITSTREAM TKN_EQUAL yesno
|
K_ALLOWFULLPAGEBITSTREAM TKN_EQUAL yesno
|
||||||
{
|
{
|
||||||
if ($3->primary == K_YES)
|
if ($3->primary == K_YES)
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
AC_INIT(avrdude, 5.11, avrdude-dev@nongnu.org)
|
AC_INIT(avrdude, 5.11.1rc, avrdude-dev@nongnu.org)
|
||||||
|
|
||||||
AC_CANONICAL_BUILD
|
AC_CANONICAL_BUILD
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
|
@ -105,7 +105,7 @@ fi
|
||||||
AC_SUBST(LIBUSB_1_0, $LIBUSB_1_0)
|
AC_SUBST(LIBUSB_1_0, $LIBUSB_1_0)
|
||||||
AH_TEMPLATE([HAVE_LIBFTDI],
|
AH_TEMPLATE([HAVE_LIBFTDI],
|
||||||
[Define if FTDI support is enabled via libftdi])
|
[Define if FTDI support is enabled via libftdi])
|
||||||
AC_CHECK_LIB([ftdi], [ftdi_init], [have_libftdi=yes], [], [-lusb])
|
AC_CHECK_LIB([ftdi], [ftdi_usb_get_strings], [have_libftdi=yes], [], [-lusb])
|
||||||
if test x$have_libftdi = xyes; then
|
if test x$have_libftdi = xyes; then
|
||||||
LIBFTDI="-lftdi -lusb"
|
LIBFTDI="-lftdi -lusb"
|
||||||
AC_DEFINE([HAVE_LIBFTDI])
|
AC_DEFINE([HAVE_LIBFTDI])
|
||||||
|
|
|
@ -307,7 +307,7 @@ datasheet so that you can enter the programming specifications.
|
||||||
Currently, the following MCU types are understood:
|
Currently, the following MCU types are understood:
|
||||||
|
|
||||||
@multitable @columnfractions .15 .3
|
@multitable @columnfractions .15 .3
|
||||||
@item @code{1200} @tab AT90S1200
|
@item @code{1200} @tab AT90S1200 (****)
|
||||||
@item @code{2313} @tab AT90S2313
|
@item @code{2313} @tab AT90S2313
|
||||||
@item @code{2333} @tab AT90S2333
|
@item @code{2333} @tab AT90S2333
|
||||||
@item @code{2343} @tab AT90S2343 (*)
|
@item @code{2343} @tab AT90S2343 (*)
|
||||||
|
@ -419,6 +419,12 @@ and bit-bang programmers.
|
||||||
The ATtiny11 uses the same algorithm, but can only be
|
The ATtiny11 uses the same algorithm, but can only be
|
||||||
programmed in high-voltage serial mode.
|
programmed in high-voltage serial mode.
|
||||||
|
|
||||||
|
(****)
|
||||||
|
The ISP programming protocol of the AT90S1200 differs in subtle ways
|
||||||
|
from that of other AVRs. Thus, not all programmers support this
|
||||||
|
device. Known to work are all direct bitbang programmers, and all
|
||||||
|
programmers talking the STK500v2 protocol.
|
||||||
|
|
||||||
@item -b @var{baudrate}
|
@item -b @var{baudrate}
|
||||||
Override the RS-232 connection baud rate specified in the respective
|
Override the RS-232 connection baud rate specified in the respective
|
||||||
programmer's entry of the configuration file.
|
programmer's entry of the configuration file.
|
||||||
|
|
|
@ -155,6 +155,7 @@ has_pdi { yylval=NULL; return K_HAS_PDI; }
|
||||||
has_tpi { yylval=NULL; return K_HAS_TPI; }
|
has_tpi { yylval=NULL; return K_HAS_TPI; }
|
||||||
id { yylval=NULL; return K_ID; }
|
id { yylval=NULL; return K_ID; }
|
||||||
idr { yylval=NULL; return K_IDR; }
|
idr { yylval=NULL; return K_IDR; }
|
||||||
|
is_at90s1200 { yylval=NULL; return K_IS_AT90S1200; }
|
||||||
is_avr32 { yylval=NULL; return K_IS_AVR32; }
|
is_avr32 { yylval=NULL; return K_IS_AVR32; }
|
||||||
jtagmki { yylval=NULL; return K_JTAG_MKI; }
|
jtagmki { yylval=NULL; return K_JTAG_MKI; }
|
||||||
jtagmkii { yylval=NULL; return K_JTAG_MKII; }
|
jtagmkii { yylval=NULL; return K_JTAG_MKII; }
|
||||||
|
|
|
@ -787,18 +787,20 @@ retry:
|
||||||
msg = msgbuf;
|
msg = msgbuf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (quell_progress < 2)
|
if (quell_progress < 2) {
|
||||||
fprintf(stderr, "%s: stk500v2_command(): warning: %s\n",
|
fprintf(stderr, "%s: stk500v2_command(): warning: %s\n",
|
||||||
progname, msg);
|
progname, msg);
|
||||||
buf[1] = STATUS_CMD_OK; /* pretend success */
|
}
|
||||||
}
|
} else if (buf[1] == STATUS_CMD_OK) {
|
||||||
if (buf[1] == STATUS_CMD_OK)
|
|
||||||
return status;
|
return status;
|
||||||
if (buf[1] == STATUS_CMD_FAILED)
|
} else if (buf[1] == STATUS_CMD_FAILED) {
|
||||||
fprintf(stderr, "%s: stk500v2_command(): command failed\n", progname);
|
fprintf(stderr,
|
||||||
else
|
"%s: stk500v2_command(): command failed\n",
|
||||||
|
progname);
|
||||||
|
} else {
|
||||||
fprintf(stderr, "%s: stk500v2_command(): unknown status 0x%02x\n",
|
fprintf(stderr, "%s: stk500v2_command(): unknown status 0x%02x\n",
|
||||||
progname, buf[1]);
|
progname, buf[1]);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1099,6 +1101,14 @@ static int stk500v2_initialize(PROGRAMMER * pgm, AVRPART * p)
|
||||||
stk600_setup_isp(pgm);
|
stk600_setup_isp(pgm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p->flags & AVRPART_IS_AT90S1200) {
|
||||||
|
/*
|
||||||
|
* AT90S1200 needs a positive reset pulse after a chip erase.
|
||||||
|
*/
|
||||||
|
pgm->disable(pgm);
|
||||||
|
usleep(10000);
|
||||||
|
}
|
||||||
|
|
||||||
return pgm->program_enable(pgm, p);
|
return pgm->program_enable(pgm, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3328,6 +3338,16 @@ static int stk600_xprog_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
|
||||||
use_ext_addr = (1UL << 31);
|
use_ext_addr = (1UL << 31);
|
||||||
} else if (strcmp(mem->desc, "eeprom") == 0) {
|
} else if (strcmp(mem->desc, "eeprom") == 0) {
|
||||||
memtype = XPRG_MEM_TYPE_EEPROM;
|
memtype = XPRG_MEM_TYPE_EEPROM;
|
||||||
|
} else if (strcmp(mem->desc, "signature") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_APPL;
|
||||||
|
} else if (strncmp(mem->desc, "fuse", strlen("fuse")) == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_FUSE;
|
||||||
|
} else if (strcmp(mem->desc, "lockbits") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_LOCKBITS;
|
||||||
|
} else if (strcmp(mem->desc, "calibration") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_FACTORY_CALIBRATION;
|
||||||
|
} else if (strcmp(mem->desc, "usersig") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_USERSIG;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: stk600_xprog_paged_load(): unknown paged memory \"%s\"\n",
|
"%s: stk600_xprog_paged_load(): unknown paged memory \"%s\"\n",
|
||||||
|
@ -3419,6 +3439,21 @@ static int stk600_xprog_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
|
||||||
} else if (strcmp(mem->desc, "eeprom") == 0) {
|
} else if (strcmp(mem->desc, "eeprom") == 0) {
|
||||||
memtype = XPRG_MEM_TYPE_EEPROM;
|
memtype = XPRG_MEM_TYPE_EEPROM;
|
||||||
writemode = (1 << XPRG_MEM_WRITE_WRITE) | (1 << XPRG_MEM_WRITE_ERASE);
|
writemode = (1 << XPRG_MEM_WRITE_WRITE) | (1 << XPRG_MEM_WRITE_ERASE);
|
||||||
|
} else if (strcmp(mem->desc, "signature") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_APPL;
|
||||||
|
writemode = (1 << XPRG_MEM_WRITE_WRITE);
|
||||||
|
} else if (strncmp(mem->desc, "fuse", strlen("fuse")) == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_FUSE;
|
||||||
|
writemode = (1 << XPRG_MEM_WRITE_WRITE);
|
||||||
|
} else if (strcmp(mem->desc, "lockbits") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_LOCKBITS;
|
||||||
|
writemode = (1 << XPRG_MEM_WRITE_WRITE);
|
||||||
|
} else if (strcmp(mem->desc, "calibration") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_FACTORY_CALIBRATION;
|
||||||
|
writemode = (1 << XPRG_MEM_WRITE_WRITE);
|
||||||
|
} else if (strcmp(mem->desc, "usersig") == 0) {
|
||||||
|
memtype = XPRG_MEM_TYPE_USERSIG;
|
||||||
|
writemode = (1 << XPRG_MEM_WRITE_WRITE);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: stk600_xprog_paged_write(): unknown paged memory \"%s\"\n",
|
"%s: stk600_xprog_paged_write(): unknown paged memory \"%s\"\n",
|
||||||
|
|
Loading…
Reference in New Issue