在Raspberry-Pi上通过GPIO-SPI连接使用两件事

2024-05-23 17:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2.8英寸的电容TFT屏幕和一个来自Adafruit的PN532 RFID阅读器。问题是,他们都使用SPI。当我使用RFID阅读器时,屏幕完全变白,我必须重新启动Pi来恢复图像。我必须在阅读器上使用SPI接口,这样我就可以使用Adafruit库来与Python一起使用它。屏幕变白不是一个问题,只要它是在RFID阅读器使用。在使用RFID阅读器后,是否有必要“重新启动”屏幕?感谢任何帮助。在


Tags: 图像spiadafruit屏幕pirfid阅读器英寸
1条回答
网友
1楼 · 发布于 2024-05-23 17:32:32

SPI总线由3根线和SPI总线上每个可单独寻址的从站1个芯片选择信号组成。一些设备,例如neopoixel、许多dac、每个移位寄存器等,允许菊花链,其中设备链可以共享一个共同的芯片选择线。在

但是,在您的情况下,您肯定希望解决不支持菊花链的设备。所以每个设备都需要一条单独的芯片选择线。在

让我们首先回顾一下SPI总线是如何工作的。在

SPI传输通常如下所示

 /CS  ‾‾‾\___________________ . . . ___________/‾‾‾

 CLK  _____/‾‾‾\___/‾‾‾\___/‾ . . . ‾‾\____________

MOSI  =====X=======X=======X= . . . ===============

MISO  =========X=======X===== . . . ==X============

也就是说,首先芯片选择(/CS)变低,然后MOSI(主输出→从输入)数据线被设置到下一个要传输的位,并且在上升时钟边缘,从设备读取该位。类似地,在下降的时钟边缘,从机拉动数据线,让主机在上升端读取数据。在

然而,有些设备要求倒时钟极性或期望在MOSI/MISO上有不同的定时。不过,上面列出的时间安排是最有效的,我通常会在咬人时这样做。在

/CS行的目的是界定总线事务。下降的/CS开始一个事务,上升的一个结束它。这在本质上意味着:如果设备没有看到下降的/CS,它将忽略其他线路上发生的一切。

因此,对于像您这样的问题,首先要想知道的是:“我是否使用不同的/CS信号来寻址我的SPI从设备,如果是的话,时间是否正确?”对于诸如示波器之类的问题,必须有调试工具;最好有4个通道。在

你的树莓派有几个GPIO引脚。每一种技术上都可以用于/CS信号。然而,SPI传输通常由希望为/CS使用非常特定的pin的设备和/或驱动程序控制。我不熟悉Adafruit图书馆,如果它有这样的期望。但是,如果您可以在库中配置一个“芯片选择”(CS)、“从选择”(SS)或“芯片启用”(CE)信号,那么这就是您指定的地方,您将使用哪个GPIO作为问题设备的/CS。在

如果您不能这样配置它,那么总是可以选择在/CS信号上使用硬连线和与门。万无一失和稳健的解决方案是使用74HCx系列门,但这有很多冗余的电线。一个稍微更优雅的解决方案是使用像74HC154这样的逻辑解复用器,在这里您将/CS连接到/EN管脚,并使用4条GPIO线路来确定/CS信号被路由到的16个输出中的哪一个。在

然而,也有一个非常便宜的变种叫做有线或。请记住,/CS的通常惯例是拉低。所以你能做的是我们几个电阻-如果你不能三态化你的GPIO引脚几个二极管-迫使/CS信号为你不想寻址的设备。{a1}有关详细信息,请参见。在

更新

所以我快速地看了一下这里托管的库https://github.com/adafruit/Adafruit_Python_PN532,在这个例子中有一个https://github.com/adafruit/Adafruit_Python_PN532/blob/feaf22f659731586adc9ded4af969bb256969ed3/examples/readmifare.py#L28

^{pr2}$

因此,这个库不仅使用不绑定到专用SPI外围设备,实际上还可以自由配置要使用的GPIO管脚,以便与RFID阅读器对话。在

相关问题 更多 >