gowin: don't use read_write

This commit is contained in:
Gwenhael Goavec-Merou 2021-05-16 12:13:31 +02:00
parent a160cc6431
commit c36d29e5e3
1 changed files with 9 additions and 12 deletions

View File

@ -397,14 +397,14 @@ bool Gowin::flashFLASH(uint8_t *data, int length)
wr_rd(CONFIG_ENABLE, NULL, 0, NULL, 0); wr_rd(CONFIG_ENABLE, NULL, 0, NULL, 0);
wr_rd(EF_PROGRAM, NULL, 0, NULL, 0); wr_rd(EF_PROGRAM, NULL, 0, NULL, 0);
if (xpage != 0) if (xpage != 0)
_jtag->read_write(tt, NULL, 312, 0); _jtag->toggleClk(312);
addr = xpage << 6; addr = xpage << 6;
tmp[3] = 0xff&(addr >> 24); tmp[3] = 0xff&(addr >> 24);
tmp[2] = 0xff&(addr >> 16); tmp[2] = 0xff&(addr >> 16);
tmp[1] = 0xff&(addr >> 8); tmp[1] = 0xff&(addr >> 8);
tmp[0] = addr&0xff; tmp[0] = addr&0xff;
_jtag->shiftDR(tmp, NULL, 32); _jtag->shiftDR(tmp, NULL, 32);
_jtag->read_write(tt, NULL, 312, 0); _jtag->toggleClk(312);
int xoffset = xpage * 256; // each page containt 256Bytes int xoffset = xpage * 256; // each page containt 256Bytes
if (xoffset + 256 > buffer_length) if (xoffset + 256 > buffer_length)
@ -419,13 +419,13 @@ bool Gowin::flashFLASH(uint8_t *data, int length)
_jtag->shiftDR(tx, NULL, 32); _jtag->shiftDR(tx, NULL, 32);
if (!is_gw1n1) if (!is_gw1n1)
_jtag->read_write(tt, NULL, 40, 0); _jtag->toggleClk(40);
} }
if (is_gw1n1) { if (is_gw1n1) {
//usleep(10*2400*2); //usleep(10*2400*2);
uint8_t tt2[6008/8]; uint8_t tt2[6008/8];
memset(tt2, 0, 6008/8); memset(tt2, 0, 6008/8);
_jtag->read_write(tt2, tt2, 6008, 0); _jtag->toggleClk(6008);
} }
progress.display(i); progress.display(i);
} }
@ -447,20 +447,18 @@ bool Gowin::flashSRAM(uint8_t *data, int length)
/* 2.2.6.4 */ /* 2.2.6.4 */
wr_rd(XFER_WRITE, NULL, 0, NULL, 0); wr_rd(XFER_WRITE, NULL, 0, NULL, 0);
/* 2.2.6.5 */
_jtag->set_state(Jtag::SHIFT_DR);
int xfer_len = 256; int xfer_len = 256;
for (int i=0; i < byte_length; i+=xfer_len) { for (int i=0; i < byte_length; i+=xfer_len) {
if (i + xfer_len > byte_length) { // last packet with some size if (i + xfer_len > byte_length) { // last packet with some size
tx_len = (byte_length - i) * 8; tx_len = (byte_length - i) * 8;
tx_end = 1; // to move in EXIT1_DR tx_end = Jtag::EXIT1_DR; // to move in EXIT1_DR
} else { } else {
tx_len = xfer_len * 8; tx_len = xfer_len * 8;
tx_end = 0; /* 2.2.6.5 */
tx_end = Jtag::SHIFT_DR;
} }
_jtag->read_write(data+i, NULL, tx_len, tx_end); _jtag->shiftDR(data+i, NULL, tx_len, tx_end);
//_jtag->flush(); //_jtag->flush();
progress.display(i); progress.display(i);
} }
@ -490,7 +488,6 @@ bool Gowin::eraseFLASH()
printInfo("erase Flash ", false); printInfo("erase Flash ", false);
wr_rd(EFLASH_ERASE, NULL, 0, NULL, 0); wr_rd(EFLASH_ERASE, NULL, 0, NULL, 0);
_jtag->set_state(Jtag::RUN_TEST_IDLE); _jtag->set_state(Jtag::RUN_TEST_IDLE);
//_jtag->read_write(tt, tt, 37500*8, 0);
/* GW1N1 need 65 x 32bits /* GW1N1 need 65 x 32bits
* others 1 x 32bits * others 1 x 32bits
@ -506,7 +503,7 @@ bool Gowin::eraseFLASH()
*/ */
//usleep(2*120000); //usleep(2*120000);
//uint8_t tt[37500]; //uint8_t tt[37500];
_jtag->read_write(tt, tt, 37500*8, 0); _jtag->toggleClk(37500*8);
printSuccess("Done"); printSuccess("Done");
return true; return true;
} }