python3: связь SPI со spidev: трехпроводная - ошибка xfer - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать генератор тока 4-20 мА, используя устройство CN-0179, контролируемое RPi 3. Я использую библиотеку spidev в Python3.5, которая основана на spidev_module.c (см. 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, которое я использую, тем не менее подключено трехпроводным способом (MOSI и MISO RBPi имеют одинаковый потенциал на линии SDIN (SerialDataIn) подчиненного устройства). Я получаю ту же ошибку, когда пытаюсь изменить порядок своих сообщений, добавив

spi.lsbfirst = True

Похоже, у библиотеки spidev есть некоторые проблемы, но как их исправить?

Я также заметил, что когда я перезапускаю свой скрипт и таким образом создаю новый объект 'spi', он сохраняет последнее значение атрибута трехпроводного.

Есть идеи?

...