2

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

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

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

4

2 回答 2

2

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

于 2012-12-27T12:45:08.480 回答
1

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

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

在前两种情况下,将GPIOs 连接到附加设备的片选。GPIO在运行之前手动切换spi_write()等。这将允许控制器以比位撞击SPI更高的速率传输,并且是更好的系统设计。即,更低的功耗、更低的 CPU 使用率、更快的数据速率等。如果外设只是用于设置/启动,那么为了简单起见,位碰撞是有意义的。但是,如果您的主要操作依赖于 SPI 总线,您可以考虑这种解决方案。

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

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

注意:某些 SPI 设备可能需要在 ;chip select之间切换words。什么都word适用于设备。某些控制器chip select在传输多个字时可能会保留断言。如果您使用 GPIO 手动选择设备,则需要正确执行此操作。我确信某些标准定义了这一点,但肯定有些设备不遵循标准。

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

于 2013-02-23T21:41:59.960 回答