pyftdi icon indicating copy to clipboard operation
pyftdi copied to clipboard

Retry issue with SPI reads

Open andreasWallner opened this issue 2 years ago • 5 comments

We are currently experiencing some issues with SPI over a FT4232. .read() will sometimes return an empty bytearray, which will then throw off future rx. From our analysis this seems to be caused by the limit of 4 retries in https://github.com/eblot/pyftdi/blob/05a36f9474464157c1e30c6daf00e190044beb1a/pyftdi/spi.py#L860 - increasing that fixes our issue.

In the example below we are sending 32 byte data to an embedded device, that device will then echo those 32 byte back. The loop in the code is due to us wanting to poll until the embedded device sends the first non-zero byte, but this does not happen in the example (since it's not processing anything)

import logging
from pyftdi import FtdiLogger
from pyftdi.spi import SpiController

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("main")
FtdiLogger.set_level(logging.DEBUG)

ctrl = SpiController()
ctrl.configure("ftdi:///2", debug=True)
spi = ctrl.get_port(cs=0, freq=2000, mode=2)

EXCHANGE_BYTES = bytearray([i for i in range(1, 33)])
i = 0
for _ in range(2):
    spi.write(EXCHANGE_BYTES)

    while True:
        resp = spi.read(1, stop=False)
        logger.debug(f"rx {len(resp)}: " + resp.hex())
        if len(resp) != 0 and resp[0] != 0:
            break

    resp += spi.read(31)

    suc = resp == EXCHANGE_BYTES
    if not suc:
        print(resp.hex())
        print(EXCHANGE_BYTES.hex())
    print()
    i += 1 

The above described behavior occurs twice during the first transfer, which will lead to this: image

So we can see that the FTDI has actually read 34 bytes, instead of the 32 that we expected.

Snip from the log that shows the problem:

At the end of the log you can see the impact this has on the full communication, the second one in our loop receives incorrect data. (because of the additional data sent at the end of the first one)

DEBUG:pyftdi.ftdi:> 8b86b70b
DEBUG:pyftdi.ftdi:< 3260
DEBUG:pyftdi.ftdi:rx buf purged
DEBUG:pyftdi.ftdi:Clock frequency: 2.000 KHz (error: +0.0 %)
DEBUG:pyftdi.ftdi:> 800d0b80050b101f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2080050b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b80080b
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:main:rx 0:
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:main:rx 0:
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:pyftdi.ftdi:< 320001
DEBUG:main:rx 1: 01
DEBUG:pyftdi.ftdi:> 800d0b80050b201e008780050b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b80080b
DEBUG:pyftdi.ftdi:< 32000203
DEBUG:pyftdi.ftdi:< 3200040506
DEBUG:pyftdi.ftdi:< 32000708090a
DEBUG:pyftdi.ftdi:< 32000b0c0d0e
DEBUG:pyftdi.ftdi:< 32000f101112
DEBUG:pyftdi.ftdi:< 320013141516
DEBUG:pyftdi.ftdi:< 32001718191a
DEBUG:pyftdi.ftdi:< 32001b1c1d1e
DEBUG:pyftdi.ftdi:< 32001f200000


DEBUG:pyftdi.ftdi:> 800d0b80050b101f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2080050b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b80080b
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:main:rx 1: 00
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:main:rx 1: 00
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:pyftdi.ftdi:< 3200
DEBUG:main:rx 0:
DEBUG:pyftdi.ftdi:> 800d0b80050b20000087
DEBUG:pyftdi.ftdi:< 32000102
DEBUG:main:rx 1: 01
DEBUG:pyftdi.ftdi:> 800d0b80050b201e008780050b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b800d0b80080b
DEBUG:pyftdi.ftdi:< 32000304
DEBUG:pyftdi.ftdi:< 320005
DEBUG:pyftdi.ftdi:< 320006070809
DEBUG:pyftdi.ftdi:< 32000a0b0c0d
DEBUG:pyftdi.ftdi:< 32000e0f1011
DEBUG:pyftdi.ftdi:< 320012131415
DEBUG:pyftdi.ftdi:< 320016171819
DEBUG:pyftdi.ftdi:< 32001a1b1c1d
DEBUG:pyftdi.ftdi:< 32001e000000
0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e0000
0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20

workaround/possible solution We tried to increase the retry count to 16 - that fixes our issue. Before opening a PR I wanted to check if there was a specific reason to go with 4 there, does increasing that have negative consequences somewhere else? Should an exception be raised in this case, especially considering that future receptions can carry over this "offset"? Should the count be configurable?

andreasWallner avatar Jun 28 '23 18:06 andreasWallner

I think I never run FTDI SPI as such as low clock speed, so maybe the timeout should be increased with such low-extreme clock rate, yes. The timeout is there to manage some jittery behavior between the USB time frame, the FTDI latency response, etc. Did you try to change the default latency to see if this improves the overall behavior?

If not, maybe this retry count could be increased for very low clock speed, yes. The main drawback is increased latency, so this could only be done when the clock drops between some low value, that is yet to be found :)

eblot avatar Jun 29 '23 07:06 eblot

I'll give it a try - interestingly we don't see this issue with the even slower clock speed of 1kHz. Wouldn't the latency only be increased in case we don't have a response yet (which should actually never happen in the SPI case)?

andreasWallner avatar Jun 29 '23 08:06 andreasWallner

Just a quick sign of live - I haven't forgotten but time has been in short supply lately. I'll ask a student to have a look and evaluate.

andreasWallner avatar Sep 26 '23 20:09 andreasWallner

Hi, I am this student of @andreasWallner and have tried different FTDI latencies for the above example. Indeed, I found that a higher latency makes the example work and for high latencies the clock speed can be reduced to very lower frequencies, although the use case can be questioned of course. Thanks a lot for helping with this issue.

haberzdomi avatar Nov 22 '23 13:11 haberzdomi

@eblot From my POV we could close this since we do have a workaround with manually setting the latency.

andreasWallner avatar Nov 24 '23 23:11 andreasWallner