From 3b783c09eeb9c95b3b28281907d0234ebde14848 Mon Sep 17 00:00:00 2001 From: Alexey Starikovskiy Date: Mon, 25 Sep 2023 09:07:43 +0300 Subject: [PATCH] Split writeSRAM to show progress --- src/gowin.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gowin.cpp b/src/gowin.cpp index e1dcb9b03e..c43441a993 100644 --- a/src/gowin.cpp +++ b/src/gowin.cpp @@ -534,8 +534,21 @@ bool Gowin::writeSRAM(const uint8_t *data, int length) send_command(CONFIG_ENABLE); // config enable send_command(INIT_ADDR); // address initialize send_command(XFER_WRITE); // transfer configuration data - - _jtag->shiftDR(data, NULL, length); + int remains = length; + const uint8_t *ptr = data; + int blength = length / 8; + while (remains) { + int chunk = (length / 10) & ~3; // round to byte boundary + Jtag::tapState_t next = Jtag::SHIFT_DR; + if (remains < chunk) { + chunk = remains; + next = Jtag::RUN_TEST_IDLE; + } + _jtag->shiftDR(ptr, NULL, chunk, next); + ptr += chunk / 8; // in bytes + remains -= chunk; + progress.display(ptr - data); + } progress.done(); send_command(0x0a); uint32_t checksum = static_cast(_fs)->checksum();