首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPI: Linux驱动模型

SPI: Linux驱动模型
EN

Stack Overflow用户
提问于 2013-07-05 16:56:20
回答 2查看 5K关注 0票数 4

我对SPI非常熟悉;Linux内核提供了一个API,用于声明SPI总线和设备,并根据标准的Linux驱动程序模型管理它们。

您可以在这里找到结构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中。因此,我可以理解上述声明的第一部分:“每个设备可能被配置为使用不同的时钟速率”。

但是,第二部分是什么意思呢?“由于这些共享信号被忽略,除非选择芯片”是否意味着允许我使用不同的时钟速率,但通过启用/禁用不同速率的奴隶,只能使用一个时钟速率?

谢谢你的帮助!致以敬意,

- Matteo

EN

回答 2

Stack Overflow用户

发布于 2013-10-18 09:50:34

@Matteo .:我认为你实际上是,不允许同时将SS1、SS2和SS3设置为零,并以这种方式使所有三个SPI奴隶都能在同一时间内。原因是SPI从站在MOSI线路上接收数据时,同时在MISO线路上发送数据。如果所有的三个从站都会将数据放在(共享) MOSI线上,那么无论是在数据还是在电流方面,都会发生非常糟糕的事情。

票数 1
EN

Stack Overflow用户

发布于 2014-01-20 22:46:53

SPI是一个非常宽松的“标准”,没有太多的规则可遵循,这是好的(和坏的,我猜)。它是好的,因为它是灵活的。这是不好的,因为它可以根据您正在处理的特定硬件以不同的方式实现。有些设备只支持半双工通信,正如您所知,这种通信需要协调总线何时可以驱动。选择行(芯片启用,从选择,无论您想要调用它们)提供了一种方便的方法来完成这一点,而不使用位来标识哪个从总线上应该得到消息。

在全双工模式下,在每个时钟脉冲上,数据被从主站和从站拖到总线上,因此非常需要选择线路来防止坏的事情发生,正如沃尔夫冈所说。我想强调这可能是必需的;也许让一个主处理器与其他处理器通信是完全合理的,这些处理器只在响应特定的位模式(例如“地址”)时驱动总线.更多的软件/固件?是的,但这并没有阻止你。

因此,如果您的8位从处理器是这样的话,例如8位DACs,您确实可以编写主数据寄存器的值块。独立选择线将使您能够做到这一点,而不需要所有的奴隶驾驶公共汽车一次。是的,你必须一次把每个奴隶的值转换到主寄存器中,但这也是一个完全合理的设计。

与一些更复杂的串行协议不同,SPI实际上非常灵活;因为它不会将您锁定为最大字大小,也不会要求您写入总线的任何数据都由地址、偏移等内容组成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17493681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档