main,board,ftdiJtagBitbang: use pin ID instead of shift

This commit is contained in:
Gwenhael Goavec-Merou 2022-08-23 18:37:43 +02:00
parent 074e616a3f
commit 61e959f93d
4 changed files with 25 additions and 31 deletions

View File

@ -85,7 +85,7 @@ openFPGALoader -- a program to flash FPGA
--list-fpga list all supported FPGA
-m, --write-sram write bitstream in SRAM (default: true)
-o, --offset arg start offset in EEPROM
--pins arg pin config (only for ft232R) TDI:TDO:TCK:TMS
--pins arg pin config TDI:TDO:TCK:TMS
--probe-firmware arg firmware for JTAG probe (usbBlasterII)
--protect-flash arg protect SPI flash area
--quiet Produce quiet output (no progress bar)

View File

@ -12,14 +12,14 @@
/* AN_232R-01_Bit_Bang_Mode_Available_For_FT232R_and_Ft245R */
enum {
FT232RL_TXD = (1 << 0),
FT232RL_RXD = (1 << 1),
FT232RL_RTS = (1 << 2),
FT232RL_CTS = (1 << 3),
FT232RL_DTR = (1 << 4),
FT232RL_DSR = (1 << 5),
FT232RL_DCD = (1 << 6),
FT232RL_RI = (1 << 7)
FT232RL_TXD = 0,
FT232RL_RXD = 1,
FT232RL_RTS = 2,
FT232RL_CTS = 3,
FT232RL_DTR = 4,
FT232RL_DSR = 5,
FT232RL_DCD = 6,
FT232RL_RI = 7
};
/* AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes */

View File

@ -38,20 +38,22 @@ FtdiJtagBitBang::FtdiJtagBitBang(const FTDIpp_MPSSE::mpsse_bit_config &cable,
{
unsigned char *ptr;
_tck_pin = 1 << pin_conf->tck_pin;
_tms_pin = 1 << pin_conf->tms_pin;
_tdi_pin = 1 << pin_conf->tdi_pin;
_tdo_pin = 1 << pin_conf->tdo_pin;
/* Validate pins */
uint8_t pins[] = {_tck_pin, _tms_pin, _tdi_pin, _tdo_pin};
uint8_t pins[] = {pin_conf->tck_pin, pin_conf->tms_pin,
pin_conf->tdi_pin, pin_conf->tdo_pin};
for (int i = 0; i < sizeof(pins) / sizeof(pins[0]); i++) {
if (pins[i] > FT232RL_RI || pins[i] < FT232RL_TXD) {
printf("%d\n", pins[i]);
printError("Invalid pin ID");
throw std::exception();
}
}
_tck_pin = 1 << pin_conf->tck_pin;
_tms_pin = 1 << pin_conf->tms_pin;
_tdi_pin = 1 << pin_conf->tdi_pin;
_tdo_pin = 1 << pin_conf->tdo_pin;
/* store FTDI TX Fifo size */
if (_pid == 0x6001) // FT232R
_rx_size = 256;

View File

@ -624,14 +624,6 @@ static int parse_eng(string arg, double *dst) {
}
}
static int get_bit_index(int mask)
{
for (int i = 0; i < 32; i++)
if (mask & (1 << i))
return i;
return -1;
}
/* arguments parser */
int parse_opt(int argc, char **argv, struct arguments *args, jtag_pins_conf_t *pins_config)
{
@ -807,14 +799,14 @@ int parse_opt(int argc, char **argv, struct arguments *args, jtag_pins_conf_t *p
}
static std::map <std::string, int> pins_list = {
{"TXD", get_bit_index(FT232RL_TXD)},
{"RXD", get_bit_index(FT232RL_RXD)},
{"RTS", get_bit_index(FT232RL_RTS)},
{"CTS", get_bit_index(FT232RL_CTS)},
{"DTR", get_bit_index(FT232RL_DTR)},
{"DSR", get_bit_index(FT232RL_DSR)},
{"DCD", get_bit_index(FT232RL_DCD)},
{"RI" , get_bit_index(FT232RL_RI) }};
{"TXD", FT232RL_TXD},
{"RXD", FT232RL_RXD},
{"RTS", FT232RL_RTS},
{"CTS", FT232RL_CTS},
{"DTR", FT232RL_DTR},
{"DSR", FT232RL_DSR},
{"DCD", FT232RL_DCD},
{"RI" , FT232RL_RI}};
for (int i = 0; i < 4; i++) {
int pin_num;