2024-05-23 17:32:32 发布
网友
我有一个2.8英寸的电容TFT屏幕和一个来自Adafruit的PN532 RFID阅读器。问题是,他们都使用SPI。当我使用RFID阅读器时,屏幕完全变白,我必须重新启动Pi来恢复图像。我必须在阅读器上使用SPI接口,这样我就可以使用Adafruit库来与Python一起使用它。屏幕变白不是一个问题,只要它是在RFID阅读器使用。在使用RFID阅读器后,是否有必要“重新启动”屏幕?感谢任何帮助。在
SPI总线由3根线和SPI总线上每个可单独寻址的从站1个芯片选择信号组成。一些设备,例如neopoixel、许多dac、每个移位寄存器等,允许菊花链,其中设备链可以共享一个共同的芯片选择线。在
但是,在您的情况下,您肯定希望解决不支持菊花链的设备。所以每个设备都需要一条单独的芯片选择线。在
让我们首先回顾一下SPI总线是如何工作的。在
SPI传输通常如下所示
/CS ‾‾‾\___________________ . . . ___________/‾‾‾ CLK _____/‾‾‾\___/‾‾‾\___/‾ . . . ‾‾\____________ MOSI =====X=======X=======X= . . . =============== MISO =========X=======X===== . . . ==X============
也就是说,首先芯片选择(/CS)变低,然后MOSI(主输出→从输入)数据线被设置到下一个要传输的位,并且在上升时钟边缘,从设备读取该位。类似地,在下降的时钟边缘,从机拉动数据线,让主机在上升端读取数据。在
/CS
然而,有些设备要求倒时钟极性或期望在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个输出中的哪一个。在
/EN
然而,也有一个非常便宜的变种叫做有线或。请记住,/CS的通常惯例是拉低。所以你能做的是我们几个电阻-如果你不能三态化你的GPIO引脚几个二极管-迫使/CS信号为你不想寻址的设备。{a1}有关详细信息,请参见。在
所以我快速地看了一下这里托管的库https://github.com/adafruit/Adafruit_Python_PN532,在这个例子中有一个https://github.com/adafruit/Adafruit_Python_PN532/blob/feaf22f659731586adc9ded4af969bb256969ed3/examples/readmifare.py#L28
因此,这个库不仅使用不绑定到专用SPI外围设备,实际上还可以自由配置要使用的GPIO管脚,以便与RFID阅读器对话。在
SPI总线由3根线和SPI总线上每个可单独寻址的从站1个芯片选择信号组成。一些设备,例如neopoixel、许多dac、每个移位寄存器等,允许菊花链,其中设备链可以共享一个共同的芯片选择线。在
但是,在您的情况下,您肯定希望解决不支持菊花链的设备。所以每个设备都需要一条单独的芯片选择线。在
让我们首先回顾一下SPI总线是如何工作的。在
SPI传输通常如下所示
也就是说,首先芯片选择(
/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阅读器对话。在
相关问题 更多 >
编程相关推荐