如何通过 pyftdi lib 正确地与通过 FTDI USB 连接的 spi slave 通信?

How to communicate with a spi slave connected via FTDI USB correctly through the pyftdi lib?

我遇到以下问题: 我想通过 FTDI USB Spi 转换器的 spi 接口读出 Invensense (ICM-20602) 的运动传感器,该转换器连接到带有 python3 程序的 Debian linux 系统。我设置了所有必要的库和驱动程序,我可以设置 CS 线,还可以通过示波器验证我的 MOSI、时钟和 CS 线输出。该设备也有 MISO 输入,但不是我所期望的。我正在将注册地址发送到 whois-register 以获取设备 ID 以验证 read/write 是否正常工作。我不明白为什么设备没有正确响应。 这是我目前的代码:

#pyspi - pyftdi

from pyftdi.spi import SpiController, SpiIOError
from struct import *



ctrl= SpiController()#spi
ctrl.configure('ftdi://ftdi:232h/1')  # Assuming there is only one FT232H.
spi = ctrl.get_port(cs=0, freq=1E6, mode=0)# Assuming D3 is used for chip select.


write_buf = b'\x75[=10=]xdf'


spi.write(write_buf,True,False)

read_1= spi.read(2, start=False, stop=True).tobytes()

id = spi.exchange([0x75,0xff,],2).tobytes()
#ctrl.get_port(cs=1, freq=1E6, mode=1)
print(read_1)
print(id)

没有代码错误 - 只有读取缓冲区是 0x00 或有时是 0x10 但不是我所期望的:设备 ID:0xAF

有人知道如何让设备正确回答吗?

顺便说一句:该设备与 invensense 评估板一起正常工作 - 因此该设备应该可以正常工作。

最后,我使用设备 ID 为 0x10 的 Infineon 压力传感器测试了 FTDI USB 设备。我设法读出了 ID,然后我还发现 ICM-20602 有一个与数据表中指定的 (0xAF) 不同的 device-ID (0x12)。我还设法读出了 gyro-data,因此我非常确信设备 ID 与指定的不同。为了读出两个传感器的 ID,我还调整了我的程序,在一个交换周期内只发送一个字节。模式 0 适用于 ICM 设备没有问题 - 1,2 不工作 - 也没有必要将设备置于 spi-mode 才能使用模式 0。这是调整后的程序:

from pyftdi.spi import SpiController, SpiIOError
from struct import *



ctrl= SpiController()#spi
ctrl.configure('ftdi://ftdi:232h/1')  # Assuming there is only one FT232H.
spi = ctrl.get_port(cs=0, freq=1E6, mode=0)# Assuming D3 is used for chip 
select.    
write_buf = b'\x75\'


spi.write(write_buf,True,False)

read_1= spi.read(2, start=False, stop=True).tobytes()

id = spi.exchange([0x75],2).tobytes()
print(read_1)
print(id)