> A DR scan will go down the full DR scan portion of the state
> machine. If you add 2 back to back DR scans, I expect it will
> do what you need.
I'm not sure I understood you fully, but I tried:
static avr32_get_mem(target_t *target, u32 addr, u32 *data)
{
jtag_tap_t *tap = target->tap;
int retval;
jtag_add_end_state(TAP_IDLE);
jtag_set_instr(tap, INST_MEM_WORD_ACCESS);
scan_field_t field1;
field1.tap = tap;
field1.num_bits = 35;
u8 *data1 = calloc(CEIL(field1.num_bits, 8), 1);
buf_set_u32(data1, 0, 4, SYSTEM_BUS_CACHED);
buf_set_u32(data1, 4, 30, addr >> 2);
buf_set_u32(data1, 34, 1, READ_ACCESS);
field1.out_value = data1;
field1.out_mask = NULL;
field1.in_value = NULL;
field1.in_check_value = NULL;
field1.in_check_mask = NULL;
field1.in_handler = NULL;
field1.in_handler_priv = NULL;
jtag_add_dr_scan(1, &field1, -1);
scan_field_t field2;
field2.tap = tap;
field2.num_bits = 35;
u8 *data2 = calloc(CEIL(field2.num_bits, 8), 1);
field2.out_value = NULL;
field2.out_mask = NULL;
field2.in_value = data2;
field2.in_check_value = NULL;
field2.in_check_mask = NULL;
field2.in_handler = NULL;
field2.in_handler_priv = NULL;
jtag_add_dr_scan(1, &field2, -1);
retval = jtag_execute_queue();
if (retval == ERROR_OK) {
*data = buf_get_u32(data2, 0, 32);
LOG_DEBUG("avr32: %08x: %08x", addr, *data);
} else {
LOG_ERROR("avr32: could not read %08x", addr);
}
free(data1);
free(data2);
return retval;
}
Unfortunately, this looks like it only gives me back junk data,
no matter what address I select. The first result is always
0x00000000, then all following results are 0x00000002.
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development