This is an automated email from Gerrit. Tilman Sauerbeck ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/5200
-- gerrit commit 7382f36bf7bc6ab4cbdfdd0b04a9090188c5df73 Author: Tilman Sauerbeck <[email protected]> Date: Mon Jun 3 21:19:07 2019 +0200 jtag: drivers: buspirate: chunk SWD switch sequence transfer. Commit c2e18bfaeafd changed the size of the JTAG-to-SWD sequence from 15 bytes to 17 bytes. This broke SWD switch sequence transfer for buspirate, since buspirate packets can only hold a payload of up to 15 bytes and we tried to fit the whole sequence in a single packet. Splitting up the sequence transfer in appropriately sized packets makes buspirate SWD work again (successfully tested with buspirate firmwares v6.1 and v7.0). Change-Id: Ib5b412b9e77287d705d2762e31c16d30318b50e3 Signed-off-by: Tilman Sauerbeck <[email protected]> diff --git a/src/jtag/drivers/buspirate.c b/src/jtag/drivers/buspirate.c index 14c719d..45c76a9 100644 --- a/src/jtag/drivers/buspirate.c +++ b/src/jtag/drivers/buspirate.c @@ -1312,7 +1312,7 @@ static int buspirate_swd_switch_seq(enum swd_special_seq seq) { const uint8_t *sequence; int sequence_len; - uint8_t tmp[64]; + uint32_t no_bytes, sequence_offset; switch (seq) { case LINE_RESET: @@ -1335,15 +1335,24 @@ static int buspirate_swd_switch_seq(enum swd_special_seq seq) return ERROR_FAIL; } - /* FIXME: all above sequences fit into one pirate command for now - * but it may cause trouble later - */ + no_bytes = sequence_len; + sequence_offset = 0; + + while (no_bytes) { + uint8_t tmp[17]; + uint32_t to_send; + + to_send = no_bytes > 16 ? 16 : no_bytes; + + tmp[0] = 0x10 + ((to_send - 1) & 0x0F); + memcpy(tmp + 1, &sequence[sequence_offset], to_send); - tmp[0] = 0x10 + ((sequence_len - 1) & 0x0F); - memcpy(tmp + 1, sequence, sequence_len); + buspirate_serial_write(buspirate_fd, tmp, to_send + 1); + buspirate_serial_read(buspirate_fd, tmp, to_send + 1); - buspirate_serial_write(buspirate_fd, tmp, sequence_len + 1); - buspirate_serial_read(buspirate_fd, tmp, sequence_len + 1); + no_bytes -= to_send; + sequence_offset += to_send; + } return ERROR_OK; } -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
