From f5254294eb5c3871677eff346ae8376e2b01f454 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Sun, 11 Jul 2021 11:32:35 +0200 Subject: [PATCH] altera: add verify and dump --- src/altera.cpp | 29 ++++++++++++++++++++++++++++- src/altera.hpp | 10 ++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/altera.cpp b/src/altera.cpp index 585ed50..d44dc04 100644 --- a/src/altera.cpp +++ b/src/altera.cpp @@ -226,10 +226,37 @@ void Altera::program(unsigned int offset) } if (_verify) - printWarn("writing verification not supported"); + epcq.verify(offset, data, length, 256); reset(); } } + +bool Altera::dumpFlash(const std::string filename, uint32_t base_addr, + uint32_t len) +{ + int ret = true; + /* try to load spiOverJtag bridge + * to have an access to SPI flash + */ + if (!load_bridge()) { + printError("Fail to load bridge"); + return false; + } + + EPCQ epcq(this, 0); + + try { + epcq.reset(); + ret = epcq.dump(filename, base_addr, len, 256); + } catch (std::exception &e) { + printError(e.what()); + ret = false; + } + + reset(); + return ret; +} + int Altera::idCode() { unsigned char tx_data[4] = {IDCODE}; diff --git a/src/altera.hpp b/src/altera.hpp index fa24b74..54eb027 100644 --- a/src/altera.hpp +++ b/src/altera.hpp @@ -25,6 +25,16 @@ class Altera: public Device, SPIInterface { void programMem(RawParser &_bit); void program(unsigned int offset = 0) override; + /*! + * \brief read len Byte starting at base_addr and store + * into filename + * \param[in] filename: file name + * \param[in] base_addr: starting address in flash memory + * \param[in] len: length (in Byte) + * \return false if read fails or filename can't be open, true otherwise + */ + bool dumpFlash(const std::string filename, uint32_t base_addr, + uint32_t len); int idCode() override; void reset() override;