Fix (again, hopefully) page addressing for the ATMega parts.

Rename the poorly chosen name "bank" to "page" for page addressing.
Atmel calls it "page" in their documentation.


git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk@91 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
Brian S. Dean 2001-10-16 23:32:30 +00:00
parent eef6b701c9
commit 216ed6b0f7
6 changed files with 145 additions and 131 deletions

View File

@ -295,34 +295,32 @@ int avr_read(int fd, AVRPART * p, int memtype)
/* /*
* write a byte of data to the indicated memory region * write a byte of data to the indicated memory region
*/ */
int avr_write_bank(int fd, AVRPART * p, int memtype, int avr_write_page(int fd, AVRPART * p, int memtype,
unsigned short bank) unsigned short page)
{ {
unsigned char cmd[4]; unsigned char cmd[4];
unsigned char res[4]; unsigned char res[4];
unsigned int shift;
LED_ON(fd, pgm->pinno[PIN_LED_PGM]); LED_ON(fd, pgm->pinno[PIN_LED_PGM]);
LED_OFF(fd, pgm->pinno[PIN_LED_ERR]); LED_OFF(fd, pgm->pinno[PIN_LED_ERR]);
/* /*
* 'bank' indicates which bank is being programmed: 0 for the first * 'page' indicates which page is being programmed: 0 for the first
* bank_size block, 1 for the second, up to num_banks-1 for the * page_size block, 1 for the second, up to num_pages-1 for the
* last. The MCU actually wants the high-order bits of what would * last. The MCU actually wants the high-order bits of what would
* be the actual address instead, shifted left to the upper most * be the actual address instead, shifted left to the upper most
* bits of a 16 bit word. For a 128K flash, the actual address is a * bits of a 16 bit word. For a 128K flash, the actual address is a
* 17 bits. To get the right value to send to the MCU, we want to * 17 bits. To get the right value to send to the MCU, we want to
* shift 'bank' left by 16 - the number of bits in the bank * shift 'page' left by 16 - the number of bits in the page
* address. * address.
*/ */
shift = 16 - p->mem[memtype].bankaddrbits; page = page << p->mem[memtype].pageaddr_shift;
bank = bank << shift;
fprintf(stderr, "bank address=%u\n", bank); fprintf(stderr, "page address=%u\n", page);
cmd[0] = 0x4c; cmd[0] = 0x4c;
cmd[1] = bank >> 8; /* high order bits of address */ cmd[1] = page >> 8; /* high order bits of address */
cmd[2] = bank & 0x0ff; /* low order bits of address */ cmd[2] = page & 0x0ff; /* low order bits of address */
cmd[3] = 0; /* these bits are ignored */ cmd[3] = 0; /* these bits are ignored */
avr_cmd(fd, cmd, res); avr_cmd(fd, cmd, res);
@ -355,11 +353,11 @@ int avr_write_byte(int fd, AVRPART * p, int memtype,
/* order here is very important, AVR_M_EEPROM, AVR_M_FLASH, AVR_M_FLASH+1 */ /* order here is very important, AVR_M_EEPROM, AVR_M_FLASH, AVR_M_FLASH+1 */
static unsigned char cmdbyte[3] = { 0xc0, 0x40, 0x48 }; static unsigned char cmdbyte[3] = { 0xc0, 0x40, 0x48 };
if (!p->mem[memtype].banked) { if (!p->mem[memtype].paged) {
/* /*
* 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 banked addressing. * use this optimization for paged addressing.
*/ */
b = avr_read_byte(fd, p, memtype, addr); b = avr_read_byte(fd, p, memtype, addr);
if (b == data) { if (b == data) {
@ -367,7 +365,7 @@ int avr_write_byte(int fd, AVRPART * p, int memtype,
} }
} }
else { else {
addr = addr % p->mem[memtype].bank_size; addr = addr % p->mem[memtype].page_size;
} }
LED_ON(fd, pgm->pinno[PIN_LED_PGM]); LED_ON(fd, pgm->pinno[PIN_LED_PGM]);
@ -388,11 +386,11 @@ int avr_write_byte(int fd, AVRPART * p, int memtype,
avr_cmd(fd, cmd, res); avr_cmd(fd, cmd, res);
if (p->mem[memtype].banked) { if (p->mem[memtype].paged) {
/* /*
* in banked addressing, single bytes to written to the memory * in paged addressing, single bytes to written to the memory
* page complete immediately, we only need to delay when we commit * page complete immediately, we only need to delay when we commit
* the whole page via the avr_write_bank() routine. * the whole page via the avr_write_page() routine.
*/ */
LED_OFF(fd, pgm->pinno[PIN_LED_PGM]); LED_OFF(fd, pgm->pinno[PIN_LED_PGM]);
return 0; return 0;
@ -483,15 +481,15 @@ int avr_write(int fd, AVRPART * p, int memtype, int size)
werror = 1; werror = 1;
} }
if (p->mem[memtype].banked) { if (p->mem[memtype].paged) {
if (((i % p->mem[memtype].bank_size) == p->mem[memtype].bank_size-1) || if (((i % p->mem[memtype].page_size) == p->mem[memtype].page_size-1) ||
(i == wsize-1)) { (i == wsize-1)) {
rc = avr_write_bank(fd, p, memtype, i/p->mem[memtype].bank_size); rc = avr_write_page(fd, p, memtype, i/p->mem[memtype].page_size);
if (rc) { if (rc) {
fprintf(stderr, fprintf(stderr,
" *** bank %ld (addresses 0x%04lx - 0x%04lx) failed to write\n", " *** page %ld (addresses 0x%04lx - 0x%04lx) failed to write\n",
i % p->mem[memtype].bank_size, i % p->mem[memtype].page_size,
i-p->mem[memtype].bank_size+1, i); i-p->mem[memtype].page_size+1, i);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
LED_ON(fd, pgm->pinno[PIN_LED_ERR]); LED_ON(fd, pgm->pinno[PIN_LED_ERR]);
werror = 1; werror = 1;
@ -717,18 +715,24 @@ void avr_mem_display(char * prefix, FILE * f, AVRMEM * m, int type)
{ {
if (m == NULL) { if (m == NULL) {
fprintf(f, fprintf(f,
"%sMem Bank Polled\n" "%sMem Page Page Polled\n"
"%sType Banked Size Size #Banks MinW MaxW ReadBack\n" "%sType Paged Size Size Shift #Pages MinW MaxW ReadBack\n"
"%s------ ------ ------ ---- ------ ----- ----- ---------\n", "%s------ ------ ------ ---- ----- ------ ----- ----- ---------\n",
prefix, prefix, prefix); prefix, prefix, prefix);
} }
else { else {
fprintf(f, fprintf(f,
"%s%-6s %-6s %6d %4d %6d %5d %5d 0x%02x 0x%02x\n", "%s%-6s %-6s %6d %4d %5d %6d %5d %5d 0x%02x 0x%02x\n",
prefix, avr_memtstr(type), m->banked ? "yes" : "no", prefix, avr_memtstr(type),
m->size, m->bank_size, m->num_banks, m->paged ? "yes" : "no",
m->min_write_delay, m->max_write_delay, m->size,
m->readback[0], m->readback[1]); m->page_size,
m->pageaddr_shift,
m->num_pages,
m->min_write_delay,
m->max_write_delay,
m->readback[0],
m->readback[1]);
} }
} }

View File

@ -46,11 +46,11 @@
#define AVR_MAXMEMTYPES 2 /* just flash and eeprom */ #define AVR_MAXMEMTYPES 2 /* just flash and eeprom */
typedef struct avrmem { typedef struct avrmem {
int banked; /* bank addressed (e.g. ATmega flash) */ int paged; /* page addressed (e.g. ATmega flash) */
int size; /* total memory size in bytes */ int size; /* total memory size in bytes */
int bank_size; /* size of memory bank (if bank addressed) */ int page_size; /* size of memory page (if page addressed) */
int num_banks; /* number of banks (if bank addressed) */ int num_pages; /* number of pages (if page addressed) */
int bankaddrbits; /* number of bits in the bank address */ int pageaddr_shift; /* number of bits in the page address */
int min_write_delay; /* microseconds */ int min_write_delay; /* microseconds */
int max_write_delay; /* microseconds */ int max_write_delay; /* microseconds */
unsigned char readback[2]; /* polled read-back values */ unsigned char readback[2]; /* polled read-back values */

View File

@ -31,20 +31,20 @@
# desc = <description> ; # quoted string # desc = <description> ; # quoted string
# chip_erase_delay = <num> ; # micro-seconds # chip_erase_delay = <num> ; # micro-seconds
# eeprom # eeprom
# banked = <yes/no> ; # yes / no # paged = <yes/no> ; # yes / no
# size = <num> ; # bytes # size = <num> ; # bytes
# bank_size = <num> ; # bytes # page_size = <num> ; # bytes
# num_banks = <num> ; # numeric # num_pages = <num> ; # numeric
# min_write_delay = <num> ; # micro-seconds # min_write_delay = <num> ; # micro-seconds
# max_write_delay = <num> ; # micro-seconds # max_write_delay = <num> ; # micro-seconds
# readback_p1 = <num> ; # byte value # readback_p1 = <num> ; # byte value
# readback_p2 = <num> ; # byte value # readback_p2 = <num> ; # byte value
# ; # ;
# flash # flash
# banked = <yes/no> ; # yes / no # paged = <yes/no> ; # yes / no
# size = <num> ; # bytes # size = <num> ; # bytes
# bank_size = <num> ; # bytes # page_size = <num> ; # bytes
# num_banks = <num> ; # numeric # num_pages = <num> ; # numeric
# min_write_delay = <num> ; # micro-seconds # min_write_delay = <num> ; # micro-seconds
# max_write_delay = <num> ; # micro-seconds # max_write_delay = <num> ; # micro-seconds
# readback_p1 = <num> ; # byte value # readback_p1 = <num> ; # byte value
@ -99,20 +99,20 @@ part
desc = "AT90S1200"; desc = "AT90S1200";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 64; size = 64;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x00; readback_p1 = 0x00;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = no; paged = no;
size = 1024; size = 1024;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0xff; readback_p1 = 0xff;
@ -126,20 +126,20 @@ part
desc = "AT90S2313"; desc = "AT90S2313";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 128; size = 128;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x80; readback_p1 = 0x80;
readback_p2 = 0x7f; readback_p2 = 0x7f;
; ;
flash flash
banked = no; paged = no;
size = 2048; size = 2048;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x7f; readback_p1 = 0x7f;
@ -153,20 +153,20 @@ part
desc = "AT90S2333"; desc = "AT90S2333";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 128; size = 128;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x00; readback_p1 = 0x00;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = no; paged = no;
size = 2048; size = 2048;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0xff; readback_p1 = 0xff;
@ -180,20 +180,20 @@ part
desc = "AT90S4433"; desc = "AT90S4433";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 256; size = 256;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x00; readback_p1 = 0x00;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = no; paged = no;
size = 4096; size = 4096;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0xff; readback_p1 = 0xff;
@ -207,20 +207,20 @@ part
desc = "AT90S4434"; desc = "AT90S4434";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 256; size = 256;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x00; readback_p1 = 0x00;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = no; paged = no;
size = 4096; size = 4096;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0xff; readback_p1 = 0xff;
@ -234,20 +234,20 @@ part
desc = "AT90S8515"; desc = "AT90S8515";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 512; size = 512;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x80; readback_p1 = 0x80;
readback_p2 = 0x7f; readback_p2 = 0x7f;
; ;
flash flash
banked = no; paged = no;
size = 8192; size = 8192;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x7f; readback_p1 = 0x7f;
@ -261,20 +261,20 @@ part
desc = "AT90S8535"; desc = "AT90S8535";
chip_erase_delay = 20000; chip_erase_delay = 20000;
eeprom eeprom
banked = no; paged = no;
size = 512; size = 512;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0x00; readback_p1 = 0x00;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = no; paged = no;
size = 8192; size = 8192;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 20000; max_write_delay = 20000;
readback_p1 = 0xff; readback_p1 = 0xff;
@ -288,20 +288,20 @@ part
desc = "ATMEGA103"; desc = "ATMEGA103";
chip_erase_delay = 112000; chip_erase_delay = 112000;
eeprom eeprom
banked = no; paged = no;
size = 4096; size = 4096;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 4000; min_write_delay = 4000;
max_write_delay = 9000; max_write_delay = 9000;
readback_p1 = 0x00; readback_p1 = 0x00;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = yes; paged = yes;
size = 131072; size = 131072;
bank_size = 256; page_size = 256;
num_banks = 512; num_pages = 512;
min_write_delay = 22000; min_write_delay = 22000;
max_write_delay = 56000; max_write_delay = 56000;
readback_p1 = 0xff; readback_p1 = 0xff;
@ -315,20 +315,20 @@ part
desc = "ATMEGA16"; desc = "ATMEGA16";
chip_erase_delay = 9000; chip_erase_delay = 9000;
eeprom eeprom
banked = no; paged = no;
size = 512; size = 512;
bank_size = 0; page_size = 0;
num_banks = 0; num_pages = 0;
min_write_delay = 9000; min_write_delay = 9000;
max_write_delay = 9000; max_write_delay = 9000;
readback_p1 = 0xff; readback_p1 = 0xff;
readback_p2 = 0xff; readback_p2 = 0xff;
; ;
flash flash
banked = yes; paged = yes;
size = 16384; size = 16384;
bank_size = 128; page_size = 128;
num_banks = 128; num_pages = 128;
min_write_delay = 4500; min_write_delay = 4500;
max_write_delay = 9000; max_write_delay = 9000;
readback_p1 = 0xff; readback_p1 = 0xff;

View File

@ -29,8 +29,8 @@
/* $Id$ */ /* $Id$ */
%token K_BANK_SIZE %token K_PAGE_SIZE
%token K_BANKED %token K_PAGEED
%token K_BUFF %token K_BUFF
%token K_CHIP_ERASE_DELAY %token K_CHIP_ERASE_DELAY
%token K_DESC %token K_DESC
@ -38,23 +38,27 @@
%token K_ERRLED %token K_ERRLED
%token K_FLASH %token K_FLASH
%token K_ID %token K_ID
%token K_LOADPAGE
%token K_MAX_WRITE_DELAY %token K_MAX_WRITE_DELAY
%token K_MIN_WRITE_DELAY %token K_MIN_WRITE_DELAY
%token K_MISO %token K_MISO
%token K_MOSI %token K_MOSI
%token K_NO %token K_NUM_PAGES
%token K_NUM_BANKS
%token K_PART %token K_PART
%token K_PGMLED %token K_PGMLED
%token K_PROGRAMMER %token K_PROGRAMMER
%token K_RDYLED %token K_RDYLED
%token K_READBACK_P1 %token K_READBACK_P1
%token K_READBACK_P2 %token K_READBACK_P2
%token K_READMEM
%token K_RESET %token K_RESET
%token K_SCK %token K_SCK
%token K_SIZE %token K_SIZE
%token K_VCC %token K_VCC
%token K_VFYLED %token K_VFYLED
%token K_WRITEPAGE
%token K_NO
%token K_YES %token K_YES
%token TKN_COMMA %token TKN_COMMA
@ -103,7 +107,8 @@ part_def :
{ current_part = avr_new_part(); } { current_part = avr_new_part(); }
part_parms part_parms
{ {
unsigned int i, j, pagebits; unsigned int i, j, shift, psize;
if (current_part->id[0] == 0) { if (current_part->id[0] == 0) {
fprintf(stderr, fprintf(stderr,
"%s: error at %s:%d: required parameter id not specified\n", "%s: error at %s:%d: required parameter id not specified\n",
@ -115,46 +120,48 @@ part_def :
* perform some sanity checking * perform some sanity checking
*/ */
for (i=0; i<AVR_MAXMEMTYPES; i++) { for (i=0; i<AVR_MAXMEMTYPES; i++) {
if (current_part->mem[i].banked) { if (current_part->mem[i].paged) {
if (!current_part->mem[i].bank_size) { if (!current_part->mem[i].page_size) {
fprintf(stderr, fprintf(stderr,
"%s: error at %s:%d: must specify bank_size for banked " "%s: error at %s:%d: must specify page_size for paged "
"memory\n", "memory\n",
progname, infile, lineno); progname, infile, lineno);
exit(1); exit(1);
} }
if (!current_part->mem[i].num_banks) { if (!current_part->mem[i].num_pages) {
fprintf(stderr, fprintf(stderr,
"%s: error at %s:%d: must specify num_banks for banked " "%s: error at %s:%d: must specify num_pages for paged "
"memory\n", "memory\n",
progname, infile, lineno); progname, infile, lineno);
exit(1); exit(1);
} }
if (current_part->mem[i].size != current_part->mem[i].bank_size * if (current_part->mem[i].size != current_part->mem[i].page_size *
current_part->mem[i].num_banks) { current_part->mem[i].num_pages) {
fprintf(stderr, fprintf(stderr,
"%s: error at %s:%d: bank size (%u) * num_banks (%u) = " "%s: error at %s:%d: page size (%u) * num_pages (%u) = "
"%u does not match memory size (%u)\n", "%u does not match memory size (%u)\n",
progname, infile, lineno, progname, infile, lineno,
current_part->mem[i].bank_size, current_part->mem[i].page_size,
current_part->mem[i].num_banks, current_part->mem[i].num_pages,
current_part->mem[i].bank_size * current_part->mem[i].num_banks, current_part->mem[i].page_size * current_part->mem[i].num_pages,
current_part->mem[i].size); current_part->mem[i].size);
exit(1); exit(1);
} }
pagebits = 0; shift = 0;
for (j=0; j<32 && !pagebits; j++) { psize = current_part->mem[i].page_size / 2 - 1;
if ((1 << j) == current_part->mem[i].num_banks) for (j=0; j<32 && !shift; j++) {
pagebits = j; if ((psize >> j) == 0) {
shift = j;
} }
if (!pagebits) { }
if (!shift) {
fprintf(stderr, fprintf(stderr,
"%s: error at %s:%d: can't determine the number of bank address bits\n" "%s: error at %s:%d: can't determine amount to shift for the page address\n"
" Are you sure num_banks (=%u) is correct?\n", " Are you sure page_size (=%u) is correct?\n",
progname, infile, lineno, current_part->mem[i].num_banks); progname, infile, lineno, current_part->mem[i].page_size);
exit(1); exit(1);
} }
current_part->mem[i].bankaddrbits = pagebits; current_part->mem[i].pageaddr_shift = shift;
} }
} }
@ -284,9 +291,9 @@ mem_specs :
mem_spec : mem_spec :
K_BANKED TKN_EQUAL yesno K_PAGED TKN_EQUAL yesno
{ {
current_part->mem[current_mem].banked = $3->primary == K_YES ? 1 : 0; current_part->mem[current_mem].paged = $3->primary == K_YES ? 1 : 0;
free_token($3); free_token($3);
} | } |
@ -297,15 +304,15 @@ mem_spec :
} | } |
K_BANK_SIZE TKN_EQUAL TKN_NUMBER K_PAGE_SIZE TKN_EQUAL TKN_NUMBER
{ {
current_part->mem[current_mem].bank_size = $3->value.number; current_part->mem[current_mem].page_size = $3->value.number;
free_token($3); free_token($3);
} | } |
K_NUM_BANKS TKN_EQUAL TKN_NUMBER K_NUM_PAGES TKN_EQUAL TKN_NUMBER
{ {
current_part->mem[current_mem].num_banks = $3->value.number; current_part->mem[current_mem].num_pages = $3->value.number;
free_token($3); free_token($3);
} | } |

View File

@ -123,8 +123,8 @@ SIGN [+-]
exit(1); } exit(1); }
} }
bank_size { yylval=NULL; return K_BANK_SIZE; } bank_size { yylval=NULL; return K_PAGE_SIZE; }
banked { yylval=NULL; return K_BANKED; } banked { yylval=NULL; return K_PAGED; }
buff { yylval=NULL; return K_BUFF; } buff { yylval=NULL; return K_BUFF; }
chip_erase_delay { yylval=NULL; return K_CHIP_ERASE_DELAY; } chip_erase_delay { yylval=NULL; return K_CHIP_ERASE_DELAY; }
desc { yylval=NULL; return K_DESC; } desc { yylval=NULL; return K_DESC; }
@ -136,7 +136,10 @@ max_write_delay { yylval=NULL; return K_MAX_WRITE_DELAY; }
min_write_delay { yylval=NULL; return K_MIN_WRITE_DELAY; } min_write_delay { yylval=NULL; return K_MIN_WRITE_DELAY; }
miso { yylval=NULL; return K_MISO; } miso { yylval=NULL; return K_MISO; }
mosi { yylval=NULL; return K_MOSI; } mosi { yylval=NULL; return K_MOSI; }
num_banks { yylval=NULL; return K_NUM_BANKS; } num_banks { yylval=NULL; return K_NUM_PAGES; }
num_pages { yylval=NULL; return K_NUM_PAGES; }
page_size { yylval=NULL; return K_PAGE_SIZE; }
paged { yylval=NULL; return K_PAGED; }
part { yylval=NULL; return K_PART; } part { yylval=NULL; return K_PART; }
pgmled { yylval=NULL; return K_PGMLED; } pgmled { yylval=NULL; return K_PGMLED; }
programmer { yylval=NULL; return K_PROGRAMMER; } programmer { yylval=NULL; return K_PROGRAMMER; }

View File

@ -316,8 +316,8 @@ int cmd_write(int fd, struct avrpart * p, int argc, char * argv[])
return -1; return -1;
} }
if (p->mem[memtype].banked) { if (p->mem[memtype].paged) {
fprintf(stderr, "%s (write): sorry, interactive write of bank addressed " fprintf(stderr, "%s (write): sorry, interactive write of page addressed "
"memory is not supported\n", progname); "memory is not supported\n", progname);
return -1; return -1;
} }