extern flash_driver_t lpc288x_flash;
extern flash_driver_t ocl_flash;
extern flash_driver_t pic32mx_flash;
+extern flash_driver_t avr_flash;
flash_driver_t *flash_drivers[] = {
&lpc2000_flash,
&lpc288x_flash,
&ocl_flash,
&pic32mx_flash,
+ &avr_flash,
NULL,
};
static int handle_flash_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
flash_bank_t *p;
- int i = 0;
+ u32 i = 0;
int j = 0;
int retval;
u32 pattern;
u32 count;
u8 chunk[1024];
+ u8 readback[1024];
u32 wrote = 0;
u32 cur_size = 0;
- int chunk_count;
+ u32 chunk_count;
char *duration_text;
duration_t duration;
target_t *target = get_current_target(cmd_ctx);
u32 i;
- int wordsize;
+ u32 wordsize;
if (argc != 3)
{
err = flash_driver_write(bank, chunk, address - bank->base + wrote, cur_size);
if (err!=ERROR_OK)
return err;
+
+ err = target_read_buffer(target, address + wrote, cur_size, readback);
+ if (err!=ERROR_OK)
+ return err;
+
+ unsigned i;
+ for (i=0; i<cur_size; i++)
+ {
+ if (readback[i]!=chunk[i])
+ {
+ LOG_ERROR("Verfication error address 0x%08x, read back 0x%02x, expected 0x%02x", address + wrote + i, readback[i], chunk[i]);
+ return ERROR_FAIL;
+ }
+ }
+
}
if ((retval = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
u8 buffer[1024];
int buffer_size = sizeof(buffer);
int i;
- int nBytes;
+ u32 nBytes;
if (bank->target->state != TARGET_HALTED)
{
for (i = 0; i < bank->num_sectors; i++)
{
- int j;
+ u32 j;
bank->sectors[i].is_erased = 1;
for (j = 0; j < bank->sectors[i].size; j += buffer_size)
{
- int chunk;
+ u32 chunk;
int retval;
chunk = buffer_size;
if (chunk > (j - bank->sectors[i].size))