2020-10-31 07:45:30 +01:00
|
|
|
#ifndef SRC_FTDISPI_HPP_
|
|
|
|
|
#define SRC_FTDISPI_HPP_
|
|
|
|
|
|
2019-09-26 18:29:20 +02:00
|
|
|
#include <ftdi.h>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
2020-10-30 08:24:45 +01:00
|
|
|
#include "board.hpp"
|
2019-09-26 18:29:20 +02:00
|
|
|
#include "ftdipp_mpsse.hpp"
|
2020-08-23 17:17:51 +02:00
|
|
|
#include "spiInterface.hpp"
|
2019-09-26 18:29:20 +02:00
|
|
|
|
2020-08-23 17:17:51 +02:00
|
|
|
class FtdiSpi : public FTDIpp_MPSSE, SPIInterface {
|
2019-09-26 18:29:20 +02:00
|
|
|
public:
|
2020-10-06 08:36:12 +02:00
|
|
|
enum SPI_endianness {
|
|
|
|
|
SPI_MSB_FIRST = 0,
|
|
|
|
|
SPI_LSB_FIRST = 1
|
|
|
|
|
};
|
2019-09-26 18:29:20 +02:00
|
|
|
|
2020-10-06 08:36:12 +02:00
|
|
|
enum SPI_CS_mode {
|
|
|
|
|
SPI_CS_AUTO = 0,
|
|
|
|
|
SPI_CS_MANUAL = 1
|
|
|
|
|
};
|
2019-09-26 18:29:20 +02:00
|
|
|
|
2019-11-21 08:52:20 +01:00
|
|
|
FtdiSpi(int vid, int pid, unsigned char interface, uint32_t clkHZ,
|
|
|
|
|
bool verbose);
|
2020-10-30 08:24:45 +01:00
|
|
|
FtdiSpi(const FTDIpp_MPSSE::mpsse_bit_config &conf,
|
|
|
|
|
spi_pins_conf_t spi_config, uint32_t clkHZ,
|
2020-08-23 17:17:51 +02:00
|
|
|
bool verbose);
|
2019-09-26 18:29:20 +02:00
|
|
|
~FtdiSpi();
|
|
|
|
|
|
|
|
|
|
void setMode(uint8_t mode);
|
|
|
|
|
void setEndianness(unsigned char endian) {
|
|
|
|
|
_endian =(endian == SPI_MSB_FIRST) ? 0 : MPSSE_LSB;
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-28 21:26:33 +01:00
|
|
|
/* CS handling */
|
2019-09-26 18:29:20 +02:00
|
|
|
void setCSmode(uint8_t cs_mode) {_cs_mode = cs_mode;}
|
2020-10-28 21:26:33 +01:00
|
|
|
bool confCs(char stat);
|
|
|
|
|
bool setCs();
|
|
|
|
|
bool clearCs();
|
2019-09-26 18:29:20 +02:00
|
|
|
|
|
|
|
|
int ft2232_spi_wr_then_rd(const uint8_t *tx_data, uint32_t tx_len,
|
|
|
|
|
uint8_t *rx_data, uint32_t rx_len);
|
|
|
|
|
int ft2232_spi_wr_and_rd(uint32_t writecnt,
|
|
|
|
|
const uint8_t *writearr, uint8_t *readarr);
|
|
|
|
|
|
2020-08-23 17:17:51 +02:00
|
|
|
/* spi interface */
|
|
|
|
|
int spi_put(uint8_t cmd, uint8_t *tx, uint8_t *rx,
|
|
|
|
|
uint32_t len) override;
|
|
|
|
|
int spi_put(uint8_t *tx, uint8_t *rx, uint32_t len) override;
|
|
|
|
|
int spi_wait(uint8_t cmd, uint8_t mask, uint8_t cond,
|
|
|
|
|
uint32_t timeout, bool verbose=false) override;
|
|
|
|
|
|
2019-09-26 18:29:20 +02:00
|
|
|
private:
|
|
|
|
|
uint8_t _cs;
|
2020-10-31 10:42:40 +01:00
|
|
|
uint16_t _cs_bits;
|
2019-09-26 18:29:20 +02:00
|
|
|
uint8_t _clk;
|
2020-10-30 08:24:45 +01:00
|
|
|
uint8_t _clk_idle;
|
2019-09-26 18:29:20 +02:00
|
|
|
uint8_t _wr_mode;
|
|
|
|
|
uint8_t _rd_mode;
|
|
|
|
|
unsigned char _endian;
|
|
|
|
|
uint8_t _cs_mode;
|
2020-10-31 10:42:40 +01:00
|
|
|
uint16_t _holdn;
|
|
|
|
|
uint16_t _wpn;
|
2019-09-26 18:29:20 +02:00
|
|
|
};
|
2020-10-31 07:45:30 +01:00
|
|
|
|
|
|
|
|
#endif // SRC_FTDISPI_HPP_
|