The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Конфигурация serial port, !*! anastigmat, 20-Июн-15, 16:46  [смотреть все]
День добрый!

Debian. Через USB-com подключена к компу погодная станция. Не могу подобрать настройки для serial port.
Вот он:
[  391.580060] usb 6-3: new full-speed USB device number 5 using ohci_hcd
[  391.748471] usb 6-3: New USB device found, idVendor=10c4, idProduct=ea60
[  391.748486] usb 6-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  391.748496] usb 6-3: Product: CP2102 USB to UART Bridge Controller
[  391.748504] usb 6-3: Manufacturer: Silicon Labs
[  391.748511] usb 6-3: SerialNumber: 0001
[  391.892057] usb 6-3: reset full-speed USB device number 5 using ohci_hcd
[  392.054853] usb 6-3: cp210x converter now attached to ttyUSB1

Производитель пишет о настройке порта:
Serial communication parameters are:
8 data bits, 1 start bit, 1 stop bit, and no parity.
Default baud rate is 19200

Вот мой конфиг (#:stty -F /dev/ttyUSB1 -a):

speed 19200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

На посыл в порт 'TEST\n' должен получать ответ 'TEST'
Отсылаю в порт: echo 'TEST' > /dev/ttyUSB1
В ответ тишина...
Пробовал echo -n -e '\x54\x45\x53\x54\x0A' > /dev/ttyUSB1
В ответ тишина...
Ответ ловлю hexdump -C /dev/ttyUSB1 на другой консоли. Под виндой работает исправно, присылает ответ 'TEST'

Какие параметры покрутить stty, чтоб настройки были "зеркальные" винде?
Заранее спасибо.

  • Конфигурация serial port, !*! eRIC, 20:26 , 20-Июн-15 (1)
    >[оверквотинг удален]
    > echoctl echoke
    > На посыл в порт 'TEST\n' должен получать ответ 'TEST'
    > Отсылаю в порт: echo 'TEST' > /dev/ttyUSB1
    > В ответ тишина...
    > Пробовал echo -n -e '\x54\x45\x53\x54\x0A' > /dev/ttyUSB1
    > В ответ тишина...
    > Ответ ловлю hexdump -C /dev/ttyUSB1 на другой консоли. Под виндой работает исправно,
    > присылает ответ 'TEST'
    > Какие параметры покрутить stty, чтоб настройки были "зеркальные" винде?
    > Заранее спасибо.

    #ls -al /dev/ttyUSB*
    #chmod 666 /dev/ttyUSB1 или #chmod 666 /dev/ttyUSB1

    пробовали через minicom -s подключится или через GTKterm?

    • Конфигурация serial port, !*! anastigmat, 13:19 , 21-Июн-15 (2)
      > #ls -al /dev/ttyUSB*
      > #chmod 666 /dev/ttyUSB1 или #chmod 666 /dev/ttyUSB1
      > пробовали через minicom -s подключится или через GTKterm?

      Пользователь в группе dialout. Пробовал и под рутом. Но chmod сделал, попробовал - проблема не решилась...
      #ls -la /dev/ttyUSB1
      crw-rw---- 1 root dialout 188, 1 июн 21 11:55 /dev/ttyUSB1
      #chmod 666 /dev/ttyUSB1
      #ls -la /dev/ttyUSB1
      crw-rw-rw- 1 root dialout 188, 1 июн 21 11:55 /dev/ttyUSB1
      Миником пробовал, ГТКтерм нет.

      Обнаружил новую проблему.
      #dmesg | grep 'usb 6-3'

      [80071.025171] usb 6-3: USB disconnect, device number 27
      [80071.292060] usb 6-3: new full-speed USB device number 28 using ohci_hcd
      [80071.461077] usb 6-3: New USB device found, idVendor=10c4, idProduct=ea60
      [80071.461088] usb 6-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
      [80071.461097] usb 6-3: Product: CP2102 USB to UART Bridge Controller
      [80071.461105] usb 6-3: Manufacturer: Silicon Labs
      [80071.461112] usb 6-3: SerialNumber: 0001
      [80071.604057] usb 6-3: reset full-speed USB device number 28 using ohci_hcd
      [80071.767439] usb 6-3: cp210x converter now attached to ttyUSB1

      И таких переподключений 28, как видно...

      • Конфигурация serial port, !*! anastigmat, 14:35 , 21-Июн-15 (3)
        update.

        Проверил на другом компе.
        [    0.000000] Linux version 3.2.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.65-1

        # dmesg | grep -E "(usb|cp210x|ttyUSB0)"

        [  207.725854] usb 3-4: new full-speed USB device number 6 using xhci_hcd
        [  207.743603] usb 3-4: New USB device found, idVendor=10c4, idProduct=ea60
        [  207.743612] usb 3-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
        [  207.743617] usb 3-4: Product: CP2102 USB to UART Bridge Controller
        [  207.743622] usb 3-4: Manufacturer: Silicon Labs
        [  207.743626] usb 3-4: SerialNumber: 0001
        [  207.790922] usbcore: registered new interface driver usbserial
        [  207.790968] usbcore: registered new interface driver usbserial_generic
        [  207.790970] usbserial: USB Serial Driver core
        [  207.799749] USB Serial support registered for cp210x
        [  207.799763] cp210x 3-4:1.0: cp210x converter detected
        [  207.965746] usb 3-4: reset full-speed USB device number 6 using xhci_hcd
        [  207.983071] usb 3-4: cp210x converter now attached to ttyUSB0
        [  207.983108] usbcore: registered new interface driver cp210x
        [  207.983113] cp210x: v0.09:Silicon Labs CP210x RS232 serial adaptor driver

        # stty -a -F /dev/ttyUSB0
        speed 19200 baud; rows 24; columns 80; line = 0;
        intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
        stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
        -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
        -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
        -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
        -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

        # ls -la /dev/ttyUSB0
        crw-rw---- 1 root tty 188, 0 Июн 21 14:24 /dev/ttyUSB0
        # chmod 666 /dev/ttyUSB0
        # ls -la /dev/ttyUSB0
        crw-rw-rw- 1 root tty 188, 0 Июн 21 14:28 /dev/ttyUSB0


        На echo откликается, hexdump считывает, даже какое-то время работает. Потом hexdump прерывается, возвращается в командную строку...
        при попытке:

        $ hexdump -C /dev/ttyUSB0
        hexdump: /dev/ttyUSB0: Отказано в доступе
        $ ls -la /dev/ttyUSB0
        crw-rw---- 1 root tty 188, 0 Июн 21 14:32 /dev/ttyUSB0

        dmesg никаких новых событий не показывает. Кто(что) меняет атрибуты ttyUSB0? Куда копать?


        • Конфигурация serial port, !*! eRIC, 15:33 , 21-Июн-15 (4)
          > На echo откликается, hexdump считывает, даже какое-то время работает. Потом hexdump прерывается,
          > возвращается в командную строку...
          > при попытке:
          > $ hexdump -C /dev/ttyUSB0
          > hexdump: /dev/ttyUSB0: Отказано в доступе
          > $ ls -la /dev/ttyUSB0
          > crw-rw---- 1 root tty 188, 0 Июн 21 14:32 /dev/ttyUSB0
          > dmesg никаких новых событий не показывает. Кто(что) меняет атрибуты ttyUSB0? Куда копать?

          все действия и считывание с утройства под root выполняете?

          скорее всего после переподключения, права теряются. попробуйте создать правило для UDEV типа:
          # touch /etc/udev/rules.d/60-ttyUSB.rules
          # (прописать в нем правило для ttyUSB* устройств, подставив свою группу и права 0666 или 0777)
          KERNEL=="ttyUSB[0-9]*",NAME="tty/USB%n",SYMLINK+="%k",GROUP="tty",MODE="0666"


          • Конфигурация serial port, !*! anastigmat, 15:52 , 21-Июн-15 (5)
            > все действия и считывание с утройства под root выполняете?
            > скорее всего после переподключения, права теряются. попробуйте создать правило для UDEV
            > типа:
            > # touch /etc/udev/rules.d/60-ttyUSB.rules
            > # (прописать в нем правило для ttyUSB* устройств, подставив свою группу и
            > права 0666 или 0777)
            > KERNEL=="ttyUSB[0-9]*",NAME="tty/USB%n",SYMLINK+="%k",GROUP="tty",MODE="0666"

            В том то и дело, что права поменялись без переподключения. По крайней мере dmesg ничего о переподключении не указал. Прямо во время считывания с порта hexdump`ом. Считывание прекратилось, hexdump остановился, все вернулось в командную, по ls показал новые права.

            Выполнял от простого пользователя, пользователь в группе tty.
            Под рутом тоже гонял. Проблем меньше, хотя бы с правами, но все равно нестабильно "отрабатывает" ttyUSB. Те команды, что под виндой работали исправно, под дебианом или через раз срабатывают или вообще не срабатывают. Такое впечатление, что каки либо символы или недопосылает в порт или игнорирует на приеме из порта.
            Ушел читать про udev.

            Спасибо за участие.

            • Конфигурация serial port, !*! Аноним, 06:28 , 24-Июн-15 (7)
              Некоторые посказки:

              > равно нестабильно "отрабатывает" ttyUSB.

              1. Работать с uart-ами через echo - достаточно проблемное начинание. И там довольно много грабель. Потому что файл девайса, конечно, файл. Но есть нюансы. Напишите какую-нибудь простенькую программу, шелл неважно работает с произвольными бинарными данными и спецсимволами. А чтение из UART имеет некоторую специфику.

              2. Анализировать состояние порта логично какой-нибудь более специализированой программой. Скажем jpnevulator. Он дотошно показывает что и как с конкретным портом. Может даже состояния линий flow control и прочее. Поищите в репах по словам типа RS232 или serial.

              3. У дебиана таки древнее ядро. И как оно там поддерживает этот конвертор - отдельный вопрос. Ядру 3.2 стукнул не один год, если что.

              4. Простой тест работы UART: замкнуть RX и TX и послать что-нибудь. Из-за соединения линий - должно приехать назад то что вы ввели. Удобно делать в терминалке типа picocom (тоже есть в репах). Главное при этом убедиться что терминал не делает локальное эхо. Популярный minicom использовать не советую, если у вас на порту не модем - очень уж minicom переклинен на диалапных модемах. Это сильно мешает во всех остальных случаях.

              > Те команды, что под виндой работали исправно,

              Вообще не аргумент. COM порт - хоть и файл, но имеет некие тонкие особенности, отличающие его от файлов в файловой системе. И эти особенности в винде и линухе разные.

              > Ушел читать про udev.

              Там все просто: с одной стороны рулес по которому делается совпадение при событии (например, "добавился девайс", пример вам привели). С этой стороны выражения - сравнеия, позволяющие отфильтровать нужные девайсы и нужные действия по этому поводу. С другой стороны выражения - что делать при наступлении события.

              Присвоения прав, вызов программ, создание симлинков, или что там еще. Эти выражения - сравнения (==) и присвоения в си-подобном стиле, "=" (присвоить, т.е. выставить параметр в это значение) или += (добавить к тому что было раньше еще и это).

              • Конфигурация serial port, !*! anastigmat, 10:18 , 24-Июн-15 (9)
                > Некоторые посказки:
                > 2. Анализировать состояние порта логично какой-нибудь более специализированой
                > рограммой. Скажем jpnevulator.

                Нашел - установил - буду пробовать.

                > 3. У дебиана таки древнее ядро.

                К сожалению  систему не могу выбирать.

                > 4. Простой тест работы UART: замкнуть RX и TX и послать что-нибудь.

                Если ничего не поможет, то так и сделаю.


                >> Те команды, что под виндой работали исправно,
                > Вообще не аргумент.

                Не столько как аргумент, мне просто нужно сделать рабочее приложение по дебианом. Под виндой сделал за пару часов, а тут борюсь уже пару недель. То что девайс работает - это точно, затык именно в линухе.


                >> Ушел читать про udev.
                > Там все просто:

                Вообще спасибо за советы! Очень путные!

                • Конфигурация serial port, !*! Аноним, 07:07 , 26-Июн-15 (10)
                  > Нашел - установил - буду пробовать.

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

                  И кстати вот еще какой момент: безбашенным echo и прочим - вы могли ... загадить себе файл девайса. Дело в том что /dev/ttyUSB0 - не только девайс, но и некий СПЕЦИАЛЬНЫЙ файл, реально существующий в файловой системе на диске. Как часть иерархии ФС. А ваше "echo" и прочие "обычные" утилиты - не в курсе что файл СПЕЦИАЛЬНЫЙ. И могут, натурально, снести его куда подальше и создать на месте /dev/ttyUSB ... обычный файл, в который запишут тот же текст из echo. Файловой системе все-равно. Просите нормальный файл по этому пути - сделаем нормальный, значит. Единственная проблема: этот файл ... не будет иметь никакого отношения к UART-ам и вас ждет много интересных открытий. Когда вы будете пытаться читать обычный текстовичок как якобы UART и внезапно обнаружите что творится какая-то фигня. Если терминалки и прочие jpnevulator "глючат" и вопят что не удалось получить статус модемных линий и что там еще - это оно. У простого текстового файла нет модемных линий, IOCTL завалится с ошибкой. Не надо эхать в спецфайлы, это источник грабель. С файлами в /dev вообще стоит поаккуратнее.

                  Workaround такой ситуации, если это она:
                  1) Удаляем кривой файл - от рута: rm /dev/ttyUSB0
                  2) отключите адаптер на CP2102 от компьютера.
                  3) переподключите адаптер.
                  4) Убедитесь что /dev/ttyUSB0 пересоздался (таким как изначально задуман).
                  5) Больше не эхайте в спецфайлы!

                  А еще, для понимания того что реально происходит в плане системных вызовов - есть хотя-бы strace. Покажет какие системные вызовы были и чем закончились. Может навести на мысли. Если оно отлупляет нечто типа inappropriate IOCTL for device, это хорошая подсказка что идут "неожиданные" файловые операции.

                  > К сожалению  систему не могу выбирать.

                  Ну так проверьте что ваш UART для начала работает как надо. CP210x древние и возможно нормально работают даже в этом дебиане.

                  Как-то примерно так:
                  1) picocom /dev/ttyUSB0  
                  (При старте напишет параметры порта, если все ок. Возможно надо будет еще указать правильный baud rate, т.к. не факт что дефолтный - такой какой вам надо)

                  2) Напечатайте что вы там хотели. Посмотрите приехал ли ответ от вашего девайса.

                  Если есть какие-то непонятки, делаем тот самый тест UART с замыканием линий: запускаем picocom, CP2102 - не подключен ни к чему. Печатаем. Убеждаемся что ничего не печатается (локального эха нет). Соединяем TX и RX вашего CP2102. Проверяем что теперь - печатается (т.е. то что шлется в TX, прилетает назад по RX). Если это так - ок, порт работает и дело в чем-то другом (baud rate, flow control, кривая работа с портом, ...). Если не ок - напишет в чем проблема. Если не рабтает даже picocom, простой как 5 копеек, то у вас таки проблемы системного характера.

                  > Если ничего не поможет, то так и сделаю.

                  Это имеет смысл сделать одной из первых вещей - позволяет понять насколько работает UART, в обе стороны. Если этот тест не прошел - у вас что-то не так и остальное работать и подавно не будет.

                  > Под виндой сделал за пару часов, а тут борюсь уже пару недель.

                  Как я уже сказал, винда и линукс - разные вещи. И есть некоторые нюансы. Поэтому если вы будете лезть с виндовым бэкграундом в линух - будете получать граблями по лбу. Примите как данность: Linux - это не еще один вариант винды. Это другая система. И у него свои особенности. Вот файлы девайсов - в том числе. Не стоит в них лишний раз соваться general purpose утилитами, особенно от рута, без четкого понимания последствий.

                  > То что девайс работает - это точно, затык именно в линухе.

                  ИМХО затык в том что вы пытаетесь применять виндовый бэкграунд к линуху. А это чревато интересными обломами. Чтобы работать с системой - надо ее все-таки знать.

                  А чтобы подсмотреть как работать с UART в Linux в явно работающих программах, в дебиане и прочих убунтах есть фирменный чит: apt-get source <какая-нибудь программа работающая с UART>. Желательно маленькая, чтобы разбираться поменьше было. Например, stm32flash (прошивалка STM32 по UART). Или тот же picocom (но он работает с текстовыми данными и не лучшим образом, это отдельный случай и его я не порекомендую). Получите сорц программы, при том - заведомо более-менее рабочей. Позволит посмотеть "а как это делали другие". Вообще, пакетный менеджер и открытый софт - штука хорошая. В винде такой чит не получится, хоть там что.

                  > Вообще спасибо за советы! Очень путные!

                  Ну еще бы - я по таким грабелькам уже попрыгал :).

                  А еще - за неделю можно было бы задолбаться и накормить поисковик очевидными кейвордами. И в первых строках найти что-то типа http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html - с рассказом что есть UART и с какого бока к нему заходить. Кстати говоря, даже в винде с UART есть свои бестолковости, особенности и грабли. Самая очевидная грабля с которой я столкнулся: винда врет про успех установки baud rate, каким бы он ни был, даже бредовым. Это вынуждает городить нефиговые костыли иной раз. В линухе соотв. вызовы честно отлупляют статус: если порт такой baud не умеет - выставить его и не дадут, собственно.

                  • Конфигурация serial port, !*! anastigmat, 10:18 , 26-Июн-15 (11) +1
                    Начну с конца:
                    Спасибо! Все заработало!
                    Далее по пунктам.

                    > И кстати вот еще какой момент: безбашенным echo и прочим - вы
                    > могли ... загадить себе файл девайса.

                    Благо обошлось без этого.

                    > 5) Больше не эхайте в спецфайлы!

                    Полностью согласен. И не читайте всякими hexdum`пами и cat`ами и иже с ними. Особенно миникомами. Действительно уйму времени угробил, пока понял, что не все они "читают".

                    > А еще, для понимания того что реально происходит в плане системных вызовов
                    > - есть хотя-бы strace.

                    "Опустился" уже в какой-то момен и до неё. Но полностью применить её мощь не позволило недостаточность моих знаний.


                    > Если есть какие-то непонятки, делаем тот самый тест UART с замыканием линий:

                    [...]
                    > Это имеет смысл сделать одной из первых вещей

                    Это было сделать не тривиально: UART бридж на основе CP210x физически спрятан (впаян) внутри устройства, а не классический кабель-переходник, а разбираться в схемотехнике самого устройства у меня знаний не хватает.


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

                    Согласен, но с чего-то начинать нужно.

                    > Чтобы работать с системой - надо
                    > ее все-таки знать.

                    Очень надеялся, что переслать пару байт возможно без глубокого (относительно) изучения всей системы. Но нет...

                    > А чтобы подсмотреть как работать с UART в Linux в явно работающих
                    > программах, в дебиане и прочих убунтах есть фирменный чит: apt-get source
                    > <какая-нибудь программа работающая с UART>.

                    Это действительно так. И я так и поступил. Правда влез в stty.

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

                    И тут можно "плохому" научиться)) Так что не все сорсы одинакого полезны?

                    >> Вообще спасибо за советы! Очень путные!
                    > Ну еще бы - я по таким грабелькам уже попрыгал :).

                    Уже тоже имееться своя узкая тропинка, усыпаная грабельками...

                    > А еще - за неделю можно было бы задолбаться и накормить поисковик
                    > очевидными кейвордами. И в первых строках найти что-то типа http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html

                    Это было одно из первых, что я прочитал. Только без *никсового бекграунда это очень тяжело воспринимается снаскоку. Это теперь я вижу, перечитывая, как все _почти_ очевидно))
                    И да, работаю в режиме "многозадачности" и конечно чистого времени на эту проблему не пара недель. Просто когда вижу, что мысли начали заходить в тупик, переключался на другую задачу, где "бери лопату и кидай"))

                    Ну а как решил:
                    взял в руки что потяжелее, c++ например. Так отконфигурил, вот кусок кода:
                          tcgetattr(port.fd, &port.config_old);
                          port.config_new=port.config_old;
                          port.config_new.c_oflag = 0;
                          port.config_new.c_iflag=0;
                          port.config_new.c_cflag=CS8|CREAD|CLOCAL;
                          port.config_new.c_lflag=0;
                          cfsetispeed(&port.config_new, B19200);
                          cfsetospeed(&port.config_new, B19200);
                          if(tcsetattr(port.fd, TCSAFLUSH,&port.config_new)!=0)
                              {
                                cout<<"tcsetattr() failed."<<endl;
                                return (-1);
                              }

                    Ну а потом select в руки и read. И все заработало.
                    Параллельно большое спасибо за udev! Так как и сам девайс не подарок. Как оказалось переодически отваливался от компьютера, и премонтировался под разными /dev/ttyUSB#. grep показал, что "USB port nn disabled by hub (EMI?)". Причину EMI искать в устройстве-компе не стал, провода точно хорошие, а внутрь устройства лезть не буду. Прописал в рулезах и теперь постоянно поднимается симлинк с постоянным именем для девайса. Только в удев_рулёзе так и смог команду RUN заставить работать... Пробовал и RUN+="_команда_" и RUN{"_команда_"} все равно не исполняется. Но это уже мелочи.

                    Еще раз, всем огромное спасибо!

                    • Конфигурация serial port, !*! Аноним, 12:09 , 28-Июн-15 (12)
                      > Спасибо! Все заработало!

                      Отлично :)

                      > Благо обошлось без этого.

                      Но запомнить этот момент не лишне. Я так как-то долго прыгал по грабелькам. А потом заметил что файл девайса оказывается вовсе и не файл девайса, а уже обычный файл.

                      > Полностью согласен. И не читайте всякими hexdum`пами и cat`ами и иже с ними.

                      Ну это все-таки не совсем обычный файл. Там буферизация, настройки таймаутов, потенциально - процессинг ввода. И какие настройки по дефолту и насколько это то что вы хотели - отдельный вопрос. И в разных системах все это по разному.

                      > Особенно миникомами.

                      Он переклинен на диалапных модемах. Терминалка для обзвона BBS-ок. Остальное там - "можно, но сложно".

                      > Действительно уйму времени угробил, пока понял, что не все они "читают".

                      Миником ожидает модем. А обычные утили - обычные файлы. Попытки кормить софт не тем чем он ожидал - ни к чему хорошему не ведут.

                      > мощь не позволило недостаточность моих знаний.

                      Да там все достаточно просто. Хотя спама может быть многовато. Можно обрубить лишнее, встроенным фильтром или просто каким-нибудь редиректом в grep.

                      > Это было сделать не тривиально: UART бридж на основе CP210x физически спрятан

                      Извиняюсь, невнимательно читал что у вас погодная станция. Думал что кабель все-таки отдельно. А с отдельными кабелями бывает много грабель в электрическом уровне, вот я "по инерции" и посоветовал.

                      > схемотехнике самого устройства у меня знаний не хватает.

                      На самом деле это не так уж сложно, в том плане что найти надо этот самый CP2102 и посмотреть куда идут его лапки TX и RX (даташит на CP210x - общедоступен). Скорее всего к процу этой штуки, на его UART. В лучшем случае могут быть контактные площадки или даже разъем с UART-ом. Но разбирать готовый девайс и правда как-то не очень.

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

                      На самом деле я сам когда-то прогрмамил компорты в винде. А теперь в линухе. Они не настолько уж разные. Но отличия все-таки есть. И желание срезать угол на предыдущих знаниях может сыграть дурную шутку иной раз.

                      > Очень надеялся, что переслать пару байт возможно без глубокого (относительно) изучения
                      > всей системы. Но нет...

                      Ну это на самом деле нечто типа random. Может и получится, в зависимости от. Параметры порта - можно выставить утилитой типа setserial, например. Но изначально ее может в системе и не быть. И мне кажется надежнее явно впрогрмамить заведомо правильные настройки порта и проверять статус операций. Так по крайней мере в случае чего - понятно что не так.

                      > Это действительно так. И я так и поступил. Правда влез в stty.

                      Да не принципиально в кого именно, единственное что всякие "терминалы" и т.п. - могут использовать "канонический" процессинг текста, а насколько вы хотели это при работе с произвольным девайсом - отдельный вопрос.

                      > И тут можно "плохому" научиться)) Так что не все сорсы одинакого полезны?

                      Как написано в том мануале на который я сослался, есть канонический ввод, ориентированый сугубо на построение терминалок. И есть неканонический, где система не пытается умничать и делать строки из того что строками может и не являться. По понятным причинам, с произвольными данными работать надо в неканоническом режиме. Если этот момент упустить - можно удивляться тому что данные "портятся".

                      > Уже тоже имееться своя узкая тропинка, усыпаная грабельками...

                      Да на самом деле там не все так страшно, особенно если подсмотреть у кого-нибудь заведомо работающего как это делать.

                      > Это было одно из первых, что я прочитал.

                      Даже так? Про это можно было бы упомянуть :)

                      > Только без *никсового бекграунда это очень тяжело воспринимается снаскоку.

                      Я бы не сказал что я - такой уж крутой *никсовый программер. Там вроде все достаточно логично написано и не то чтобы мне требовался при чтении этого какой-то бэкграунд.

                      > И да, работаю в режиме "многозадачности" и конечно чистого времени на эту
                      > проблему не пара недель. Просто когда вижу, что мысли начали заходить
                      > в тупик, переключался на другую задачу, где "бери лопату и кидай"))

                      А, ну понятно :). А я то удивлялся - как за 2 недели можно не найти тот how to и что там в нем 2 недели читать. Я то в него более-менее въехал ну может часа за 2.

                      > взял в руки что потяжелее, c++ например. Так отконфигурил, вот кусок кода:

                      ...
                      > Ну а потом select в руки и read. И все заработало.

                      Ну вот я тоже как-то так предпочитаю :). Там ничего особо страшного.

                      > Параллельно большое спасибо за udev! Так как и сам девайс не подарок.
                      > Как оказалось переодически отваливался от компьютера,

                      Вот это уже может быть глюками старого ядра. Как бы там ни клялись про стабильность фанаты дебиана, мне ядра до 3.10 в плане работы usb не очень нравятся. На самом деле, чипы и чипсеты в мамках - достаточно бажные. А драйвера наполовину состоят из "quirks" и воркэраундов глюков чипов. Одна из причин по которым я не люблю старые ядра - чем новее ядро тем о большем количестве нестандартных закидонов чипов оно знает и знает как правильно выходить из таких штопоров или вообще не допускать их.

                      > и премонтировался под разными /dev/ttyUSB#.

                      Ну да, если ttyUSB0 уже занят, очередной адаптер сядет на ttyUSB1, и так далее.

                      > grep показал, что "USB port nn disabled by hub (EMI?)". Причину
                      > EMI искать в устройстве-компе не стал, провода точно хорошие,

                      Тогда может быть это какие-то глюки чипа или чипсета а относительно старый кернел не все воркэраунды содержал.  С другой стороны, качество проводов для usb на глаз прикинуть тоже нелегко. Это скоростная дифференциальная пара, там волновое сопротивление роялит и прочие отражения сигнала. На глаз это проверить не то чтобы просто.

                      > симлинк с постоянным именем для девайса.

                      Вариант. Заодно можно какое-то более логичное название девайса дать. Скажем /dev/weatherstation. Из недостатков: прога будет по идее сталкиваться с ошибками чтения когда девайс отпал. Но если написать там переоткрытие порта - работать по идее будет. Хоть это и костыль и по хорошему так быть не должно.

                      > Только в удев_рулёзе так и смог команду RUN заставить работать...

                      Я в правилах обычно пользуюсь чем-то типа: RUN+="/usr/bin/program %k" (отдает /usr/bin/program как argv[1] параметр %k, который "название девайса по мнению ядра"). Да, там надо указывать ПОЛНЫЙ путь к программе. И там не будут работать всякие фичности шелла типа перенаправлений или раскрытия wildcard, насколько я помню. Это просто выполнение программы а не шелл. Но можно передать кучу параметров и прочая. Путь к программе - ***обязательно*** полный. А примеры подсмотреть можно в системных правилах, их немеряно в каком-нибудь /lib/udev/rules.d/ :)

                      > все равно не исполняется.

                      Странно, у меня исполняется. Например, на нотике я делаю как-то так:

                      SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNEL=="wlan*", RUN+="/usr/bin/macchanger -r %k"

                      Этот рулес при появлении сетевого устройства "wlan*" в системе - запускает программу macchanger, которая ставит на указанном интерфейсе (%k - имя девайса по версии ядра) рандомный MAC. Небольшой подарок любителям слежки за перемещениями людей через отслеживание MAC в периодических probe requests :P. Или "как запилить это более честно чем apple" :)

                      > Еще раз, всем огромное спасибо!

                      Да не за что - приятно помочь сообразительному человеку.

  • Конфигурация serial port, !*! kostya_from_berdsk, 12:42 , 23-Июн-15 (6)
    > Под виндой работает исправно,
    > присылает ответ 'TEST'
    > Какие параметры покрутить stty, чтоб настройки были "зеркальные" винде?
    > Заранее спасибо.

    В винде кодировка CP1551, строки обычно заканчиваются кодами 10,13 возврат каретки, перевод строки.
    С портом в дебиане Вы работаете в UTF-8 и строки заканчиваются только возврат каретки

    https://ru.wikipedia.org/wiki/п÷п╣я─п╣п╡п╬п╢_я│я┌я─п╬п╨п╦

    • Конфигурация serial port, !*! Аноним, 06:30 , 24-Июн-15 (8)
      А еще может быть например flow contorl не соответствующий действительности. Скажем если по дефолту аппаратный, но сигналы никто не дергает - передача встрянет навечно, т.к. ожидаемые изменения сигналов никогда не приедут.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру