Use a four byte value instead of a two byte value for the programming

cycle count stored at the end of EEPROM.  It seems as though Atmel was
greatly conservative in claiming a 1000 count reliability for the
FLASH.  I current have a part that has been reprogrammed 173330 times,
and counting.

Fix a compiler warning.


git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@144 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
bsd 2002-10-11 19:36:56 +00:00
parent df87a2838a
commit 88dd9b39cd
2 changed files with 47 additions and 15 deletions

60
avr.c
View File

@ -1046,7 +1046,7 @@ int avr_get_cycle_count(int fd, AVRPART * p)
{
AVRMEM * a;
int cycle_count;
unsigned char v1, v2;
unsigned char v1, v2, v3, v4;
int rc;
a = avr_locate_mem(p, "eeprom");
@ -1054,20 +1054,38 @@ int avr_get_cycle_count(int fd, AVRPART * p)
return -1;
}
rc = avr_read_byte(fd, p, a, a->size-2, &v1);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't read memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
rc = avr_read_byte(fd, p, a, a->size-1, &v2);
rc = avr_read_byte(fd, p, a, a->size-4, &v1);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't read memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
cycle_count = ((unsigned int)v1) << 8 | v2;
rc = avr_read_byte(fd, p, a, a->size-3, &v2);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't read memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
rc = avr_read_byte(fd, p, a, a->size-2, &v3);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't read memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
rc = avr_read_byte(fd, p, a, a->size-1, &v4);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't read memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
cycle_count = (((unsigned int)v1) << 24) |
(((unsigned int)v2) << 16) |
(((unsigned int)v3) << 8) |
v4;
return cycle_count;
}
@ -1076,7 +1094,7 @@ int avr_get_cycle_count(int fd, AVRPART * p)
int avr_put_cycle_count(int fd, AVRPART * p, int cycles)
{
AVRMEM * a;
unsigned char v1, v2;
unsigned char v1, v2, v3, v4;
int rc;
a = avr_locate_mem(p, "eeprom");
@ -1084,16 +1102,30 @@ int avr_put_cycle_count(int fd, AVRPART * p, int cycles)
return -1;
}
v2 = cycles & 0x0ff;
v1 = (cycles & 0x0ff00) >> 8;
v4 = cycles & 0x0ff;
v3 = (cycles & 0x0ff00) >> 8;
v2 = (cycles & 0x0ff0000) >> 16;
v1 = (cycles & 0x0ff000000) >> 24;
rc = avr_write_byte(fd, p, a, a->size-2, v1);
rc = avr_write_byte(fd, p, a, a->size-4, v1);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't write memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
rc = avr_write_byte(fd, p, a, a->size-1, v2);
rc = avr_write_byte(fd, p, a, a->size-3, v2);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't write memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
rc = avr_write_byte(fd, p, a, a->size-2, v3);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't write memory for cycle count, rc=%d\n",
progname, rc);
return -1;
}
rc = avr_write_byte(fd, p, a, a->size-1, v4);
if (rc < 0) {
fprintf(stderr, "%s: WARNING: can't write memory for cycle count, rc=%d\n",
progname, rc);

2
term.c
View File

@ -482,7 +482,7 @@ int cmd_sig(int fd, struct avrpart * p, int argc, char * argv[])
p->desc);
}
else {
fprintf(stdout, "Device signature = 0x", progname);
fprintf(stdout, "Device signature = 0x");
for (i=0; i<m->size; i++)
fprintf(stdout, "%02x", m->buf[i]);
fprintf(stdout, "\n\n");