added 1000ms timeout
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 26 Aug 2008 11:30:34 +0000 (11:30 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 26 Aug 2008 11:30:34 +0000 (11:30 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@970 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/str9x.c

index e781c144d08021936572f84701a75edea43ad33d..94a2a1cf15e32ca38cc78317386f22a4012520cd 100644 (file)
@@ -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);