【发布时间】:2013-07-03 20:09:41
【问题描述】:
我是 SPI 新手; Linux 内核提供了一个 API,用于声明 SPI 总线和设备,并根据标准 Linux 驱动程序模型对其进行管理。
你可以在这里找到struct spi_master的描述:https://www.kernel.org/doc/htmldocs/device-drivers/API-struct-spi-master.html
上面链接中的描述说“每个设备都可以配置为使用不同的时钟速率,因为除非选择芯片,否则这些共享信号将被忽略”。把这句话放在比赛中,我不得不说,“设备”是指SPI从设备,而“那些共享信号”是指 MOSI、MISO 和 SCK 信号。
事实上,在 struct spi_device (https://www.kernel.org/doc/htmldocs/device-drivers/API-struct-spi-device.html) 中有一个名为 max_speed_hz 的属性在 struct spi_master 中不存在。所以我可以理解上面陈述的第一部分:“每个设备都可以配置为使用不同的时钟频率”。
但是,第二部分是什么意思? “除非选择芯片,否则这些共享信号将被忽略”是否意味着我可以通过启用/禁用具有不同速率的从机来使用不同的时钟速率,但一次只能使用一个?
感谢您的帮助!问候,
-- 马特奥
【问题讨论】:
-
是的,但这是因为您一次只想与一台设备通话。每个设备都在总线上“轮到”。每个设备都有自己的一组命令、最大 SCLK 等。因此我们希望一次只启用一个设备。这可能有一些警告,但我认为这通常是正确的。
-
@rkyser:你为什么说“你一次只想和一台设备通话”?为简单起见,我们假设一个时钟速率。我们来看看typical SPI bus on wikipedia。假设从设备有 8 位数据寄存器,主设备有 24 位数据寄存器。你是说我不允许通过将 SS1、SS2 和 SS3 置零来让所有从机一起工作(假设从机选择为低电平有效)?
-
我认为这取决于硬件架构。在您给出的示例中,如果主设备正在输出 24 位数据,那么任何从设备如何知道哪些 8 位属于它,因为每个从设备都接收完全相同的位? This architecture 会更适合您所谈论的内容。但是,话又说回来,这真的取决于正在与之交谈的 SPI 设备。我只是根据我有限的经验说的。