diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-08-26 11:30:34 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-08-26 11:30:34 +0000 |
commit | e5181df1d461980e6faee9c08891ccae901a06f2 (patch) | |
tree | 30ee78d112ed06a327cbc59be78c8a25f33cf342 /src/flash | |
parent | f5507d89293f00458f88624ffa98434d58b91e0f (diff) | |
download | riscv-openocd-e5181df1d461980e6faee9c08891ccae901a06f2.zip riscv-openocd-e5181df1d461980e6faee9c08891ccae901a06f2.tar.gz riscv-openocd-e5181df1d461980e6faee9c08891ccae901a06f2.tar.bz2 |
added 1000ms timeout
git-svn-id: svn://svn.berlios.de/openocd/trunk@970 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/flash')
-rw-r--r-- | src/flash/str9x.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/flash/str9x.c b/src/flash/str9x.c index e781c14..94a2a1c 100644 --- a/src/flash/str9x.c +++ b/src/flash/str9x.c @@ -305,8 +305,9 @@ int str9x_erase(struct flash_bank_s *bank, int first, int last) { return retval; } - - while (1) { + + int i; + for (i=0; i<1000; i++) { if ((retval=target_read_u8(target, adr, &status))!=ERROR_OK) { return retval; @@ -315,6 +316,11 @@ int str9x_erase(struct flash_bank_s *bank, int first, int last) break; alive_sleep(1); } + if (i==1000) + { + LOG_ERROR("erase timed out"); + return ERROR_FAIL; + } /* clear status, also clear read array */ if ((retval=target_write_u16(target, adr, 0x50))!=ERROR_OK) @@ -571,13 +577,20 @@ int str9x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count) /* get status command */ target_write_u16(target, bank_adr, 0x70); - - while (1) { + + int i; + for (i=0; i<1000; i++) + { target_read_u8(target, bank_adr, &status); if( status & 0x80 ) break; alive_sleep(1); } + if (i==1000) + { + LOG_ERROR("write timed out"); + return ERROR_FAIL; + } /* clear status reg and read array */ target_write_u16(target, bank_adr, 0x50); @@ -614,12 +627,19 @@ int str9x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count) /* query status command */ target_write_u16(target, bank_adr, 0x70); - while (1) { + int i; + for (i=0; i<1000; i++) + { target_read_u8(target, bank_adr, &status); if( status & 0x80 ) break; alive_sleep(1); } + if (i==1000) + { + LOG_ERROR("write timed out"); + return ERROR_FAIL; + } /* clear status reg and read array */ target_write_u16(target, bank_adr, 0x50); |