* variant 2 (lpc2000_v2):
* - 213x
* - 214x
+ * - 2101|2|3
+ * - 2364|6|8
+ * - 2378
*/
int lpc2000_register_commands(struct command_context_s *cmd_ctx);
/* variant 2 has a uniform layout, only number of sectors differs */
switch (bank->size)
{
+ case 8 * 1024:
+ num_sectors = 2;
+ break;
+ case 16 * 1024:
+ num_sectors = 4;
+ break;
case 32 * 1024:
num_sectors = 8;
break;
case 256 * 1024:
num_sectors = 15;
break;
+ case 512 * 1024:
case 500 * 1024:
num_sectors = 27;
break;
}
/* write IAP code to working area */
- buf_set_u32(jump_gate, 0, 32, ARMV4_5_BX(12));
- buf_set_u32(jump_gate, 32, 32, 0xeafffffe);
- target->type->write_memory(target, lpc2000_info->iap_working_area->address, 4, 2, (u8*)jump_gate);
+ target_buffer_set_u32(target, jump_gate, ARMV4_5_BX(12));
+ target_buffer_set_u32(target, jump_gate + 4, ARMV4_5_B(0xfffffe, 0));
+ target->type->write_memory(target, lpc2000_info->iap_working_area->address, 4, 2, jump_gate);
}
armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
/* command parameter table */
init_mem_param(&mem_params[0], lpc2000_info->iap_working_area->address + 8, 4 * 6, PARAM_OUT);
- buf_set_u32(mem_params[0].value, 0, 32, code);
- buf_set_u32(mem_params[0].value, 32, 32, param_table[0]);
- buf_set_u32(mem_params[0].value, 64, 32, param_table[1]);
- buf_set_u32(mem_params[0].value, 96, 32, param_table[2]);
- buf_set_u32(mem_params[0].value, 128, 32, param_table[3]);
- buf_set_u32(mem_params[0].value, 160, 32, param_table[4]);
+ target_buffer_set_u32(target, mem_params[0].value, code);
+ target_buffer_set_u32(target, mem_params[0].value + 0x4, param_table[0]);
+ target_buffer_set_u32(target, mem_params[0].value + 0x8, param_table[1]);
+ target_buffer_set_u32(target, mem_params[0].value + 0xc, param_table[2]);
+ target_buffer_set_u32(target, mem_params[0].value + 0x10, param_table[3]);
+ target_buffer_set_u32(target, mem_params[0].value + 0x14, param_table[4]);
init_reg_param(®_params[0], "r0", 32, PARAM_OUT);
buf_set_u32(reg_params[0].value, 0, 32, lpc2000_info->iap_working_area->address + 0x8);
target->type->run_algorithm(target, 2, mem_params, 5, reg_params, lpc2000_info->iap_working_area->address, lpc2000_info->iap_working_area->address + 0x4, 10000, &armv4_5_info);
status_code = buf_get_u32(mem_params[1].value, 0, 32);
- result_table[0] = buf_get_u32(mem_params[1].value, 32, 32);
- result_table[1] = buf_get_u32(mem_params[1].value, 64, 32);
+ result_table[0] = target_buffer_get_u32(target, mem_params[1].value);
+ result_table[1] = target_buffer_get_u32(target, mem_params[1].value + 4);
destroy_mem_param(&mem_params[0]);
destroy_mem_param(&mem_params[1]);
return ERROR_OK;
}
-/* flash_bank lpc2000 <base> <size> 0 0 <lpc_variant> <target#> <cclk> [calc_checksum]
+/* flash bank lpc2000 <base> <size> 0 0 <lpc_variant> <target#> <cclk> [calc_checksum]
*/
int lpc2000_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank)
{