#include <target/armv7m.h>
-/* flash programming support for NXP LPC17xx and LPC2xxx devices
+/**
+ * @file
+ * flash programming support for NXP LPC17xx and LPC2xxx devices.
+ *
+ * @todo Provide a way to update CCLK after declaring the flash bank.
+ * The value which is correct after chip reset will rarely still work
+ * right after the clocks switch to use the PLL (e.g. 4MHz --> 100 MHz).
+ */
+/*
* currently supported devices:
* variant 1 (lpc2000_v1):
* - 2104 | 5 | 6
target_buffer_set_u32(target, jump_gate,
ARMV4_5_T_BX(12));
target_buffer_set_u32(target, jump_gate + 4,
- ARMV4_5_T_B(0xfffffe));
+ ARMV5_T_BKPT(0));
break;
case lpc2000_v1:
case lpc2000_v2:
static const struct command_registration lpc2000_exec_command_handlers[] = {
{
.name = "part_id",
- .handler = &lpc2000_handle_part_id_command,
+ .handler = lpc2000_handle_part_id_command,
.mode = COMMAND_EXEC,
.help = "print part id of lpc2000 flash bank <num>",
},
};
struct flash_driver lpc2000_flash = {
- .name = "lpc2000",
- .commands = lpc2000_command_handlers,
- .flash_bank_command = &lpc2000_flash_bank_command,
- .erase = &lpc2000_erase,
- .protect = &lpc2000_protect,
- .write = &lpc2000_write,
- .probe = &lpc2000_probe,
- .auto_probe = &lpc2000_probe,
- .erase_check = &lpc2000_erase_check,
- .protect_check = &lpc2000_protect_check,
- .info = &lpc2000_info,
- };
-
-
+ .name = "lpc2000",
+ .commands = lpc2000_command_handlers,
+ .flash_bank_command = lpc2000_flash_bank_command,
+ .erase = lpc2000_erase,
+ .protect = lpc2000_protect,
+ .write = lpc2000_write,
+ .read = default_flash_read,
+ .probe = lpc2000_probe,
+ .auto_probe = lpc2000_probe,
+ .erase_check = lpc2000_erase_check,
+ .protect_check = lpc2000_protect_check,
+ .info = lpc2000_info,
+};