首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Raspberry Pi上通过GPIO SPI连接使用两件事

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

Stack Overflow用户
提问于 2018-06-04 01:18:46
回答 1查看 771关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 02:09:17

SPI总线由SPI总线上每个单独可寻址的从机3条线+1个芯片选择信号组成。诸如NeoPixels、许多DAC、每个移位寄存器等的一些器件允许菊花链,其中器件链可以共享公共芯片选择线。

然而,在您的例子中,您肯定希望寻址不支持菊花链的设备。因此,每个器件都需要单独的芯片选择线。

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

SPI传输通常如下所示

代码语言:javascript
复制
 /CS  ‾‾‾\___________________ . . . ___________/‾‾‾

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

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

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

即,首先芯片选择(/CS)变低,然后将MOSI (master out→slave in)数据线设置到要传送的下一位,并且在上升时钟沿上,并且在下降时钟沿上,从机读取位。类似地,在时钟下降沿,从机拉出数据线,以便主机在上升沿读取数据。

然而,一些设备需要反转时钟极性,或者期望在MOSI/MISO上有不同的时序。然而,上面概述的计时是最有效的,也是我在bitbanging时通常会做的。

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

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

你的树莓派有几个GPIO引脚。从技术上讲,它们中的每一个都可以用于/CS信号。然而,SPI传输通常是由设备和/或驱动程序控制的,这些设备和/或驱动程序想要为/CS使用非常特定的引脚。我不熟悉Adafruit库,如果它有这样的期望的话。但是,如果您可以在库中配置“芯片选择”(CS)、“从属选择”(SS)或“芯片启用”(CE)信号,则可以在此处指定要用作相关设备的/CS的GPIO。

如果您不能这样配置它,那么总是可以选择在/CS信号上使用硬连线的AND门。万无一失和强大的解决方案是使用74HCx系列门,但这伴随着大量的冗余线路。一种稍微优雅的解决方案是使用逻辑多路分路器,例如74HC154,将/CS连接到/EN引脚,使用4条GPIO线可以将/CS信号路由到16个输出中的哪一个。

然而,还有一个非常便宜的变体叫做wired OR。请记住,/CS的通常约定是拉低。因此,您可以做的是我们的几个电阻-如果你不能使你的GPIO引脚三态,几个二极管-以强制/CS信号为您不想寻址的设备。有关这方面的详细信息,请参阅https://en.wikipedia.org/wiki/Wired_logic_connection

更新

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

代码语言:javascript
复制
# Setup how the PN532 is connected to the Raspbery Pi/BeagleBone Black.
# It is recommended to use a software SPI connection with 4 digital GPIO pins.

# Configuration for a Raspberry Pi:
CS   = 18
MOSI = 23
MISO = 24
SCLK = 25

因此,这个库不仅不需要绑定到专用SPI外设,还可以自由配置要使用的GPIO引脚,以便与RFID读取器通信。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50669030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档