我们其中一块板上的 Arm 处理器有一个带有两条片选线的 spi 端口。处理器的数据表中提到它可以控制最多两个 spi 设备。
是否可以将 GPIO 用作附加 spi 设备的从属选择?如何修改现有的库/设备驱动程序以支持此更改?
到目前为止,我在内核源代码中找到了一个文件,其中包含 SPI 端口引脚的地址。谁能告诉我应该朝哪个方向前进?
我们其中一块板上的 Arm 处理器有一个带有两条片选线的 spi 端口。处理器的数据表中提到它可以控制最多两个 spi 设备。
是否可以将 GPIO 用作附加 spi 设备的从属选择?如何修改现有的库/设备驱动程序以支持此更改?
到目前为止,我在内核源代码中找到了一个文件,其中包含 SPI 端口引脚的地址。谁能告诉我应该朝哪个方向前进?
如果你有足够的引脚,你可以 bitbang 整个 SPI 协议,并根据需要使用尽可能多的 CS。
你没有提到它是什么处理器。你有三种可能。
i/o mux
能力,请关闭 SPI 芯片选择功能。SPI 控制器会认为它已经断言了线路,但它不会对外。chip select
根据Joachim Isaksson多路复用在前两种情况下,将GPIO
s 连接到附加设备的片选。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
驱动程序。