lattice: update define, pass data array instead of _jed to Verify method, fix wrong index use
This commit is contained in:
parent
9d8c528c35
commit
56a81c1d68
|
|
@ -47,6 +47,7 @@ using namespace std;
|
||||||
# define CHECK_BUSY_FLAG_BUSY (1 << 7)
|
# define CHECK_BUSY_FLAG_BUSY (1 << 7)
|
||||||
#define RESET_CFG_ADDR 0x46
|
#define RESET_CFG_ADDR 0x46
|
||||||
#define PROG_CFG_FLASH 0x70
|
#define PROG_CFG_FLASH 0x70
|
||||||
|
#define REG_CFG_FLASH 0x73
|
||||||
#define PROG_FEATURE_ROW 0xE4
|
#define PROG_FEATURE_ROW 0xE4
|
||||||
#define PROG_FEABITS 0xF8
|
#define PROG_FEABITS 0xF8
|
||||||
#define PROG_DONE 0x5E
|
#define PROG_DONE 0x5E
|
||||||
|
|
@ -274,7 +275,8 @@ bool Lattice::program_intFlash()
|
||||||
|
|
||||||
/* bypass */
|
/* bypass */
|
||||||
wr_rd(0xff, NULL, 0, NULL, 0);
|
wr_rd(0xff, NULL, 0, NULL, 0);
|
||||||
/* ISC Enable 0xC6 followed by 0x08 */
|
/* ISC Enable 0xC6 followed by
|
||||||
|
* 0x08 (Enable nVCM/Flash Normal mode */
|
||||||
printInfo("Enable configuration: ", false);
|
printInfo("Enable configuration: ", false);
|
||||||
if (!EnableISC(0x08)) {
|
if (!EnableISC(0x08)) {
|
||||||
printError("FAIL");
|
printError("FAIL");
|
||||||
|
|
@ -317,10 +319,11 @@ bool Lattice::program_intFlash()
|
||||||
_jtag->set_state(Jtag::RUN_TEST_IDLE);
|
_jtag->set_state(Jtag::RUN_TEST_IDLE);
|
||||||
_jtag->toggleClk(1000);
|
_jtag->toggleClk(1000);
|
||||||
|
|
||||||
/* flash UFM */
|
/* flash CfgFlash */
|
||||||
if (false == flashProg(0, cfg_data))
|
if (false == flashProg(0, cfg_data))
|
||||||
return false;
|
return false;
|
||||||
if (Verify(_jed) == false)
|
/* verify write */
|
||||||
|
if (Verify(cfg_data) == false)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* missing usercode update */
|
/* missing usercode update */
|
||||||
|
|
@ -760,7 +763,7 @@ bool Lattice::flashProg(uint32_t start_addr, std::vector<std::string> data)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Lattice::Verify(JedParser &_jed, bool unlock)
|
bool Lattice::Verify(std::vector<std::string> data, bool unlock)
|
||||||
{
|
{
|
||||||
uint8_t tx_buf[16], rx_buf[16];
|
uint8_t tx_buf[16], rx_buf[16];
|
||||||
if (unlock)
|
if (unlock)
|
||||||
|
|
@ -770,18 +773,17 @@ bool Lattice::Verify(JedParser &_jed, bool unlock)
|
||||||
_jtag->set_state(Jtag::RUN_TEST_IDLE);
|
_jtag->set_state(Jtag::RUN_TEST_IDLE);
|
||||||
_jtag->toggleClk(1000);
|
_jtag->toggleClk(1000);
|
||||||
|
|
||||||
tx_buf[0] = 0x73;
|
tx_buf[0] = REG_CFG_FLASH;
|
||||||
_jtag->shiftIR(tx_buf, NULL, 8, Jtag::PAUSE_IR);
|
_jtag->shiftIR(tx_buf, NULL, 8, Jtag::PAUSE_IR);
|
||||||
|
|
||||||
bzero(tx_buf, 16);
|
bzero(tx_buf, 16);
|
||||||
bool failure = false;
|
bool failure = false;
|
||||||
vector<string> data = _jed.data_for_section(0);
|
|
||||||
ProgressBar progress("Verifying", data.size(), 50);
|
ProgressBar progress("Verifying", data.size(), 50);
|
||||||
for (size_t line = 0; line< data.size(); line++) {
|
for (size_t line = 0; line< data.size(); line++) {
|
||||||
_jtag->set_state(Jtag::RUN_TEST_IDLE);
|
_jtag->set_state(Jtag::RUN_TEST_IDLE);
|
||||||
_jtag->toggleClk(2);
|
_jtag->toggleClk(2);
|
||||||
_jtag->shiftDR(tx_buf, rx_buf, 16*8, Jtag::PAUSE_DR);
|
_jtag->shiftDR(tx_buf, rx_buf, 16*8, Jtag::PAUSE_DR);
|
||||||
for (size_t i = 0; i < data[i].size(); i++) {
|
for (size_t i = 0; i < data[line].size(); i++) {
|
||||||
if (rx_buf[i] != (unsigned char)data[line][i]) {
|
if (rx_buf[i] != (unsigned char)data[line][i]) {
|
||||||
printf("%3ld %3ld %02x -> %02x\n", line, i,
|
printf("%3ld %3ld %02x -> %02x\n", line, i,
|
||||||
rx_buf[i], (unsigned char)data[line][i]);
|
rx_buf[i], (unsigned char)data[line][i]);
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ class Lattice: public Device, SPIInterface {
|
||||||
void program(unsigned int offset) override;
|
void program(unsigned int offset) override;
|
||||||
bool program_mem();
|
bool program_mem();
|
||||||
bool program_flash(unsigned int offset);
|
bool program_flash(unsigned int offset);
|
||||||
bool Verify(JedParser &_jed, bool unlock = false);
|
bool Verify(std::vector<std::string> data, bool unlock = false);
|
||||||
|
|
||||||
/* spi interface */
|
/* spi interface */
|
||||||
int spi_put(uint8_t cmd, uint8_t *tx, uint8_t *rx,
|
int spi_put(uint8_t cmd, uint8_t *tx, uint8_t *rx,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue