From f2f99a9e0a1edff2f688146b923b4d24f93c7abf Mon Sep 17 00:00:00 2001 From: Nemui Trinomius Date: Sat, 26 Oct 2013 12:17:04 +0900 Subject: [PATCH] lpc2000: Fix flash programming fail on LPC4300 internal flash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-on: http://openocd.zylin.com/1784 Tested-by: jenkins Reviewed-by: Jens Bauer Reviewed-by: Mathias Küster Reviewed-by: Spencer Oliver --- src/flash/nor/lpc2000.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/flash/nor/lpc2000.c b/src/flash/nor/lpc2000.c index 12814aad1..aadb9999a 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)