stm32lx.c: Read IDcode at appropriate address.

Trying to read the L0 idcode at the L1 idcode address 0xE0042000 often
resulted in an uncatched error. Reading at the right L0 address 0x40015800
afterwards results in reading 0. So access to the device is denied..

Change-Id: I6de92cf99a5d5d46c72f9ba055613cbc5753a951
Signed-off-by: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Reviewed-on: http://openocd.zylin.com/3883
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Uwe Bonnes 2016-11-14 19:12:38 +01:00 committed by Spencer Oliver
parent 5384d2c209
commit 9bbe299b35
1 changed files with 6 additions and 9 deletions

View File

@ -726,16 +726,13 @@ reset_pg_and_lock:
static int stm32lx_read_id_code(struct target *target, uint32_t *id) static int stm32lx_read_id_code(struct target *target, uint32_t *id)
{ {
/* read stm32 device id register */ struct armv7m_common *armv7m = target_to_armv7m(target);
int retval = target_read_u32(target, DBGMCU_IDCODE, id); int retval;
if (retval != ERROR_OK) if (armv7m->arm.is_armv6m == true)
return retval;
/* STM32L0 parts will have 0 there, try reading the L0's location for
* DBG_IDCODE in case this is an L0 part. */
if (*id == 0)
retval = target_read_u32(target, DBGMCU_IDCODE_L0, id); retval = target_read_u32(target, DBGMCU_IDCODE_L0, id);
else
/* read stm32 device id register */
retval = target_read_u32(target, DBGMCU_IDCODE, id);
return retval; return retval;
} }