ftdispi: start to use spi_pins_conf
This commit is contained in:
parent
e347d2afd6
commit
b2abafa76d
|
|
@ -4,6 +4,7 @@
|
||||||
#include <ftdi.h>
|
#include <ftdi.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "board.hpp"
|
||||||
#include "ftdipp_mpsse.hpp"
|
#include "ftdipp_mpsse.hpp"
|
||||||
#include "ftdispi.hpp"
|
#include "ftdispi.hpp"
|
||||||
|
|
||||||
|
|
@ -13,8 +14,6 @@
|
||||||
* MISO -> ADBUS2
|
* MISO -> ADBUS2
|
||||||
* CS -> ADBUS3
|
* CS -> ADBUS3
|
||||||
*/
|
*/
|
||||||
#define SPI_CLK (1 << 0)
|
|
||||||
#define cs_bits 0x08
|
|
||||||
|
|
||||||
/* GGM: Faut aussi definir l'etat des broches par defaut */
|
/* GGM: Faut aussi definir l'etat des broches par defaut */
|
||||||
/* necessaire en mode0 et 1, ainsi qu'entre 2 et 3
|
/* necessaire en mode0 et 1, ainsi qu'entre 2 et 3
|
||||||
|
|
@ -33,31 +32,31 @@ void FtdiSpi::setMode(uint8_t mode)
|
||||||
{
|
{
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 0:
|
case 0:
|
||||||
_clk = 0;
|
_clk_idle = 0;
|
||||||
_wr_mode = MPSSE_WRITE_NEG;
|
_wr_mode = MPSSE_WRITE_NEG;
|
||||||
_rd_mode = 0;
|
_rd_mode = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
_clk = 0;
|
_clk_idle = 0;
|
||||||
_wr_mode = 0;
|
_wr_mode = 0;
|
||||||
_rd_mode = MPSSE_READ_NEG;
|
_rd_mode = MPSSE_READ_NEG;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
_clk = SPI_CLK;
|
_clk_idle = _clk;
|
||||||
_wr_mode = 0; //POS
|
_wr_mode = 0; //POS
|
||||||
_rd_mode = MPSSE_READ_NEG;
|
_rd_mode = MPSSE_READ_NEG;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
_clk = SPI_CLK;
|
_clk_idle = _clk;
|
||||||
_wr_mode = MPSSE_WRITE_NEG;
|
_wr_mode = MPSSE_WRITE_NEG;
|
||||||
_rd_mode = 0;
|
_rd_mode = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* for clk pin in idle state */
|
/* for clk pin in idle state */
|
||||||
if (_clk)
|
if (_clk_idle)
|
||||||
gpio_set(SPI_CLK, true);
|
gpio_set(_clk, true);
|
||||||
else
|
else
|
||||||
gpio_clear(SPI_CLK, true);
|
gpio_clear(_clk, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static FTDIpp_MPSSE::mpsse_bit_config bit_conf =
|
static FTDIpp_MPSSE::mpsse_bit_config bit_conf =
|
||||||
|
|
@ -74,10 +73,30 @@ FtdiSpi::FtdiSpi(int vid, int pid, unsigned char interface, uint32_t clkHZ,
|
||||||
init(1, 0x00, BITMODE_MPSSE);
|
init(1, 0x00, BITMODE_MPSSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
FtdiSpi::FtdiSpi(const FTDIpp_MPSSE::mpsse_bit_config &conf, uint32_t clkHZ,
|
FtdiSpi::FtdiSpi(const FTDIpp_MPSSE::mpsse_bit_config &conf,
|
||||||
bool verbose):
|
spi_pins_conf_t spi_config,
|
||||||
FTDIpp_MPSSE(conf, "", "", clkHZ, verbose)
|
uint32_t clkHZ, bool verbose):
|
||||||
|
FTDIpp_MPSSE(conf, "", "", clkHZ, verbose),
|
||||||
|
_cs_bits(1 << 3), _clk(1 << 0)
|
||||||
{
|
{
|
||||||
|
/* if cs not provided use pin 4 */
|
||||||
|
/*if (_cs == 0)
|
||||||
|
_cs = (1<<4);
|
||||||
|
_cable.low_dir |= _cs;*/
|
||||||
|
|
||||||
|
printf("cs pin : %d\n", spi_config.cs_pin);
|
||||||
|
if (spi_config.cs_pin)
|
||||||
|
_cs_bits = spi_config.cs_pin;
|
||||||
|
if (spi_config.sck_pin)
|
||||||
|
_clk = spi_config.sck_pin;
|
||||||
|
|
||||||
|
/* clk is fixed by MPSSE engine
|
||||||
|
* but CS is free -> update bit direction
|
||||||
|
*/
|
||||||
|
|
||||||
|
gpio_set_output(_cs_bits, true);
|
||||||
|
gpio_set(_cs_bits, true);
|
||||||
|
|
||||||
setMode(0);
|
setMode(0);
|
||||||
setCSmode(SPI_CS_AUTO);
|
setCSmode(SPI_CS_AUTO);
|
||||||
setEndianness(SPI_MSB_FIRST);
|
setEndianness(SPI_MSB_FIRST);
|
||||||
|
|
@ -94,11 +113,11 @@ bool FtdiSpi::confCs(char stat)
|
||||||
{
|
{
|
||||||
bool ret;
|
bool ret;
|
||||||
if (stat == 0) {
|
if (stat == 0) {
|
||||||
ret = gpio_clear(cs_bits, true);
|
ret = gpio_clear(_cs_bits, true);
|
||||||
ret |= gpio_clear(cs_bits, true);
|
ret |= gpio_clear(_cs_bits, true);
|
||||||
} else {
|
} else {
|
||||||
ret = gpio_set(cs_bits, true);
|
ret = gpio_set(_cs_bits, true);
|
||||||
ret |= gpio_set(cs_bits, true);
|
ret |= gpio_set(_cs_bits, true);
|
||||||
}
|
}
|
||||||
if (!ret)
|
if (!ret)
|
||||||
printf("Error: CS update\n");
|
printf("Error: CS update\n");
|
||||||
|
|
@ -107,7 +126,7 @@ bool FtdiSpi::confCs(char stat)
|
||||||
|
|
||||||
bool FtdiSpi::setCs()
|
bool FtdiSpi::setCs()
|
||||||
{
|
{
|
||||||
_cs = cs_bits;
|
_cs = _cs_bits;
|
||||||
return confCs(_cs);
|
return confCs(_cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "board.hpp"
|
||||||
#include "ftdipp_mpsse.hpp"
|
#include "ftdipp_mpsse.hpp"
|
||||||
#include "spiInterface.hpp"
|
#include "spiInterface.hpp"
|
||||||
|
|
||||||
|
|
@ -19,7 +20,8 @@ class FtdiSpi : public FTDIpp_MPSSE, SPIInterface {
|
||||||
|
|
||||||
FtdiSpi(int vid, int pid, unsigned char interface, uint32_t clkHZ,
|
FtdiSpi(int vid, int pid, unsigned char interface, uint32_t clkHZ,
|
||||||
bool verbose);
|
bool verbose);
|
||||||
FtdiSpi(const FTDIpp_MPSSE::mpsse_bit_config &conf, uint32_t clkHZ,
|
FtdiSpi(const FTDIpp_MPSSE::mpsse_bit_config &conf,
|
||||||
|
spi_pins_conf_t spi_config, uint32_t clkHZ,
|
||||||
bool verbose);
|
bool verbose);
|
||||||
~FtdiSpi();
|
~FtdiSpi();
|
||||||
|
|
||||||
|
|
@ -48,7 +50,9 @@ class FtdiSpi : public FTDIpp_MPSSE, SPIInterface {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t _cs;
|
uint8_t _cs;
|
||||||
|
uint8_t _cs_bits;
|
||||||
uint8_t _clk;
|
uint8_t _clk;
|
||||||
|
uint8_t _clk_idle;
|
||||||
uint8_t _wr_mode;
|
uint8_t _wr_mode;
|
||||||
uint8_t _rd_mode;
|
uint8_t _rd_mode;
|
||||||
unsigned char _endian;
|
unsigned char _endian;
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ int main(int argc, char **argv)
|
||||||
RawParser *bit = NULL;
|
RawParser *bit = NULL;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
spi = new FtdiSpi(cable.config, args.freq, args.verbose);
|
spi = new FtdiSpi(cable.config, {}, args.freq, args.verbose);
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
printError("Error: Failed to claim cable");
|
printError("Error: Failed to claim cable");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue