aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNemui Trinomius <nemuisan_kawausogasuki@live.jp>2013-10-26 12:17:04 +0900
committerSpencer Oliver <spen@spen-soft.co.uk>2013-10-29 22:47:51 +0000
commitf2f99a9e0a1edff2f688146b923b4d24f93c7abf (patch)
tree87134882c36c9276ffdb9011a74757c80be7165f /src
parentb3a3d8312e757ade229d426b144b48f3673f41a3 (diff)
downloadriscv-openocd-f2f99a9e0a1edff2f688146b923b4d24f93c7abf.zip
riscv-openocd-f2f99a9e0a1edff2f688146b923b4d24f93c7abf.tar.gz
riscv-openocd-f2f99a9e0a1edff2f688146b923b4d24f93c7abf.tar.bz2
lpc2000: Fix flash programming fail on LPC4300 internal flash
LPC43xx with internal flash parts model needs "IAP Init(49)"Command before erase & write internal flash.Tested on a LPC4337 and LPC4357. Change-Id: I48620ce12e578c61a3ca1adcd48815c1f71c35bb Signed-off-by: Nemui Trinomius <nemuisan_kawausogasuki@live.jp> Reviewed-on: http://openocd.zylin.com/1784 Tested-by: jenkins Reviewed-by: Jens Bauer <jens@gpio.dk> Reviewed-by: Mathias Küster <kesmtp@freenet.de> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src')
-rw-r--r--src/flash/nor/lpc2000.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/flash/nor/lpc2000.c b/src/flash/nor/lpc2000.c
index 12814aa..aadb999 100644
--- a/src/flash/nor/lpc2000.c
+++ b/src/flash/nor/lpc2000.c
@@ -653,6 +653,10 @@ static int lpc2000_erase(struct flash_bank *bank, int first, int last)
if (retval != ERROR_OK)
return retval;
+ if (lpc2000_info->variant == lpc4300)
+ /* Init IAP Anyway */
+ lpc2000_iap_call(bank, iap_working_area, 49, param_table, result_table);
+
/* Prepare sectors */
int status_code = lpc2000_iap_call(bank, iap_working_area, 50, param_table, result_table);
switch (status_code) {
@@ -781,6 +785,10 @@ static int lpc2000_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offs
uint32_t param_table[5] = {0};
uint32_t result_table[4];
+ if (lpc2000_info->variant == lpc4300)
+ /* Init IAP Anyway */
+ lpc2000_iap_call(bank, iap_working_area, 49, param_table, result_table);
+
while (bytes_remaining > 0) {
uint32_t thisrun_bytes;
if (bytes_remaining >= lpc2000_info->cmd51_max_buffer)