对于beaglebone black的P9上的GPIO有一般性问题。例如,我想使用UART1(RX和TX)进行R232通信,并使用I2C2(SDA和SCL)作为传感器,使用在Linux上运行的C语言应用程序。问题是UART1(RTS和CTS)信号在那些引脚上,这些功能是否可以被禁用(软件)?因此,同时使用UART1和I2C2?
PIN 19:UART1_rtsn - I2C2_SCL
PIN 20:UART1_Ctsn - I2C2_SDA
下一个问题,同样适用于SPI1(CS0和CS1),这些引脚也在I2C2(SDA和SCL)上。
PIN 19:I2C2_SCL - spi1_cs1
PIN 20:I2C2_SDA - spi1_cs0
所以一般性的问题:所有3个单元,UART1-SPI1-I2C2是否都可以同时运行而且使用bbb的P9接头在引脚上没有冲突?
非常感谢您的回答 JH
答案 0 :(得分:1)
技术上可行但是当你开始寻找自定义引脚分配时,你必须处理很多复杂问题才能使所有事情都能正常运行。互联网上有许多表格,其中有关哪些引脚可以做什么的参考。到目前为止,我最喜欢的是这两个:http://exploringbeaglebone.com/wp-content/uploads/resources/BBBP8Header.pdf,http://exploringbeaglebone.com/wp-content/uploads/resources/BBBP9Header.pdf
如果您阅读这些内容,您可以看到每个引脚可以根据配置采用多种不同的功能。这些在启动时由linux内核设置为默认值,但您可以使用设备树覆盖修改默认值。整个过程有点针对单个答案,但简而言之,要做你想做的事,你需要修改并重新编译内核为你想要更改引脚分配的设备加载的设备树覆盖。 / p>
虽然有一些限制,例如,beaglebone图像都配置为使用I2C2来识别斗篷。所以你理论上可以改变它的引脚分配,但是你不应该期望在你做的时候正确识别和配置斗篷。在上面的示例中,UART1和I2C2使用其默认配置工作时没有冲突(UART1默认只有Rx和TX)。 SPI1还有一点工作要做。它的默认配置共享引脚与声卡(HDMI)必须禁用才能使其工作,但默认情况下它与以太网UART1或I2C2不冲突。
请注意,这些引脚中的每一个都可以具有多个功能,但在任何时候都只能有一个功能。因此,如果引脚设置为使用给定模块(比如UART1),它将不会受到另一个模块的影响,该模块理论上可以在具有不同功能模式的引脚上输出。如果您尝试同时使用2个函数的引脚,内核会抱怨,因此您可以尝试加载叠加层并查看默认情况下是否存在冲突。基本上,如果内核接受加载树覆盖,通常可以假设它不会与已经加载的任何其他内容冲突。
答案 1 :(得分:0)
我认为另一个答案曲解了这个问题,并解决了引脚配置问题,以实现该引脚可用的映射功能。是的,这很容易实现,并且在很大程度上是设计的重点。
关于实际问题,答案是可能的,但这将非常困难并且很可能不可行。一次只能使用一种通信协议。此外,spi引脚是片选引脚,需要置位或取消置位状态,因此任何类型的i2c时钟或数据信号都会使片选功能失效。
对于i2c / uart,它需要即时重新配置引脚和软件映射,并且一次只能执行一种可能的功能。它还将要求总线各方面的软件能够通过相互独立且智能的协议来了解引脚处于哪种模式(即i2c或uart),从而使总线上的所有设备均不会对将要产生的垃圾做出不良反应。在将总线用于其他操作模式时,在总线上显示。