From 001f20c884e9852583485042ab444a64fe1ab531 Mon Sep 17 00:00:00 2001 From: Patrick Urban Date: Wed, 27 Dec 2023 13:38:13 +0100 Subject: [PATCH] gatemate: use more suitable change to RUN_TEST_IDLE state --- src/colognechip.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/colognechip.cpp b/src/colognechip.cpp index dd8c1dc..62d5e4b 100644 --- a/src/colognechip.cpp +++ b/src/colognechip.cpp @@ -284,7 +284,9 @@ void CologneChip::programJTAG_sram(const uint8_t *data, int length) int bits_before = _jtag->get_devices_list().size() - _jtag->get_device_index() - 1; if (bits_before > 0) { int n = 8 - (bits_before % 8); - _jtag->toggleClk(n); + uint8_t tx[n]; + memset(tx, 0x00, n); + _jtag->shiftDR(tx, NULL, n, Jtag::SHIFT_DR); } /* the bypass register defaults to '0'. @@ -299,19 +301,21 @@ void CologneChip::programJTAG_sram(const uint8_t *data, int length) _jtag->shiftDR(tx, NULL, 8-bits_after, Jtag::SHIFT_DR); } + Jtag::tapState_t next_state = Jtag::SHIFT_DR; for (int i = 0; i < length; i += size) { - if (length < i + size) + if (length < i + size) { size = length-i; + next_state = Jtag::RUN_TEST_IDLE; + } for (int ii = 0; ii < size; ii++) tmp[ii] = data[i+ii]; - _jtag->shiftDR(tmp, NULL, size*8, Jtag::SHIFT_DR); + _jtag->shiftDR(tmp, NULL, size*8, next_state); progress.display(i); } progress.done(); - _jtag->set_state(Jtag::RUN_TEST_IDLE); if (_ftdi_jtag) { waitCfgDone();