added error handling to avoid false error messages.

git-svn-id: svn://svn.berlios.de/openocd/trunk@927 b42882b7-edfa-0310-969c-e2dbd0fdcd60
__archive__
oharboe 2008-08-18 17:07:56 +00:00
parent 20feb0431a
commit d1356149f0
1 changed files with 25 additions and 6 deletions

View File

@ -262,27 +262,46 @@ int str9x_erase(struct flash_bank_s *bank, int first, int last)
for (i = first; i <= last; i++) for (i = first; i <= last; i++)
{ {
int retval;
adr = bank->base + bank->sectors[i].offset; adr = bank->base + bank->sectors[i].offset;
/* erase sectors */ /* erase sectors */
target_write_u16(target, adr, erase_cmd); if ((retval=target_write_u16(target, adr, erase_cmd))!=ERROR_OK)
target_write_u16(target, adr, 0xD0); {
return retval;
}
if ((retval=target_write_u16(target, adr, 0xD0))!=ERROR_OK)
{
return retval;
}
/* get status */ /* get status */
target_write_u16(target, adr, 0x70); if ((retval=target_write_u16(target, adr, 0x70))!=ERROR_OK)
{
return retval;
}
while (1) { while (1) {
target_read_u8(target, adr, &status); if ((retval=target_read_u8(target, adr, &status))!=ERROR_OK)
{
return retval;
}
if( status & 0x80 ) if( status & 0x80 )
break; break;
usleep(1000); usleep(1000);
} }
/* clear status, also clear read array */ /* clear status, also clear read array */
target_write_u16(target, adr, 0x50); if ((retval=target_write_u16(target, adr, 0x50))!=ERROR_OK)
{
return retval;
}
/* read array command */ /* read array command */
target_write_u16(target, adr, 0xFF); if ((retval=target_write_u16(target, adr, 0xFF))!=ERROR_OK)
{
return retval;
}
if( status & 0x22 ) if( status & 0x22 )
{ {