Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
如何在树莓pi上控制SPIDEV模块中的CS信号_C_Python 2.7_Raspberry Pi3_Adc - Fatal编程技术网

如何在树莓pi上控制SPIDEV模块中的CS信号

如何在树莓pi上控制SPIDEV模块中的CS信号,c,python-2.7,raspberry-pi3,adc,C,Python 2.7,Raspberry Pi3,Adc,我试图使用Python 2.7中的SPIDEV模块通过Raspberry Pi单元上可用的SPI总线将Raspberry Pi 3与ADS1256 ADC连接起来。 该项目将与其中两个ADC通信,并以250Hz采样率对所有通道(每个通道8个)进行采样 SPIDEV模块中负责数据事务的函数是xfer和xfer2。这些函数的问题在于,它们发出CS激活命令(使CS处于低位),执行事务并发出CS释放命令(使CS处于高位)。为了与ADS1256通信,在CS保持逻辑低电平时,需要向ADC发送一系列命令。这可

我试图使用Python 2.7中的SPIDEV模块通过Raspberry Pi单元上可用的SPI总线将Raspberry Pi 3与ADS1256 ADC连接起来。 该项目将与其中两个ADC通信,并以250Hz采样率对所有通道(每个通道8个)进行采样

SPIDEV模块中负责数据事务的函数是
xfer
xfer2
。这些函数的问题在于,它们发出CS激活命令(使CS处于低位),执行事务并发出CS释放命令(使CS处于高位)。为了与ADS1256通信,在CS保持逻辑低电平时,需要向ADC发送一系列命令。这可以通过列出所有命令并将它们传递给
xfer
/
xfer2
函数来实现,如下所示:

$xfer2([10, 20, 30, 40])$
然而,这种发送命令的方式没有给ADC足够的时间来处理每个命令,或者换句话说,指令之间的定时违反了ADC的定时规范。另一方面,如果一次发送一个命令,则CS切换会导致ADC忘记上一个命令

我在网上尝试过的另外两种选择,引入了太多的延迟,我无法在每个采样实例之间的时间范围内压缩所有通道读取。这些备选方案是:

  • WiringPi模块:该模块具有仅执行数据事务的
    wiringPiSPIDataRW
    功能,CS可由模块中的IO功能单独控制。缺点是每次调用此函数之间的时间以及将CS调低到调用此函数之间的时间超过200微秒,当我对所有通道进行采样时,总计将超过4毫秒(我的采样周期)。 在使用SPIDEV时为CS使用单独的pin:此选项也会在函数调用之间引入超过100微秒的延迟
这是我通过挖掘Raspberry Pi社区和堆栈溢出学到的两个建议

SPIDEV中的
xfer
函数还提供了一个名为delay的参数,根据文档,它应该控制块之间的延迟,但它只意味着在事务完成后CS应保持在低位的时间。例如:如果我发布:

$xfer2([12, 23, 34, 46], 1800000, 30)$
只有在发送46结束后,它才会在结束时将CS保持低电平30微秒。它不提供每个字节之间的30微秒,即12、23、34和46,这是我需要的理想值。然而,如果我这样做

xfer2([12])
xfer2([23])
xfer2([34])
xfer2([46])
当然,由于覆盆子皮的性质,两者之间的时间将超过100微秒,我无法处理

因此,能够帮助我控制命令之间的延迟是一件理想的事情

如果不可能的话,我可以控制xfer函数中的CS,这样它们就不会切换它。这意味着我可以通过IO功能控制CS引脚。这将防止在我的电路板上使用raspberry pi GPIO头CE引脚作为CS的硬件修改。虽然它仍然是一个缓慢的解决方案,但比
wiringPi
模块中的函数快得多。 在最坏的情况下,我将不得不修改我的硬件,并使用不同的GPIO引脚作为CS使用

谢谢你的阅读