Как использовать чип FDTI в режиме VCP?

Я пытаюсь получить релейную плату SainSmart USB на базе чипа FT245RL, работающую и ужасно работающую. У меня сложилось впечатление, что я могу управлять реле из командной строки с помощью чего-то вроде:

echo -e -n "\xFF\x1\x1" > /dev/ttyUSB1

Хотя устройство монтируется автоматически, и я думаю, что у меня настроены скорость передачи данных и разрешения, на моих машинах Debian сжатия или CentOS 5 ничего не происходит. Поддержка SainSmart бесполезна.

Решил попробовать на windows, поэтому установил драйвера и написал небольшую программку на питоне:

import serial
ser = serial.Serial(2) #COM3
ser.write(chr(255) + chr(0) + chr(1))
ser.close

Еще ничего. Возможно, это аппаратная проблема, поэтому я устанавливаю предоставленную программу Windows. Он видит устройство и работает, когда я нажимаю на кнопки реле. Обескураженный, я выхожу из их программы, ищу ошибки в своей (не могу их найти), но все равно пробую, и она работает! Я пишу гораздо большую программу, чтобы делать всевозможные классные вещи, и классные вещи происходят до тех пор, пока я не отключу устройство. При повторном подключении ничего не работает. Я должен запустить и выйти из программы управления реле, прежде чем мой код что-то сделает.

Я подозреваю, что мне нужно что-то делать с драйверами d2xx, такими как FT_SetBitMode(). Есть ли способ просто использовать режим VCP? PyUSB не устанавливается на мой компьютер и недоступен для Linux.

Все, что мне нужно, это простой способ управления реле в Linux с помощью python.


person RyanN    schedule 23.04.2013    source источник
comment
Я тоже. Получили ли вы что-нибудь еще с тех пор, как этот вопрос был опубликован? это ваша тема поддержки? Я разместил комментарий на Facebook SainSmart; Я обновлю здесь, если получу ответ. Интересно, являются ли данные FT245R ответом - может быть, нам нужно искать документацию Future Technology Devices, а не документацию SainSmart.   -  person Rich    schedule 11.09.2013
comment
Кому-нибудь еще повезло, пытаясь решить эту проблему? Кажется, что это должно быть очень просто сделать через VCP, но я не могу заставить это работать. Пошаговое руководство или несколько примеров было бы здорово.   -  person GrizzlyGuru    schedule 13.03.2015
comment
Я отказался от этого и переключился на другие проекты. Я не думаю, что это была проблема со скоростью передачи данных, поскольку я настроил это через ОС. Я думаю, вам нужно будет отследить линию USB и посмотреть, что отправляет программа Windows.   -  person RyanN    schedule 14.03.2015


Ответы (4)


У меня была та же проблема, я думаю, вы были правы насчет FT_SetBitMode(). В конце концов я заставил его работать, используя ftd2xx (который вы можете получить по пипу). Вам также потребуется установить драйверы для D2XX.

import ftd2xx
if ftd2xx.listDevices() < 1:
    print "No relays found. Exiting..."
    exit()
else: print "Initializing relays..."
relays = ftd2xx.open(0)
relays.setBitMode(255,1) # I think this uses FT_SetBitMode()
relays.write(b'\01\01')  # relay one on
relays.write(b'\01\01')  # relay two on
relays.write(b'\00\00')  # all relays off
relays.close()
person Octavi Escala Semonin    schedule 11.10.2017

Сначала я бы посоветовал вам попробовать hyperterminal.

Из вашего фрагмента кода кажется, что вам не хватает скорости передачи данных (при условии, что остальные будут значениями по умолчанию). И я действительно не знаю, имеет ли это значение, но я всегда явно устанавливаю порт как Serial('COM3'), таким образом, на одну возможную точку отказа меньше :)

person Alex    schedule 23.04.2013

Вероятно у вас проблема не с Python, а с управлением устройством как таковым.

Вы должны попытаться выяснить, есть ли у устройства особые требования к состоянию линий управления (DST, DTR и т. д.).

И, не говоря уже о скорости связи, о которой Алекс уже упоминает.

person glglgl    schedule 23.04.2013

Используя виртуальные COM-порты в Windows, я обнаружил, что мне нужно использовать 115 кбод.

person johnlon    schedule 19.01.2021