summaryrefslogtreecommitdiff
path: root/src/flash/stm32x.c
diff options
context:
space:
mode:
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-02-26 10:06:00 +0000
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-02-26 10:06:00 +0000
commit58f4bd4a3cd1ec1b160944380fd3a19afaba4db5 (patch)
treeb4aabcda913236b67871f99aeed636002bec3b5b /src/flash/stm32x.c
parent6874a83fed0b681b6161d6643a7b42462d09dc09 (diff)
downloadopenocd+libswd-58f4bd4a3cd1ec1b160944380fd3a19afaba4db5.tar.gz
openocd+libswd-58f4bd4a3cd1ec1b160944380fd3a19afaba4db5.tar.bz2
openocd+libswd-58f4bd4a3cd1ec1b160944380fd3a19afaba4db5.tar.xz
openocd+libswd-58f4bd4a3cd1ec1b160944380fd3a19afaba4db5.zip
- stm32x flash driver - add support for stm32105/107 (connectivity line)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1383 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/flash/stm32x.c')
-rw-r--r--src/flash/stm32x.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/flash/stm32x.c b/src/flash/stm32x.c
index 1b821059..2ac44c69 100644
--- a/src/flash/stm32x.c
+++ b/src/flash/stm32x.c
@@ -508,7 +508,7 @@ int stm32x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 co
0x01, 0x3A, /* subs r2, r2, #1 */
0xED, 0xD1, /* bne write */
/* exit: */
- 0xFE, 0xE7, /* b exit */
+ 0xFE, 0xE7, /* b exit */
0x10, 0x20, 0x02, 0x40, /* STM32_FLASH_CR: .word 0x40022010 */
0x0C, 0x20, 0x02, 0x40 /* STM32_FLASH_SR: .word 0x4002200C */
};
@@ -757,6 +757,21 @@ int stm32x_probe(struct flash_bank_s *bank)
num_pages = 512;
}
}
+ else if ((device_id & 0x7ff) == 0x418)
+ {
+ /* connectivity line density - we have 1k pages
+ * 4 pages for a protection area */
+ page_size = 1024;
+ stm32x_info->ppage_size = 4;
+
+ /* check for early silicon */
+ if (num_pages == 0xffff)
+ {
+ /* number of sectors incorrect on revZ */
+ LOG_WARNING( "STM32 flash size failed, probe inaccurate - assuming 256k flash" );
+ num_pages = 256;
+ }
+ }
else
{
LOG_WARNING( "Cannot identify target as a STM32 family." );
@@ -875,6 +890,23 @@ int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size)
break;
}
}
+ else if ((device_id & 0x7ff) == 0x418)
+ {
+ printed = snprintf(buf, buf_size, "stm32x (Connectivity) - Rev: ");
+ buf += printed;
+ buf_size -= printed;
+
+ switch(device_id >> 16)
+ {
+ case 0x1000:
+ snprintf(buf, buf_size, "A");
+ break;
+
+ default:
+ snprintf(buf, buf_size, "unknown");
+ break;
+ }
+ }
else
{
snprintf(buf, buf_size, "Cannot identify target as a stm32x\n");