stm32f1x: Increase options erase timeout
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Fri, 5 Oct 2012 22:13:24 +0000 (00:13 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 8 Oct 2012 10:29:39 +0000 (10:29 +0000)
The erase time for the option byte page is not directly specified but is
assumed to be the same as the other pages (or mass erase) which is 20 to
40 ms. The current timeout value is 10 which means 10 ms plus the time to
poll the status flag that many times.

With faster interfaces or drivers (such as when using the ftdi driver
instead of the ft2232 driver) the adapter delay is not enough in some
cases, unless the jtag freq is reduced as a workaround. The result is a
"timed out waiting for flash" error when trying to write the options.

Increase the timeout to a minimum of 100 ms, which is in line with the
other erase timeouts. Also make defines of both the erase and the program
timeouts.

Change-Id: Ia86e71505033c52b60ef30092000689fbb547a18
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/902
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nor/stm32f1x.c

index 9d093607fd1f315964732c39db44ca8f149f7365..d021bbfb3835a4a81f06ebc4de97d426197cdc70 100644 (file)
 #define KEY1                   0x45670123
 #define KEY2                   0xCDEF89AB
 
+/* timeout values */
+
+#define FLASH_WRITE_TIMEOUT 10
+#define FLASH_ERASE_TIMEOUT 100
+
 struct stm32x_options {
        uint16_t RDP;
        uint16_t user_options;
@@ -283,7 +288,7 @@ static int stm32x_erase_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -327,7 +332,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -336,7 +341,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -345,7 +350,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -354,7 +359,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -363,7 +368,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -372,7 +377,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 10);
+       retval = stm32x_wait_status_busy(bank, FLASH_WRITE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 
@@ -487,7 +492,7 @@ static int stm32x_erase(struct flash_bank *bank, int first, int last)
                if (retval != ERROR_OK)
                        return retval;
 
-               retval = stm32x_wait_status_busy(bank, 100);
+               retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
                if (retval != ERROR_OK)
                        return retval;
 
@@ -1475,7 +1480,7 @@ static int stm32x_mass_erase(struct flash_bank *bank)
        if (retval != ERROR_OK)
                return retval;
 
-       retval = stm32x_wait_status_busy(bank, 100);
+       retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
        if (retval != ERROR_OK)
                return retval;
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)