46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
// SPDX-License-Identifier: Apache-2.0
|
|
/*
|
|
* Copyright (C) 2025 Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
|
|
*/
|
|
|
|
#ifndef SRC_LATTICESSPI_HPP_
|
|
#define SRC_LATTICESSPI_HPP_
|
|
|
|
#include <string>
|
|
|
|
#include "device.hpp"
|
|
#include "ftdispi.hpp"
|
|
|
|
class LatticeSSPI: public Device {
|
|
public:
|
|
LatticeSSPI(FtdiSpi *spi, const std::string &filename,
|
|
const std::string &file_type, const int8_t verbose);
|
|
|
|
uint32_t idCode() override;
|
|
int userCode();
|
|
void reset() override {}
|
|
void program(unsigned int offset, bool unprotect_flash) override;
|
|
|
|
bool protect_flash(uint32_t /*len*/) override { return false; }
|
|
bool unprotect_flash() override { return false; }
|
|
bool bulk_erase_flash() override { return false; }
|
|
|
|
private:
|
|
bool program_mem();
|
|
bool pollBusyFlag(bool verbose = false);
|
|
uint32_t readStatusReg();
|
|
void displayReadReg(uint32_t dev);
|
|
bool EnableISC(uint8_t flash_mode);
|
|
bool DisableISC();
|
|
bool flashErase(uint32_t mask);
|
|
bool checkStatus(uint32_t val, uint32_t mask) {
|
|
return ((readStatusReg() & mask) == val) ? true : false;
|
|
}
|
|
|
|
bool cmd_class_a(uint8_t cmd, uint8_t *rx, uint32_t len);
|
|
bool cmd_class_c(uint8_t cmd);
|
|
uint32_t char_array_to_word(const uint8_t *in);
|
|
FtdiSpi *_spi;
|
|
};
|
|
#endif // SRC_LATTICESSPI_HPP_
|