我刚开始使用Raspberry Pi上的GPIO进行各种项目。RPi有许多分支板,其中许多具有引脚,以便将板堆叠在一起。似乎GPIO引脚直通,所有板子都有相同的引脚。对我来说,这意味着堆栈中的所有板都从RPi接收完全相同的信号,并且应表现相应。看来,针对一个板的命令可能会产生很多错误,从而影响另一板的工作方式,但显然不会发生。
那么Raspberry Pi如何知道哪个板正在获得哪些特定命令?是否存在某种初始化命令,只有特定的板才能识别该初始化命令,然后开始接受其余命令?
我刚开始使用Raspberry Pi上的GPIO进行各种项目。RPi有许多分支板,其中许多具有引脚,以便将板堆叠在一起。似乎GPIO引脚直通,所有板子都有相同的引脚。对我来说,这意味着堆栈中的所有板都从RPi接收完全相同的信号,并且应表现相应。看来,针对一个板的命令可能会产生很多错误,从而影响另一板的工作方式,但显然不会发生。
那么Raspberry Pi如何知道哪个板正在获得哪些特定命令?是否存在某种初始化命令,只有特定的板才能识别该初始化命令,然后开始接受其余命令?
Answers:
计算机使用称为总线的系统通过同一组电线将多个外围设备连接到CPU。 I2C和SPI是与pi GPIO引脚一起使用的总线系统的示例,它们使同一物理引脚上的多个设备(由内部总线管理)可以使用不同的地址。寻址是由总线系统协议创建的抽象。有点像您如何使用同一物理连接到Internet的多个联网应用程序同时运行。
例如,查看RTC Pi Plus,示例链接中的可堆叠板之一:
请注意在盒子的五个侧面。这些对应于另一侧的引脚。它们被标记为:
换句话说,该板根本不使用大多数引脚。它们只是在那里以便堆叠。它确实使用的所有(或大多数情况下,仍然不了解SQW)可与其他设备同时共享。
这种方式堆叠的真正限制是可提供的功率与消耗的功率,而不是所涉及的引脚数。如果包括其他电源,可能会成为限制,但是我认为在此之前,您必须将堆栈移到外部并开始使用梯子对其进行操作。;)
您只能有一个HAT板,因此不会出现此类问题。有些板可以连接多个板,但不是HAT板。
那么Raspberry Pi如何知道哪个板正在获得哪些特定命令?
Pi不知道。您必须确定。
关键是,如果您连接多个扩展板,则必须注意信号线要么不被多次使用,要么实施一种总线方案,该方案可以与共享某些线路的多个设备一起工作(如已经建议的@goldilocks)。为了了解如何完成此操作,我建议您阅读旧的 ISA总线。可以使用GPIO作为数据和地址线来实现某些功能(如果麻烦的话)。
是否存在某种初始化命令,只有特定的板才能识别该初始化命令,然后开始接受其余命令?
尽管HAT毫无疑问,但它们使用的识别方案值得一看。请注意,这里没有堆叠的HAT *(每个Raspberry Pi博客:规范讨论中都介绍了可堆叠的HATs-但由于自动配置的复杂性和用户错误的可能性大大增加,最终被淘汰了)。因此,在任何给定时间,仅将连接一个HAT,读出EEPROM,并在设备树中提供其信息。