Linux vs rs485-USB

FORUM_NAME: USB-RS485
Модератор: Модераторы
pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #81 pet-and » 17.12.2015, 22:34

delovoy писал(а):А я под wine запускаю. ВМ нет у меня и вряд ли будет
Такой зарок я бы не давал.
Я еще раз порекомендую использовать виртуалку, пробросить порт с /dev/ttyACM0 и посмотреть, получится ли обозреть интерфейс.

delovoy
Автор темы
delovoy
Автор темы
Репутация: 1
Сообщения: 52
Зарегистрирован: 28.11.2015
С нами: 1 год
Профессия: IT

Непрочитанное сообщение #82 delovoy » 17.12.2015, 23:11

Проще установить на реальное железо систему семейства windows, такое же пиратсво, что и на ВМ ))) изначально мысль была обойтись без windows системы/

Благодарю, сразу не подумал с другой точки зрения. Попробую сначала с измененным модулем. Если не пойдет, то попробую с ВМ, если не пойдет тоже то проблема явно с модулем, если пойдет то проблема с реестром.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #83 pet-and » 17.12.2015, 23:44

Я не заставляю оставлять винду дальше. Просто надо как-то понять, где собака порылась.
Поясню, Ваша железяка автоматом пролезла в /dev/ttyACM0, по-идее Сом-порт готов к работе. Однако, что-то не дает вайну (версию и архитектуру префикса озвучьте, у меня wine 1.6.2 i386) нормально общаться с болидовским оборудованием. Программный косяк болидовских программ отметаем сразу, у меня все они работают (УПрог, ППрог, ОрионПрог, Шлейфс, РСсеттингс). Ну и далее надо определить, то ли порт неполноценный, либо вайн не знает как и что делать. Для этого нужна "голая" винда и устройство /dev/ttyACM0, совместить это можно только через ВМ (я пользуюсь ВиртуалБокс).
Вместо вайна можно попробовать CrossOver, прога платная, но есть триальный период (здесь я правда совсем не помощник, ибо не юзал).

Phoenix M
Phoenix M
Возраст: 35
Репутация: 16
Сообщения: 267
Зарегистрирован: 21.09.2012
С нами: 4 года 2 месяца
Профессия: Проектировщик
Откуда: Пятигорск

Непрочитанное сообщение #84 Phoenix » 18.12.2015, 09:52

В VirtualBox тоже не будет работать если в Linux\Wine не работает. Чип нужно как-то переключить в режим RS-485. Либо использовать преобразователь, который сразу работает, без всяких переключений. Delovoy, последний вариант самый правильный. Не уверен на 100%, в документации не написано что конкретно нужно сделать. Попробуйте спросить у производителя чипа.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #85 pet-and » 18.12.2015, 19:28

Phoenix писал(а):В VirtualBox тоже не будет работать если в Linux\Wine не работает....
Я конечно не настолько компетентен, но как мне представляется, ВМ будет работать напрямую с устройством tty, а нормальная винда будет отсылать/принимать заведомо правильные посылки на порт. Я бы попробовал.

Phoenix M
Phoenix M
Возраст: 35
Репутация: 16
Сообщения: 267
Зарегистрирован: 21.09.2012
С нами: 4 года 2 месяца
Профессия: Проектировщик
Откуда: Пятигорск

Непрочитанное сообщение #86 Phoenix » 18.12.2015, 20:48

Сейчас подумал, смотря как пробросить порт. Если пробросить как USB устройство, то будет работать. Если пробросить как COM-порт, то не будет работать (установится стандартный драйвер, а не драйвер производителя чипа).

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #87 pet-and » 18.12.2015, 21:07

Функционал проброса, по-моему, самый простой /dev/ttyxxx->Com1 и другого, как я понимаю, в любой ВМ нет, т.е. я считаю, что ВМ работает напрямую с устройством /dev/ttyxx. Поэтому, если прога написана для винды и умеет обращаться с ней, то ВМ лишь выполняет роль транслятора желаний.
Вот сейчас, вспомнил, на одном семинаре, посвященном изучению одного буржуйского оборудования прозвучала фраза: "интерфейс связи между отдельными компонентами системы выполнен по технологии RS485", бегло читанул, про что речь и понял, что стандарта RS485 не существует, есть только техника речи, что называется - D-, D+ и GND, а что там за уровни 0 и 1, количество битов, байтов посылаемых - загадка. Может так статься, что и в данном случае - простота хуже воровства.

Phoenix M
Phoenix M
Возраст: 35
Репутация: 16
Сообщения: 267
Зарегистрирован: 21.09.2012
С нами: 4 года 2 месяца
Профессия: Проектировщик
Откуда: Пятигорск

Непрочитанное сообщение #88 Phoenix » 18.12.2015, 21:33

Ну на windows ведь потребовалось устанавливать галочку RS-485 в свойствах драйвера. Там дело в управлении направления передачи данных.
Если пробросить как COM-порт, то ВМ просто перенаправит данные в файл /dev/ttyXXX. Драйвер, который общается с железом, будет работать в Linux.
Если пробросить как USB устройство, то не важно какой драйвер в Linux. С железом будет общаться драйвер, который установлен в Windows.

Во вложении снимки экрана ВМ в на линуксовом хосте. У меня на домашнем компьютере Linux установлен в качестве основной ОС уже 8 лет.
Вложения
2.png
1.png

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #89 pet-and » 18.12.2015, 21:47

Phoenix писал(а):...Там дело в управлении направления передачи данных....
В этом совсем не уверен. Насколько я понимаю, "направление" это подтверждение приема команды, а после ответ на нее и обратно. Я же говорю об обработке переданных/полученных данных, возможно существует некий признак успешной операции приема/передачи, один бит всего, по которому железяка понимает продолжать передачу инфы в одну сторону или же включать задний ход и слушать. Вот это я не очень разумею.
Тем паче, что для трансляции порта из Линуха в Вайн вполне достаточно символьной ссылки, но при этом болидовские проги изо всех пыжутся и пытаются действовать, а реально начинают работать после правки реестра того же самого префикса вайна (это что-то личное, подозреваю, у меня на недобуке стоит Лубунту 14.04х32, на ноуте Убунту 14.04х64 и везде одна и та же фигня, пока реестр бутылки не выправишь, победы не жди).

Phoenix M
Phoenix M
Возраст: 35
Репутация: 16
Сообщения: 267
Зарегистрирован: 21.09.2012
С нами: 4 года 2 месяца
Профессия: Проектировщик
Откуда: Пятигорск

Непрочитанное сообщение #90 Phoenix » 19.12.2015, 06:57

На сайте производителя чипа (XR21B1411) есть программа, которая настраивает этот чип. Мне кажется, что если правильно настроить параметры, то в Linux будет работать со стандартным драйвером. Конечно если настроенные параметры сохраняются при передергивании преобразователя. Нужно пробовать FLOW_CONTROL=8, GPIO_MODE=8.

Программа не запускается в WinXP. Запускается в Win7 x64.

Добавлено:
Предупреждение! Возможно что этой программой можно испортить преобразователь, т.к. программа позволяет записать параметры только один раз, и ошибку в параметрах уже невозможно исправить!
Вложения
XR21B1411-OTP_Ver1103.zip
(863.82 КБ) 25 скачиваний

MadHacker M
Активный участник
Активный участник
Аватара
MadHacker M
Активный участник
Активный участник
Возраст: 26
Репутация: 6
Сообщения: 744
Зарегистрирован: 28.05.2012
С нами: 4 года 6 месяцев
Профессия: Программист
Откуда: МО г. Королёв

Непрочитанное сообщение #91 MadHacker » 19.12.2015, 09:42

Вот читаю и думаю. 9 страниц попыток завести под *nix преобразователь. И это у людей которые хотя-бы понимают что и зачем они делают.
У нас же техподдержку порвут просто, если мы софт под *nix сделаем :(

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #92 pet-and » 19.12.2015, 10:59

То есть, ЕСЛИ - это героическое "НЕТ"?

MadHacker M
Активный участник
Активный участник
Аватара
MadHacker M
Активный участник
Активный участник
Возраст: 26
Репутация: 6
Сообщения: 744
Зарегистрирован: 28.05.2012
С нами: 4 года 6 месяцев
Профессия: Программист
Откуда: МО г. Королёв

Непрочитанное сообщение #93 MadHacker » 19.12.2015, 11:31

Сегодня я на провокационные вопросы не отвечаю.

delovoy
Автор темы
delovoy
Автор темы
Репутация: 1
Сообщения: 52
Зарегистрирован: 28.11.2015
С нами: 1 год
Профессия: IT

Непрочитанное сообщение #94 delovoy » 20.12.2015, 12:38

MadHacker писал(а):Сегодня я на провокационные вопросы не отвечаю.

А что если написать, но не афишировать. А там где разместили (например на форуме), приписать "сделано на основе энтузиазма" - тех поддержку не беспокоить!

MadHacker M
Активный участник
Активный участник
Аватара
MadHacker M
Активный участник
Активный участник
Возраст: 26
Репутация: 6
Сообщения: 744
Зарегистрирован: 28.05.2012
С нами: 4 года 6 месяцев
Профессия: Программист
Откуда: МО г. Королёв

Непрочитанное сообщение #95 MadHacker » 21.12.2015, 09:10

Да нет. Постепенно всё сделаем.
Сейчас в разработке находится ряд вещей которые конечно полностью проблему не решат, но сильно упростят жизнь очень многим.
Просто пока ещё слишком рано о них говорить.
Как только будет что показать - обязательно покажем и расскажем.

delovoy
Автор темы
delovoy
Автор темы
Репутация: 1
Сообщения: 52
Зарегистрирован: 28.11.2015
С нами: 1 год
Профессия: IT

Непрочитанное сообщение #96 delovoy » 22.12.2015, 21:02

Phoenix писал(а):Еще можно попробовать так:

Код: Выделить всё

xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 8);
xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 8);

В обоих параметрах цифра 8. В документации на чип есть таблица 5, в ней есть параметры FLOW_CONTROL, GPIO_MODE.
Если FLOW_CONTROL = 8, то включен Half-Duplex, а вот GPIO_MODE не так понятно.
Если GPIO_MODE = 8, то включается XCVR Enable Polarity. Что это не понятно, но на одном сайте нашел что это нужно для RS-485.
А я сначала смотрел таблицу 7, в которой при GPIO_MODE = 3 написано что Auto Transceiver Enable. В общем думаю что правильнее когда GPIO_MODE = 8.

Ничего не изменилось, пробовал и так:

Код: Выделить всё

xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 8);
xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 8);


и этак:

Код: Выделить всё

xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 8);
xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 3);


И ваш самописный скрипт применял на голую систему, пишет что
порт /dev/ttyACM0 открыт,
ошибка модуля.


С утилитой на win7 64x попробую изменить параметры чипа и проверю сохраняются настройки после переключения или нет, придется установить второй системой, не хочу, а надо.

delovoy
Автор темы
delovoy
Автор темы
Репутация: 1
Сообщения: 52
Зарегистрирован: 28.11.2015
С нами: 1 год
Профессия: IT

Непрочитанное сообщение #97 delovoy » 23.12.2015, 23:39

mini HowTo

Данный способ подходит для следующих преобразователей:
XR21V1410/1412/1414
XR21B1411
XR21B1420/1422/1424
XR22801/802/804

Узнать какой у вас преобразователь можно следующим образом (для Debian подобных):
lsusb|grep Exar
Bus 005 Device 003: ID 04e2:1411 Exar Corp.

или
tail -f /var/log/syslog | grep 'New USB device' подключаем свисток и смотри в лог
Dec 23 22:55:31 Home kernel: [ 1469.197218] usb 5-1: New USB device found, idVendor=04e2, idProduct=1411

Скачиваем исходники с помощью git
git clone https://github.com/kasbert/epsolar-tracer.git

Переходим в нужную папку:
cd epsolar-tracer/xr_usb_serial_common-1a/

и компилируем
make

Чтобы модуль не мозолил глаза, я решил его спрятать в домашней директории. Создаем скрытую папку с именем .bolid
mkdir .bolid

И перемещаем модуль с расширение .ko из каталога epsolar-tracer/xr_usb_serial_common-1a в bolid все действия производим в в корневой директории вашего пользователя /home/ваш_пользователь
mv epsolar-tracer/xr_usb_serial_common-1a/xr_usb_serial_common.ko .bolid/

Думал как добавить в автозагрузку модуль, решил воспользоваться простым способом
sudo nano /etc/rc.local
и до строки exit 0 подключаем модуль
insmod /home/ваш_пользователь/.bolid/xr_usb_serial_common.ko и сохраняем

Затем, нужно отключить старый модуль, воспользовался блэклистами.
sudo nano /etc/modprobe.d/bl.cdc_acm.conf
вписываем в него blacklist cdc_acm и сохраняем

Все подготовили, осталось только добавить пользователя в группу dialout
sudo adduser ваш_пользователь dialout

Последний штрих, нужно сделать символическую ссылку с .wine/dosdevices/com1 на /dev/XRUSB0
ln -s /dev/XRUSB0 .wine/dosdevices/com1

Перезагружаем машину sudo reboot. После загрузки машины, проверяем работоспособность, если работает то радуемся, если нет то читаем логи и проверяем свои действия

Для своего собственного удобства я разместил код запуска UProg и PProg в /usr/bin/
sudo touch /usr/bin/PProg
sudo touch /usr/bin/UProg
sudo echo 'wine /home/имя_учетной_записи/.bolid/PProg/PProg.exe' > /usr/bin/PProg
sudo echo 'wine /home/имя_учетной_записи/.bolid/UProg/UProg.exe' > /usr/bin/UProg


отдадим права нашей учетной записи
sudo chown ваш_пользователь:ваш_пользователь /usr/bin/PProg
sudo chown ваш_пользователь:ваш_пользователь /usr/bin/UProg


Оказалось очень удобным решением, не нужно искать в директории программу запуска. Достаточно нажать [CTRL] + [ALT] + [T] ввести UP либо PP нажать [TAB] и [ENTER] и конфигурировать оборудование.

Выражаю ВСЕМ свою благодарность за участие и оказанную помощь.

ps. Сегодня на работе столько визга было от меня, ибо заработало и очень рад этому. И винда не нужна - самое главное. Проверил, железки конфигурирует.

pps. Реестр вообще не трогал

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #98 pet-and » 24.12.2015, 06:58

Поздравляю, камрад.

Phoenix M
Phoenix M
Возраст: 35
Репутация: 16
Сообщения: 267
Зарегистрирован: 21.09.2012
С нами: 4 года 2 месяца
Профессия: Проектировщик
Откуда: Пятигорск

Непрочитанное сообщение #99 Phoenix » 24.12.2015, 09:10

Отлично! Это драйвер не от производителя чипа, а от производителя преобразователя на этом чипе? Как нашли этот драйвер?

Phoenix M
Phoenix M
Возраст: 35
Репутация: 16
Сообщения: 267
Зарегистрирован: 21.09.2012
С нами: 4 года 2 месяца
Профессия: Проектировщик
Откуда: Пятигорск

Непрочитанное сообщение #100 Phoenix » 24.12.2015, 09:16

Сам посмотрел. Это драйвер от производителя чипа, но в файл xr_usb_serial_hal.c добавлена строка: gpio_mode = 0x0b; // FIXME hardcoded to RS-485
Надо же, число не 8, а 11 (0x0b) :-):

В двоичной системе:
8 = 1000
11(0x0b) = 1011

Видно, что помимо четвертого бита (как я говорил), установлены первый и второй. Что-то я недосмотрел в документации. Я думал что если установлен четвертый бит, то первые три игнорируются.

Добавлено позже:
А вначале я говорил gpio_mode=3, это как раз те первые два бита. Запутано как-то написано в документации. Написали бы, что для включения RS-485 сделайте то-то.
Первые два бита включают XCVR (видимо это одно и то-же с Auto Transceiver), четвертый бит включает XCVR Enable Polarity.


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «USB-RS485»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя

forum-bolid.ru : Отказ от ответственности