> 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 Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development