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