2003-08-14 Marcel Telka <marcel@telka.sk>

* include/jtag.h (flasherase): New function prototype (patch 772267, Thomas Fröhlich).
	* src/flash.c (flasherase): New function (patch 772267, Thomas Fröhlich).
	* src/cmd/Makefile.am (libcmd_a_SOURCES): Added eraseflash.c (patch 772267, Thomas Fröhlich).
	* src/cmd/cmd.c (cmds): Added cmd_eraseflash (patch 772267, Thomas Fröhlich).
	* src/cmd/eraseflash.c: New file (patch 772267, Thomas Fröhlich).


git-svn-id: https://urjtag.svn.sourceforge.net/svnroot/urjtag/trunk@515 b68d4a1b-bc3d-0410-92ed-d4ac073336b7
master
Marcel Telka 22 years ago
parent c904c19581
commit 9928910711

@ -1,3 +1,11 @@
2003-08-14 Marcel Telka <marcel@telka.sk>
* include/jtag.h (flasherase): New function prototype (patch 772267, Thomas Fröhlich).
* src/flash.c (flasherase): New function (patch 772267, Thomas Fröhlich).
* src/cmd/Makefile.am (libcmd_a_SOURCES): Added eraseflash.c (patch 772267, Thomas Fröhlich).
* src/cmd/cmd.c (cmds): Added cmd_eraseflash (patch 772267, Thomas Fröhlich).
* src/cmd/eraseflash.c: New file (patch 772267, Thomas Fröhlich).
2003-08-14 Marcel Telka <marcel@telka.sk>
* src/tap/chain.c (chain_shift_instructions): Moved test for parts without active instruction before

@ -25,6 +25,7 @@ jtag-0.5:
* Added new 'include' command.
* Added new commands 'signal', 'register', 'bit', and enhanced 'instruction' command
to allow create JTAG declarations from command line (or script).
* Added new 'eraseflash' command (patch 772267, Thomas Fröhlich).
* JTAG declarations are now executed as scripts.
* Added support for parts without IDCODE instruction.
* Added support for "downto" in bit vectors and "observe_only" into bsdl2jtag

@ -6,6 +6,7 @@ Ian Campbell
Alex (d18c7db)
Rainer Dörken
Chris Ellec
Thomas Fröhlich
Jiun-Shian Ho
Jachym Holecek
August Hörandl

@ -46,4 +46,6 @@ void discovery( chain_t *chain );
void readmem( bus_t *bus, FILE *f, uint32_t addr, uint32_t len );
void flasherase( bus_t *bus, uint32_t addr, int number );
#endif /* JTAG_H */

@ -45,6 +45,7 @@ libcmd_a_SOURCES = \
peekpoke.c \
readmem.c \
flashmem.c \
eraseflash.c \
script.c \
include.c \
cmd.c

@ -54,6 +54,7 @@ extern cmd_t cmd_poke;
extern cmd_t cmd_readmem;
extern cmd_t cmd_detectflash;
extern cmd_t cmd_flashmem;
extern cmd_t cmd_eraseflash;
extern cmd_t cmd_script;
extern cmd_t cmd_include;
@ -81,6 +82,7 @@ const cmd_t *cmds[] = {
&cmd_readmem,
&cmd_detectflash,
&cmd_flashmem,
&cmd_eraseflash,
&cmd_script,
&cmd_include,
NULL /* last must be NULL */

@ -0,0 +1,85 @@
/*
* $Id$
*
* Copyright (C) 2003 TF
*
* 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.
*
* Written by Thomas Froehlich <t.froehlich@gmx.at>, 2003.
*
*/
#include <config.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "jtag.h"
#include "flash.h"
#include "cmd.h"
static int
cmd_eraseflash_run( char *params[] )
{
uint32_t adr = 0;
int number = 0;
if (cmd_params( params ) != 3)
return -1;
if (!cmd_test_cable())
return 1;
if (!bus) {
printf( _("Error: Bus driver missing.\n") );
return 1;
}
if (cmd_get_number( params[1], &adr ))
return -1;
if (cmd_get_number( params[2], &number ))
return -1;
flasherase( bus, adr, number );
return 1;
}
static void
cmd_eraseflash_help( void )
{
int i;
printf( _(
"Usage: %s ADDR BLOCKS\n"
"\n"
"ADDR target addres for erasing block\n"
"BLOCKS number of blocks to erase\n"
"\n"
"ADDR could be in decimal or hexadecimal (prefixed with 0x) form.\n"
"BLOCKS musst be in decimal form; count from 1\n"
"\n"
"'%s' works only with part 0. Part 0 must support bus operations.\n"
"Supported Flash Memories\n"
), "eraseflash", "eraseflash");
for (i = 0; flash_drivers[i]; i++)
printf( _("%s\n %s\n"), _(flash_drivers[i]->name), _(flash_drivers[i]->description) );
}
cmd_t cmd_eraseflash = {
"eraseflash",
N_("erase flash memory by number of blocks"),
cmd_eraseflash_help,
cmd_eraseflash_run
};

@ -337,3 +337,40 @@ flashmem( bus_t *bus, FILE *f, uint32_t addr )
cfi_array_free( cfi_array );
}
void
flasherase( bus_t *bus, uint32_t addr, int number )
{
cfi_query_structure_t *cfi;
cfi_array_t *cfi_array;
int i;
printf( _("addr: 0x%08X\n"), addr);
flashcheck( bus, &cfi_array );
if (!cfi_array || !flash_driver) {
printf( _("no flash driver found\n") );
return;
}
cfi = &cfi_array->cfi_chips[0]->cfi;
printf( _("program:\n") );
for (i = 1; i <= number; i++) {
int addr_block = (cfi->device_geometry.erase_block_regions[0].erase_block_size * flash_driver->bus_width / 2);
int block_no = addr / addr_block;
printf( _("addr: 0x%08X\n"), addr);
fflush(stdout);
flash_driver->unlock_block( cfi_array, addr );
printf( _("block %d unlocked\n"), block_no );
printf( _("erasing block %d: %d\n"), block_no, flash_driver->erase_block( cfi_array, addr ) );
addr |= (addr_block - 1);
addr += 1;
}
printf( _("\nDone.\n") );
cfi_array_free( cfi_array );
/* BYPASS */
// parts_set_instruction( ps, "BYPASS" );
// chain_shift_instructions( chain );
}

Loading…
Cancel
Save