python3:与spidev的SPI通信:Threewire-Xfer错误

时间:2019-03-22 08:46:38

标签: python-3.x raspberry-pi spi

我正在尝试使用受RPi 3监视的CN-0179设备创建4-20mA电流发生器。 我在Python3.5中使用了基于spidev_module.c的spidev库(请参见https://github.com/doceme/py-spidev)。 这是我的代码:

import spidev
import time
from adapterModule import CurrentAdapter

def send_current(value,mode = None):

    if not mode:
        cmd = adapter.encode(value)
        print("Mise à {}mA, mode normal".format(value))
    else:
        cmd = adapter.encode(value,mode)
        if mode == 1:
            print("Mise à {}mA, shut-down mode: 1kOhm to GND".format(value))
        elif mode == 100:
            print("Mise à {}mA, shut-down mode: 100kOhm to GND".format(value))
        elif mode == 11:
            print("Mise à {}mA, shut-down mode: three-state".format(value))


    resp = spi.xfer3(cmd)
    print("cmd = {}".format(cmd))


bus = 0 #on utilise les pin SPI 0
device = 0 # on place l'injecteur sur le CS0 (CE0)

spi = spidev.SpiDev()

spi.open(bus, device)

#spi.threewire = True
spi.max_speed_hz = 1000000 #10MHz (max 30MHz)
spi.mode = 0

adapter = CurrentAdapter()

send_current(4)

print("Vitesse: {}".format(spi.max_speed_hz))

#print("Attente 5s")
#time.sleep(5)
#
#send_current(20)

当我取消注释行

spi.threewire = True

它向我返回此错误:

resp = spi.xfer3(cmd)

OSError:[Errno 22]无效参数

我尝试了其他功能(xfer,xfer2),这些似乎都不起作用。我总是得到同样的错误。我使用的CN-0179设备仍然以3线方式连接(RBPi的MOSI和MISO在从设备的SDIN(SerialDataIn)线上具有相同的电位)。 当我尝试通过添加

来更改消息的字节序时,出现相同的错误
spi.lsbfirst = True

似乎库spidev遇到了一些问题,但是如何解决呢?

我还注意到,当我重新启动脚本并通过这种方式创建新对象'spi'时,它将保留threewire属性的最后一个值。

有什么想法吗?

0 个答案:

没有答案