Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SPI:Linux驱动程序模型_Linux_Driver_Spi - Fatal编程技术网

SPI:Linux驱动程序模型

SPI:Linux驱动程序模型,linux,driver,spi,Linux,Driver,Spi,我是SPI的新手;Linux内核提供了一个API,用于声明SPI总线和设备,并根据标准Linux驱动程序模型管理它们 您可以在此处找到struct spi_master的描述: 上面链接处的描述表示,每个设备可以配置为使用不同的时钟速率,因为除非选择芯片,否则这些共享信号将被忽略。把这句话放在比赛中,我必须说,对于设备,它们意味着SPI从设备,而对于那些共享信号,它们意味着MOSI、MISO和SCK信号 事实上,在struct spi_设备中,有一个名为max_speed_hz的属性不在stru

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

您可以在此处找到struct spi_master的描述:

上面链接处的描述表示,每个设备可以配置为使用不同的时钟速率,因为除非选择芯片,否则这些共享信号将被忽略。把这句话放在比赛中,我必须说,对于设备,它们意味着SPI从设备,而对于那些共享信号,它们意味着MOSI、MISO和SCK信号

事实上,在struct spi_设备中,有一个名为max_speed_hz的属性不在struct spi_master中。因此,我可以理解上面陈述的第一部分:每个设备可以配置为使用不同的时钟频率

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

谢谢你的帮助!问候,

-
Matteo

@Matteo M:我认为实际上不允许您同时将SS1、SS2和SS3设置为零,并以这种方式同时启用所有三个SPI从机。原因是,SPI从机在MOSI线上接收数据时,同时在MISO线上发回数据。如果实际上所有三个从机都将数据放在共享MOSI线路上,那么无论是数据还是电流,都可能发生非常糟糕的事情。

SPI是一个非常松散的标准,没有太多规则可遵循,我想这是好的还是坏的。这是好的,因为它是灵活的。这是不好的,因为它可以根据您正在处理的特定硬件以不同的方式实现。一些设备仅支持半双工通信,正如您所知,这需要协调总线何时可以驱动。选择线路芯片启用,从机选择,无论你想叫它们什么,它们都提供了一种简便的方法来实现这一点,而无需使用位来识别哪个从机应该从总线上获取消息

在全双工模式下,每个时钟脉冲上的数据都从主设备和从设备传输到总线上,如沃尔夫冈所述,为了防止发生不好的事情,可能非常需要选择线路。我想强调的是,可能是需要的;让主处理器与其他处理器通信是完全合理的,这些处理器在响应某些特定位模式(例如,地址)时仅驱动总线。。。更多软件/固件?是的,但这并不能阻止你

因此,如果您的8位从机是,例如8位DAC,您确实可以写入主数据寄存器的值块。独立选择线路将使您能够做到这一点,而无需所有从属设备同时驱动总线。是的,您必须将每个从机的值一次一个地转移到主寄存器,但这也是一个完全合理的设计


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

是的,但这是因为您一次只想与一台设备通话。每个设备在总线上“轮流”。每个设备都有自己的一组命令、max SCLK等。因此,我们希望一次只启用一个设备。对此可能有一些警告,但我认为这通常是正确的。@rkyser:你为什么说你一次只想和一台设备通话?为了简单起见,让我们假设一个时钟频率。让我们来看一看。假设从机有8位数据寄存器,主机有24位数据寄存器。你是说我不允许通过将SS1、SS2和SS3归零来让所有从机一起工作,假设从机选择处于低活动状态?我认为这取决于硬件体系结构。在您给出的示例中,如果主设备时钟输出24位数据,那么由于每个从设备接收的是完全相同的位,任何从设备如何知道哪些8位属于它?对你所说的更有效。但是,再次强调,这实际上取决于SPI设备正在与之通信。我只是根据我有限的经验说的。