retval = target_write_buffer(target,
write_algorithm->address,
sizeof(stm32lx_flash_write_code),
- (uint8_t *)stm32lx_flash_write_code);
+ stm32lx_flash_write_code);
if (retval != ERROR_OK) {
target_free_working_area(target, write_algorithm);
return retval;
first_bank_size_in_kb = 192;
stm32lx_info->has_dual_banks = true;
break;
+ case 0x437:
+ /* Dual bank, high density */
+ max_flash_size_in_kb = 512;
+ first_bank_size_in_kb = 192;
+ stm32lx_info->has_dual_banks = true;
+ break;
default:
LOG_WARNING("Cannot identify target as a STM32L family.");
return ERROR_FAIL;
/* Get the flash size from target. 0x427 and 0x436 devices use a
* different location for the Flash Size register, please see RM0038 r8 or
* newer. */
- if ((device_id & 0xfff) == 0x427 || (device_id & 0xfff) == 0x436)
+ if ((device_id & 0xfff) == 0x427 || (device_id & 0xfff) == 0x436 ||
+ (device_id & 0xfff) == 0x437)
retval = target_read_u16(target, F_SIZE_MP, &flash_size_in_kb);
else
retval = target_read_u16(target, F_SIZE, &flash_size_in_kb);
/* This is the first bank */
flash_size_in_kb = first_bank_size_in_kb;
} else {
- LOG_WARNING("STM32L flash bank base address config is incorrect. 0x%x but should rather be 0x%x or 0x%x",
+ LOG_WARNING("STM32L flash bank base address config is incorrect."
+ " 0x%" PRIx32 " but should rather be 0x%" PRIx32 " or 0x%" PRIx32,
bank->base, base_address, second_bank_base);
return ERROR_FAIL;
}
- LOG_INFO("STM32L flash has dual banks. Bank (%d) size is %dkb, base address is 0x%x",
+ LOG_INFO("STM32L flash has dual banks. Bank (%d) size is %dkb, base address is 0x%" PRIx32,
bank->bank_number, flash_size_in_kb, base_address);
} else {
- LOG_INFO("STM32L flash size is %dkb, base address is 0x%x", flash_size_in_kb, base_address);
+ LOG_INFO("STM32L flash size is %dkb, base address is 0x%" PRIx32, flash_size_in_kb, base_address);
}
/* if the user sets the size manually then ignore the probed value
}
break;
+ case 0x437:
+ device_str = "STM32L1xx (Medium+/High Density)";
+ break;
+
default:
snprintf(buf, buf_size, "Cannot identify target as a STM32L1");
return ERROR_FAIL;