Arm板上的两个以上SPI设备仅支持两个?

时间:2012-12-27 10:57:05

标签: linux-device-driver spi

我们其中一块电路板上的Arm处理器有一个带有两条芯片选择线的spi端口。 处理器的数据表中提到它可以控制最多两个spi设备。

是否可以将GPIO用作附加spi设备的从机选择? 如何修改现有的库/设备驱动程序以支持此更改?

到目前为止,我在内核的源代码中找到了一个文件,其中包含SPI端口引脚的地址。任何人都可以告诉我应该朝哪个方向前进吗?

2 个答案:

答案 0 :(得分:2)

如果你有足够的引脚,你可以对整个SPI协议进行bitbang,并根据需要使用尽可能多的CS。

答案 1 :(得分:1)

你没有提到它是什么处理器。你有三种可能性。

  1. 如果处理器具有i/o mux功能,请关闭SPI芯片选择功能。 SPI控制器会认为它已断言该线,但它不会外部。
  2. 不要连接一个SPI芯片选择。使用上拉/下拉进行ESD保护。
  3. 根据Joachim Isaksson
  4. 复制chip select

    在前两种情况下,将GPIO连接到附加设备的芯片选择。在运行GPIO等之前手动切换spi_write()。这样,SPI控制器可以以比 bit banging 更高的速率进行传输,并且效果更好系统设计。即,更低的功耗,更低的CPU使用率,更快的数据速率等。如果外围设备仅用于设置/启动,那么 bit banging 有助于简化。但是,如果您的主要操作依赖于SPI总线,则可以考虑此解决方案。

    如果只有一个外设需要用于设置的SPI AND ,则您拥有i/o mux,您可以在设置期间禁用芯片选择功能,使用GPIO选择设置< / em>外设,然后在标准系统操作期间为其他外设重新启用spi chip select

    使用GPIO不需要用户空间干预。驱动程序可以在使用时提供call backs来设置GPIO,因此SPI命令可以缓冲/排队,这些解决方案仍然有效。例如,IMX SPI driver支持GPIO切换,方法是传递负片选择号以表示GPIO ID。

    注意:某些SPI设备可能需要chip selectwords之间切换;什么word是设备。传输多个单词时,某些控制器可能会保留chip select。如果使用GPIO手动选择设备,则需要正确使用此功能。我确信某些标准定义了这一点,但绝对有些设备不遵循标准。

    附录:大多数驱动程序支持GPIO芯片选择;通过负片选择值。他们将调用Linux GPIO函数。编写一个执行解复用的GPIO处理程序。无需更改SPI驱动程序。