Вместо вступления


Как обычно я предлагаю заняться странным — попробовать подключить несколько старых RS232 устройств, через один USB порт с помощью синей изоленты и смекалки. Статья не будет большой, скорее это описание что где взять и зачем вообще все это делать.



Зачем?


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

Как правило «мозгами» такого комплекса является компьютер у которого 100500 выходов RS232. Из примеров могу привести место кассира в супермаркете, банкоматы и тому подобное. С первым случаем столкнулся я.



Эти компьютеры не блещут мощностью, но отличаются космической стоимостью. Естественно он перестает отвечать требованиям современных технологий и многим приходит в голову идея заменить их на обычный ПК и получить приличную мощность по адекватной цене, однако быстро выясняется что RS232 на новых ПК вымер как класс. Теперь этот интерфейс стал сугубо специализированным. Соответственно надо или самостоятельно прикручивать кучу RS232 или искать уже готовое спец решение.

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

Люди не посвященный в тему сразу радостно покупают пучок китайских USBtoRS232 переходников, а дальше все идет очень печально. Лучше этого не делать. Вторым вариантом является покупка специализированной платы расширения с кучей RS232. Этот вариант уже лучше и имеет право на жизнь, но тоже имеет свои недостатки. Например стоимость и проблемы с дровами если используется не Windows или не та версия. Так же не маловажным фактором является доступность в будущем, так как что-то выходит из строя и парк может расширятся в будущем. Потом оказывается что конкретная модель уже не выпускается или не постановляется в конкретную местность и т.д. В общем привязывать себя к конкретному устройству это всегда опасно, особенно если можно этого не делать.



Пробуем что-то сделать


Может показаться странным что примитивные RS232 устройства так сложно и дорого подключить по нормальному если по сути там обычно простые протоколы и примитивный физический уровень. А все потому что обычно подобные аппаратные комплексы используются в коммерческих доходных сферах и покупка оборудования по таким ценам оправдана, а само оборудование уже перешло в разряд специального. Спец оборудование = спец цена вопроса.

Однако все это не мешает попробовать собрать свой бюджетный велосипед. Бонусом получим возможность менять поведение такого своеобразного RS232 мультиплексора и полностью обойдем проблему написания USB драйверов. HID профиль поддерживается почти везде.

Однажды я прочел отличную статью автора RaJa До этого я интересовался USB, но до практики не доходило. В наличии у меня было несколько дешевых отладочных плат, китайских клонов Blue Pill на микроконтроллере Stm32f103c8t6. Сама история и идея создания этой платы очень интересная, стоит поинтересоваться.



Этот микроконтроллер отличается тем что имеет три UART и аппаратную поддержку USB. Это то что может быть нам интересно в разрезе нашей задумки, а вообще микроконтроллер на этой плате, работает на частоте 72Mhz и по характеристикам порвет любое Arduino схожего формфактора. Но самое главное преимущество это повсеместная распространенность этой платы. Я не знаю более простых и дешевых способов пощупать «железный» USB.

Добавив три дешевых преобразователя RS232toUART MAX2323 и немного «рассыпухи» можно собрать своеобразный конвертер интерфейса 3хRS232 <=> USB.

В моем случае нужно было подключить три RS232 устройства к Raspberry Pi 3. Если использовать обычные RS232 <=> USB переходники то в итоге сталкиваешься с тем что в системе куча одинаковых устройств к которым не понятно что подключено и все это дико глючит, а выглядит еще более печально.

Если вы немного капнете в сторону какие микросхемы USB to UART доступны повсеместно, то обнаружите что там полно подделок. Думаю не стоит объяснять как это все потом себя ведет с оригинальными драйверами. И никто не мсожет гарантировать вам что даже брендовые переходники вдруг не закупят левую партию микросхем. Удешевление производства оно происходит повсеместно.

В итоге придумалась примерно такая простая схема коммутации ее даже можно изобразить в стиле Arduino:



Я отломал резистор который подтягивает D+ к питанию и сделал эту подтяжку управляемой с помощью транзистора. Она отвечает за опознание устройства на USB шине.

Распиновка разъемов RS232 в программе (Fritzing) где я набрасывал схему странноватая, но думаю никому не составит труда найти ее в интернете, контакты задействованы как обычно 2,3 и 5. А еще удобнее будет использовать платы конвертера UART to RS232 котором уже присутствует разъем RS232.



Low Level


Код для микроконтроллера я писал и отлаживал с помощью IDE EmBitz (если честно то я был удивлен как легко завелась эта IDE, особенно после танцев с бубном вокруг CooCox. ). За основу взял проект из статьи выше. Это первый пример который у меня заработал сразу после заливки.

Я добавил работу с тремя UART и изменил структуру HID репортов так чтобы обмен с ПК шел всегда по 64 байта с контрольной суммой (crc8).

Попытался организовать автопереподключение устройства если соединение по USB не прошло корректно. Не претендую на супер алгоритм, должен признать что не являюсь специалистом по USB. Отдельный транзистор, отображенный на схеме, управляемый отдельным пином B5 подтягивает одну из сигнальных линий USB к питанию что имитирует включение устройства и хост проводит инициализацию устройства. Если попытка не удачная то происходит переподключение.

Было замечено что в Linux (Raspbian) процент не успешных подключений значительно меньше чем в Win 10, возможно этот результат получился из-за моих локальных технических условий.

Общий алгоритм похож на примитивный маршрутизатор, принимая пакет по USB мы смотрим какому UART оно предназначено и пересылаем туда, в обратную сторону аналогично. Есть немного обработки самих пакетов но это относится к конкретному RS232 оборудованию которое я подключал. Это были: экран покупателя Datecs dpd-201, стационарный лазерный сканер штрихкодов Datalogic Magellan 8300 и весы Digi DS890.

На фото выше тестовый образец устройства содержит еще DC-DC шим преобразователь питания на микросхеме MP2307.

Это нужно для того чтобы питать устройство от напряжения 10-24В (входное) и иметь возможность подключить дисплей покупателя который питается от такого же напряжения. После DC-DC шим преобразователя поулчаем 3.3В для всех остальных модулей. Для этого дисплея так же установлен «телефонный» разъем вместо RS232, не хотелось перепаивать стоковый штекер.

Проект лежит тут.

High level


Вторая часть софта это примеры и тесты собранные в сумбурный проект на Java написанный IDE IDEA. Предполагается что работа с устройством интегрируется в софт высокого уровня используя различные обертки по работе с USB стеком в зависимости от языка на кортом этот софт пишется. Сейчас сложно найти такой ЯП чтобы под него не существовало таких оберток. Отдельно для староверов отмечу что java и usb совместимы если готовить правельно, это доказано практикой и используется в коммерческом проекте.

В процессе тестирования выяснилось что работа в Linux и Windows с USB HID несколько отличается, работа отлаживалась через две библиотеки usb4java и hid4java. Работа через последнюю используется в Linux (Raspberry Pi 3).

Разница заключается в том что в Windows можно обратится напрямую к USB устройству даже если оно зарегистрировано как HID и писать\читать его конечные точки (endpoint). В Linux же приходится работать с hid устройством. То есть устанавливается стандартный драйвер hid и всё, работайте только с ним пожалуйста. Работа таким образом происходит немного медленнее чем напрямую, но напрямую тоже возможно если убедить систему не ставить драйвера. Это реально.

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

Заключение


Представленное устройство это лишь одни из примеров как довольно легко можно приобщится к процессу создания нативных USB устройств и перестать наконец использовать переходники.

Не забываем плюсовать RaJa автора статью в которых на пальцах объясняется как пощупать железный USB и сохранить желание разбираться дальше.

Комментарии (145)


  1. kova23
    04.05.2018 11:51

    А почему нельзя было сделать на чипе FTDI 232? Они дороже?


    1. svavan Автор
      04.05.2018 11:55
      +1

      Вы знаете как будет выглядеть в системе несколько FTDI 232 при условии что вы их сможете гарантированно купить оригинальные?


      1. kova23
        04.05.2018 11:58

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


        1. svavan Автор
          04.05.2018 12:04

          Кстати да, рассматривали и такой вариант, задавать уникальные ИД. Но особенность нашей местности сейчас в том что сложно достать оригинальные микросхемы да и вообще что либо. Далее пришлось бы организационно очень жёстко следить чтобы втыкали все именно туда куда надо. Плюс есть у нас очень «особенное» оборудование которое очень особенно работает и очень неплохо иметь возможность управлять процессом преобразования RS232 в USB на низком уровне.


          1. ice938
            04.05.2018 17:21

            Я на не оригинальных ИД тоже менял, все хорошо работало, пока свежие дрова не поставили… Свежие дрова все ИД выставляют в нули, и устройства перестает работать =) С помощью некоторых телодвижений ИД возвращаются на место, а вот запретить обновлять дрова бывает сложнее!


            1. juray
              05.05.2018 15:18

              Вот проблема с неоригинальными чипами и свежими дровами имеет место, да.


      1. dernuss
        04.05.2018 13:56
        +1

        Будут выглядеть как много портов;) ни чего не обычного


        1. svavan Автор
          04.05.2018 13:58

          Но для программиста ПО будет печалька. Особенно когда оборудования много вариантов.


          1. juray
            05.05.2018 15:37
            +1

            Если в режиме эмуляции COM-порта — чем отличается от ситуации когда много «обычных» COM-портов? Собственно, если нужно сохранить legacy софт, то таки придётся эти порты изображать.

            Если же софт переписывается с нуля — вариантов решения становится больше, но и головной боли тоже (и не только в плане написания софта, но и при выборе варианта).
            Но я согласен со статьёй — пропихать обмен через HID это большой плюс в плане независимости от драйверов. Зато в D2XX не вижу печальки для программера-прикладника. Очень удобно сразу получать список идентификаторов, зашитых в чипах, без поочередного открытия портов.

            Ну а идентификация оборудования, подключенного через RS-232 — вопрос следующего уровня абстракции, он не должен зависеть от реализации канала обмена байтиками.

            Разумеется, все эти соображения справедливы, пока не требуется дергать линиями последовательного порта за пределами стандарта. Тут своё устройство даёт полную свободу.


            1. svavan Автор
              05.05.2018 15:57

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


          1. Muzzy0
            05.05.2018 20:56

            В чём проблема? Любому порту можно назначить любой номер.
            Мне систематически приходится работать с преобразователями на FTDI, CP2102, PL2303 (с этими дело имел меньше всего) и даже CH340/341. И всё работает.
            Вам очень повезло, что ваши устройства обходятся только парой Rx/Tx. Многие специализированные устройства любят использовать ещё и RTS/CTS, DTR/DSR. В таком случае вы бы всё ещё могли возиться с вашим переходником.


      1. Jef239
        04.05.2018 22:21
        +1

        Да, знаю. Отлично выглядит, у нас такие на отладочных платах поставлены. Четырехпортовые FTDI практически не подделываются, а стоять — дешевле платы, на которую их ставят.


  1. AlexanderS
    04.05.2018 12:22

    Люди не посвященный в тему сразу радостно покупают пучок китайских USBtoRS232 переходников, а дальше все идет очень печально. Лучше этого не делать.

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

    С RS'ом-то проблемы решаемые. А вот я как-то столкнулся с не таким уж и несвежим программатором с LPT — вот это был абзац. На новых компах такого порта как класса нет. С переходником USB-LPT он не заработал. С PCI платой расширения он тоже не заработал — оказывается плата занималась эмуляцией LPT и что-то до конца не эмулировала, не помню уже точно, но софт отказывался видеть программатор. В результате нашёл старый и чуть ли не единственный несписанный комп с Windows XP SP2, на котором себя отлично чувствует и софт к этому программатору. Теперь на складе лежат две жётско скреплённые скотчем коробки с надписью «Программатор!!! Выбрасывать категорически запрещено!!!» )))


    1. svavan Автор
      04.05.2018 12:28

      Мы довольно успешно использовали 1-2 переходника, но потом их число грозило сильно возрасти, а имея уже опыт по ликвидации глюков это начало пугать. Разумеется когда он один это вполне себе вариант. Хотя я бы настаивал все равно не на переходнике, а на настоящем RS232, одну штуку чаще всего можно найти если провести ревизию внутренних разъемов конкретной материнки.


      1. t2ton
        04.05.2018 14:48

        Использую в лабораторной установке на нынешний момент 2 ардуины + 3 разных прибора с USB-RS232 переходниками. Итого 5 USB->COM переходников.
        Все общаются с компьютером через VISA протокол. В принципе, если бы не тупой LabView, периодически при старте программ не видящий соединение (если неправильно закрыть VISA сессию), то я бы не сказал, что есть какие-то глюки. При рестарте всего Labview всё сразу находится и работает без проблем.
        К этому же компьютеру подключены еще 6 разных приборов по USB.
        Слабо представляю, какие глюки могут обнаружится. Хотя скорости обмена данными у нас не такие высокие, возможно при повышении вылезает что-то?


        1. svavan Автор
          04.05.2018 14:55

          Разное бывает, у вас одна установка? У нас много комплексов, далеко не все монтируются адекватными специалистами и с обратной связью плохо. На практике сталкивался с не корректной установкой драйверов для pl2303 и ftdi, с проблемой именования ком портов в системе, с подделками pl2303 и ftdi, с не соответствием логических уровней, с помехами на линию от мощного оборудования, с тем что некоторый софт тупо не видит ком порты созданные некоторыми переходниками, это на вскидку.


          1. t2ton
            04.05.2018 15:23

            Ну в принципе, почти всё, что вы описали, я видел :)
            И драйвера, и именование (на одном компьютере есть аж 15 непонятно под что зарезервированных СОМ-ов). Проблему с драйверами (и с подделками) обычно решаю поиском по VID PID, хотя у меня это разовая непоточная работа — раз в полгода подключить какой-то прибор на другой комп. Хотя при возникновении глюков это напрягает… Проще было бы иметь стандартный пакет установки и не мучать себе мозг.


          1. ice938
            04.05.2018 17:38
            +1

            Помехи- это да, «веселые» проблемы! Как-то несколько дней отлавливал баги в оборудовании, весы отключались. В моем присутствии все работает, когда уезжаю- глюки и постоянные пропадания связи. Все профилактические меры принял, все соединения проверил, кабели заменил, все заземлил, разъемы зафиксировал, блоки питания новые — все равно в мое отсутствие глючит. На третий день приехал, сел в стороне и смотрел, что делают операторы. Оказалось, что через некоторое время приходит упаковщик и зашивает готовую продукцию в мешки. А делает он это монструозным агрегатом с приводом на коллекторном двигателе, который при работе не хило искрит щетками и наводит на линии связи помеху амплитудой около 10В, даже сквозь экраны…


            1. svavan Автор
              04.05.2018 18:52

              Вот она практика))) Пока космические корабли бороздят в теории…, а на практике приходит мужик и все, сушите весла)))


          1. Jef239
            05.05.2018 14:18

            И ни одна из этих проблем не специфична для USB-COM, с железными многопортовками на PCI — проблемы те же.

            Чтобы непослушный софт под виндой увидел порт, надо или дать ему номер не больше COM4 (номер порта переназначается в диспетчере устройств), или открывать как //./COM34

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

            Но это все общие проблемы RS32, а не проблемы переходников.


            1. svavan Автор
              05.05.2018 14:23

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


              1. Jef239
                06.05.2018 23:43

                Уже писал — смените номер порта в диспетчере устройств (вкладка Settings в свойствах, кнопка Advanced) на 1-4. Порты больше 4 надо открывать как //./COM5, а это не любая программа умеет.


            1. juray
              05.05.2018 15:44

              С этими корпусными соединениями тоже не все так просто, меры надо применять комплексно. Как-то в одной локалке (еще на коаксиале) были разные земли в разных местах здания. Соединили две аудитории — сгорела оплетка кабеля, «заземленная» с обоих концов. При этом сами сетевухи выжили, имея гальванически развязанный выход (через трансформатор).
              В итоге решили, что прежде чем соединять сети, надо таки как следует уравнивать потенциалы земель нормальной шиной.


              1. zerg59
                05.05.2018 19:14

                Это могло быть просто из-за отсутствия заземления. Для балансировки по фазам другая аудитория могла быть запитана от другой фазы, что даёт весёлые 190В разницы на корпусах незаземленных компов, подключённых к разным фазам. Ситуацию усугубляет объединение корпусов через оплетку коаксиала.


                1. juray
                  05.05.2018 21:23

                  Не, заземление было, но у каждой части здания отдельное, «звездой». Но видимо, хреновое (и это электроэнергетический факультет!).


          1. semen-pro
            05.05.2018 20:29

            Есть еще CH340, их вроде не подделывают, т.к. они и так китайские.


        1. svavan Автор
          04.05.2018 15:00

          В идентичном случае я бы разумеется поступил как вы.


        1. antonn
          04.05.2018 15:04

          У меня обычный консольный кабель от Cisco (конечно не сам кабель, а консолька) не заработал в одном переходнике, и работал без проблем в другом. Хотя там скорости 9600. Причем второй рабочий был какой-то ноунейм, а первый куплен в магазине и в красивом блистере (и в целом рабочий, проверил на порту ИБП).


          1. svavan Автор
            04.05.2018 15:06

            Скорее всего что-то с логическими уровнями. Самый безпроблемный на моей практике был CH340, но это ведь лютый китай))) cp2102 тоже ничего, но дороже.


            1. DmSting
              05.05.2018 19:45

              По своему опыту: для целей настройки одной линии RS485 (простые охранка/пожарка, часто с ними работаю) любые преобразователи на CH340 выглядят просто великолепно.
              Т.к. подключается только 1 линия и к 1 конкретному компьютеру, то количество глюков минимально, драйвера стоит один раз и навсегда. Единственная потенциальная проблема — когда реально сложная/загаженная линия RS, тогда потенциально сильно падает качество связи. Но это всё-таки отдельная проблема, которую надо устранять независимо от используемого преобразователя.


    1. VBKesha
      04.05.2018 12:35

      Да есть они на современных платах как класс не на всех и не часто но есть, только сзади не выведен, а как гребенка на плате вот например GIGABYTE Z370M DS3H


      1. AlexanderS
        04.05.2018 12:46

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


        1. svavan Автор
          04.05.2018 13:09

          Вполне себе вариант, на новых матерях все чаще уже нету RS232.


    1. BigDflz
      04.05.2018 15:39

      На новых компах такого порта как класса нет.

      как раз наоборот — на новых компах и есть и com и lpt. только они не выводятся не заднюю панель. как пример Z370 HD3P.


      1. svavan Автор
        04.05.2018 15:39

        Я думаю это решить очень просто — у кого есть тот пусть использует и не парится.


      1. AlexanderS
        04.05.2018 16:13

        Где есть, а где нет. Я изучил три разные модели материнок от асусов — не было ни на одной. Других компов на работе просто не было. В бухгалтерии возможно есть, но с теми компами я лишний раз связываться и не буду. Неповезло мне короче (


    1. nightmare-1966
      05.05.2018 20:16

      ИМХО есть смысл к подобному оборудованию взять нечто типа такого: INTEL D425KT Atom D425, например. Тут вам и параллельный, и последовательный порты как раз есть. И по тормознутости как раз для ХР в самый раз :-). Получается совсем небольшая коробка.
      Что поделать, порой нужна и шина ISA, как вот на производстве военном недавно видел, в своё время некому и некогда было задуматься перевести тестовые платы на USB хотя бы… Так вот и работают древние компы с чуть ли уже не рассыхающимися от старости матплатами на софте под ХР…


  1. pesp
    04.05.2018 12:23

    По поводу переподключения USB. Я делаю похожий проект, для начала взял платку BTE14-07, почти такая же как и у Вас, но на определение подключения по USB есть ключ. Я организовал работу эмулятора RS232, а не HID, и у меня переподключение работает. Попробуйте глянуть схему этой платки, может быть чем нибудь окажется полезна.


    1. svavan Автор
      04.05.2018 12:31

      Да, спасибо! На самом деле варианты есть, возможно я даже и наталкивался на вашу плату, но на этой плате сделана постоянная подтяжка к питанию, поэтому городил транзистор.


      1. dernuss
        04.05.2018 12:56

        А зачем транзистор? Нельзя ли просто gpio подключить через резистор?


        1. svavan Автор
          04.05.2018 13:11

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


          1. dernuss
            04.05.2018 13:12

            Какая нагрузка будет ограничена?


            1. svavan Автор
              04.05.2018 13:26

              Если я правильно понял вы предлагаете подтянуть D- к питанию используя просто свободный пин (сконфигурированный соответствующим образом) и резистор?


              1. dernuss
                04.05.2018 13:35

                Верно


                1. svavan Автор
                  04.05.2018 13:39

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


                  1. dernuss
                    04.05.2018 13:46

                    Насколько я помню, там резистор 1.5к, то есть I = 3.3V/1.5К = 2.2 mA. А допустимый ток stm32 я думаю больше, порядка 10 mA или выше.


                    1. svavan Автор
                      04.05.2018 13:49

                      Я почти уверен что этого хватит. Но есть привычка перестраховываться)


                      1. pesp
                        04.05.2018 13:53

                        Это чисто схемотехническая перестраховка для повышения надежности. D- выходит вне устройства, и на нем могут быть статические разряды и всякая ерунда. В Вашем случае она сразу попадает на пин контроллера. Поэтому пином управляют транзистором, у которого перегрузочная способность больше, и если пробьется — легко отремонтировать.


                        1. dernuss
                          04.05.2018 13:55

                          Ну во первых не сразу на пин, а через резистор 1.5К. а во вторых D+ и D- попадают на вход МК всего лишь через 25 Ом или около того.


                          1. svavan Автор
                            04.05.2018 13:57

                            По моему они сразу на гребенку выведены.


                        1. svavan Автор
                          04.05.2018 13:56

                          Вот сам бы не сформулировал лучше) Полностью согласен. Даже могу привести печальный опыт — смертью храбрых полегли две платы пока я экспериментировал, скорее всего статика.


                          1. dernuss
                            04.05.2018 13:59

                            То есть один пин защитили, а два без защиты оставили?


                            1. svavan Автор
                              04.05.2018 14:05

                              Я боюсь что оставил без защиты все остальные, больше надежды на корпус. Защита от статики с помощью транзистора это вторично, от статики не так защищаются конечно.


                              1. dernuss
                                04.05.2018 14:07

                                Кроме того подтягивать надо не D-, а D+. Поправьте в статье чтоб не смущать народ.


                                1. svavan Автор
                                  04.05.2018 14:10

                                  Точно, перепутал!


                                  1. dernuss
                                    04.05.2018 14:17
                                    +1

                                    ну вот здесь

                                    Не забываем плюсовать RaJa автора статью в которых на пальцах объясняется как пощупать железный USB и сохранить желание разбираться дальше.


                                    В функции Set_System() производится настройка пина подтяжки линии D+ к питанию для программного подключения/отключения устройства от ПК (в нашей плате не используется), настраивается прерывание и инициализируются светодиоды и кнопки для демонстрационного проекта.


                                    1. svavan Автор
                                      04.05.2018 14:18

                                      Да да, я уже проверил, щас исправлю. Спасибо!


                                      1. dernuss
                                        04.05.2018 14:20
                                        +1

                                        тут ещё вот есть bootloader для этого камня, вдруг пригодится
                                        github.com/denruss/stm32_MyDfu


                                        1. svavan Автор
                                          04.05.2018 14:24

                                          Спасибо! Как обычно у меня получается — комментарии к статье несут не меньше пользы чем статья. Вспыхивают диспуты и рождается истина)


                      1. dernuss
                        04.05.2018 13:53

                        Я посмотрел даташит, -+25 mA на вывод.


                  1. bugdesigner
                    04.05.2018 14:23
                    +1

                    Не связано это с нагрузочной способностью, проблема в реализации USB в 103-й серии. Проблема была исправлена в новых сериях, поэтому лучше взять stm32f072 — с этим чипом подтяжка D- не требуется, всё реализовано в чипе. При этом stm32f072c8 pin-to-pin совместима c stm32f103c8, правда UART-a у неё всего 2.


                    1. svavan Автор
                      04.05.2018 14:25

                      Удачное совпадение, я случайно заказал stm32f072 на те платы которые спалил, теперь получается что пригодится)


                    1. dernuss
                      05.05.2018 06:38

                      а в документации написано что у всех STM32F072 4 usart


                      1. bugdesigner
                        05.05.2018 07:06

                        Да, всё правильно написано, но если в 48-ногом корпусе включить USB получится использовать только 2 UART с hardware flow control. Может для некоторых приложений это и не нужно, но мы ведь говорим о USB-RS232.


                        1. dernuss
                          05.05.2018 07:22

                          я думал мы говорим о реализации которую предлагает автор, а у него не используется аппаратный flow control.

                          П.С. в целом мне stm32f072 нравится больше за счет ненадобности кварца для USB и за счет подтяжки внутри чипа. К тому же он дешевле :)


                          1. bugdesigner
                            05.05.2018 07:28

                            Вы правы. Если пожертвовать rts/cts, можно все 4 использовать. Я просто так не стал бы делать, поэтому и написал про 2.


                            1. dernuss
                              05.05.2018 07:32

                              к тому же, у STM32F103 с USB можно использовать только 2 uart с flow control.
                              Так что stm32f072 здесь однозначно лучше будет, ну или там в низу товарищ использует ATXMEGA32A4U, но я этот чип не знаю) к тому же он дороже чем stm32f072


                              1. bugdesigner
                                05.05.2018 07:47

                                Да, Вы правы. Что касается xmega — тут уж столько холиваров пронеслось насчёт AVR… ARM микроконтроллеры уделали 8-битники по цене, особенно на опте. Мы покупаем stm32f051c8 меньше $1 за штуку, партии правда > 1k


        1. Andy_Big
          04.05.2018 14:09

          Подтяжка идет к 5 вольтам (к питанию USB), а GPIO выдает 3.3 вольта.


          1. dernuss
            04.05.2018 14:15

            и? нельзя подтянуть к 3.3V?


            1. Andy_Big
              04.05.2018 15:08

              Прошу прощения, наврал, подтягивается к 3.3 вольта :)


              1. svavan Автор
                04.05.2018 15:37

                Мне тоже так кажется.


  1. alex_kag
    04.05.2018 13:41

    А почему бы не использовать преобразователи eternet to rs? Самое оптимальное решение, как по мне…


    1. svavan Автор
      04.05.2018 13:41

      А можно ссылку, это что вообще? Переходник с RS232 на Ethernet?


      1. svavan Автор
        04.05.2018 13:54

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


        1. alex_kag
          04.05.2018 14:01

          А почему надо менять настройку софта??? Если взять к примеру nport 51хх серию или аналог — то делаем следующее — подключаем одним концом в локалку, вторым к прибору, а на компе просто создаем ком порты по количеству подключенных портов. и все. Программа как открывала ком порт, так и продолжает открывать именно ком порт.


          1. antonn
            04.05.2018 14:05

            Там начинают появляться более длинные тайминги, особо привередливые устройства с этим не согласны мириться.


            1. alex_kag
              04.05.2018 14:07

              к счастью. мне такое не встречалось… :) у меня так в основном теплосчетчики подключены.


              1. svavan Автор
                04.05.2018 15:42

                Главное не в коем случае не пробрасывайте СОМ порты по GPRS.


                1. ice938
                  04.05.2018 17:54
                  +1

                  Коллеги пробрасывали по Wi-Fi через лифтовую шахту(!), видимо, дальность хотели увеличить =) Лифт, останавливающийся между приемником и передатчиком, вызывал помехи и, через некоторое время, обрыв связи. Как следствие, приходилось идти наверх и перезагружать контроллер


                  1. Gryphon88
                    04.05.2018 18:01
                    +1

                    Они бы еще канал на микрофонах и пищалках в канализации сделали…


                  1. svavan Автор
                    04.05.2018 18:56

                    От затейники)))


      1. alex_kag
        04.05.2018 14:06

        ссылку на всякий случай кидать не буду, а так — загуглить можно — nport5130 (это то что последнее подключал но у него на выходе rs422/485), и куча других аналогов, у меня под боком есть более менее дешевое решение — микрон (1eth / 4 rs485) (построены на базе модулей tibbo). Только при покупке надо уточнять особенности софта (какой-то модуль подрядчики поставили, так то еще чудо — виртуальные порты работают ТОЛЬКО при запущенной программе.


        1. svavan Автор
          04.05.2018 14:08

          Как написал комментатор ниже, действительно не все можно пробросить по сети. Я наступал на эти грабли.


      1. kot23russia
        04.05.2018 22:19

        Проброс Eth<->RS232 не для описанной в статье задачи. Данный проброс используется когда выполняется работа с внешними устройствами RS-232 а компьютер спрятан в недрах HYPER-V. Например весовое оборудование, ну то которое большое, например взвешивает вагоны, ну и много железок в промышленности которые работают через RS-232 а нужны они для технологического учета движения мат. потоков. Т.е. железки разбросаны по «полю» а сервер ТБД стоит в стойке


        1. svavan Автор
          04.05.2018 22:24

          Да, вы правы, я тоже взвешивал вагоны) Вот там реально на замену оборудования мало кто решится, да и зачем. И есть еще одна сфера с которой я столкнулся где такой проброс уместен и иногда даже это единственное решение — это в SCADA сфере, там иногда нету альтернативы, спец ПО которое умеет только СОМ порты и ему плевать что у вас по какой-то причине объекты разнесены. Выход или пробрасывать или писать софт заново изучая протоколы описание которых давно съели крысы.


        1. Jef239
          06.05.2018 04:55

          Проброс Eth<->RS232 не для описанной в статье задачи
          Почему? Плиз, объясните причину.

          Т.е. железки разбросаны по «полю» а сервер ТБД стоит в стойке
          Тут удобней RS-422, ибо можно и на 2-3 километра кабель размотать. А у витой пары дальность — сотня метров. Ну разве что направленный wifi-канал ставить.


          1. kot23russia
            06.05.2018 09:54

            Почему не для этой задачи? все очень просто с одной стороны RS-232, с другой софт которому нужен COM-порт. Эмулировать COM програмно через Ethernet конечно можно, но получаем кучу сбоев по не понятным причинам, ибо Ethernet это канал без «гарантированной» доставки данных. А в условиях когда все рядом (т.е. грубо говоря кассовый комплекс магазина) лучше не устраивать себе лишних проблем.


          1. kot23russia
            06.05.2018 09:57

            На счет RS-422, чаще можно встретить RS-485 (с различными протоколами поверх), однако выбор конкретного канала выбирается исходя из «унификации» протокола на объекте, ну что бы обслуживать было проще, ну и потом делаются линии связи которые достают до нужных мест. Для особо «удаленных» либо ставят модемы либо тащат оптику, ну там как получится (зависит от местных связистов)


            1. Jef239
              06.05.2018 19:20

              RS-485 — это RS-422 + хитрая логика, кто в данный момент имеет право на передачу. Или опросная схема (мастер запрашивает, слейвы отвечают) или что-то вроде кольца с жетоном. Все это сложно реализуется в софте, поэтому RS-422 (то есть отдельная линия на устройство) намного проще для программера, хотя чуть сложнее для железячника (грозозащита на две линии данных вместо одной).

              Выбор каналов на объекте идет по разным критериям, но прежде всего мы исходим из экономии денег. То есть оборудование дешевое, а время программистов и железячников — дорогое.

              Ну как пример — шлюз на Волго-Балте. Всего 9 смарт-антенн, 8 на шлюзе + базовая. Антенны на шлюзе (до 300 метров) подключаются по витой паре (крепится к бетонному основанию шлюза). 8 проводов — это сдвоенное питание + RS-422. Переделка сводится к замене платы формирователя RS-232 из TTL на плату формирователя RS-422 с грозозащитой. Программных переделок ноль.

              Базовая антенна — 500 метров, и она сбоку. Кабель по земле вести — порвут. Ставить воздушку со столбами — затратно. Потому преобразователь RS-232 в TCP-server + направленная радиолиния на основе wifi.

              Серверный блок — обычный промышленный комп на DIN-рейку на Debian (попробуйте, купите комп с 8 портами RS-422). Поэтому все порты идут через TCP. Для 8 роверных антенн ставится 8-портовая MOXA (RS422 в TCP-Server) на DIN-рейку.

              Для контроля на период пусконаладки ставитяс дешевый USB-свисток с 4G. В итоге — все настраивается и контролируется удаленно. Не, я разок туда даже поехал на предварительные испытания. Но быстро понял, что из гостиницы в Вытегре я своё оборудование вижу лучше, чем находясь на шлюзе. Так неделю и просидел в гостинце. На окончательных испытаниях я из Питера вообще не выезжал. У меня на рабочем месте со средствами отладки явно лучше, чем на ноуте в поле.

              ибо Ethernet это канал без «гарантированной» доставки данных
              А что же у вас за устройство, что передает по ethernet без TCP и UDP? Все, известные мне конверторы, используют TCP, то есть с гарантированной доставкой. Некоторые могут и UDP, но этот режим только для локалки.

              Эмулировать COM програмно через Ethernet конечно можно, но получаем кучу сбоев по не понятным причинам,
              Ключевое слово, скорее всего — не понимание причин. Потому что у нас количество сбоев начинается от 1 сбойного байта в час и выправляется до промышленного стандарта — 1 сбойный байт в сутки. Для этого есть осциллограф и регулировка оконечных резисторов на линиях RS-422/RS-485. Ну и настройки на MOXA.

              А в условиях когда все рядом (т.е. грубо говоря кассовый комплекс магазина) лучше не устраивать себе лишних проблем.
              Дело в том, что Moxa 20 лет делает эти конверторы. И довела технологию до такого уровня, что их ETH конвертеры более беспроблемны, чем USB-COM. То есть зависающий пару раз в неделю USB-COM — это норма, а зависшая раз в месяц Moxa — это ЧП, надо разбираться с питанием, импульсными помехами, настройкой IP-Jam, версией прошивки и так далее.

              Собственно навели нас на Moxa ребята, занимающиеся телеметрией космических запусков. У них вообще все по RS-422 + Moxa для ввода в комп.

              Для особо «удаленных» либо ставят модемы либо тащат оптику
              Это годится лишь когда около датчика есть свое электропитание хорошего качества. А тащить в параллель ещё и линии питания — бредово. Лучше уж сразу — витую пару с RS-422 + питание.

              P.S. Пост получился довольно рекламным, но я не имею отношения к Moxa. Ну разве что 20 лет назад работал в одной из компаний «Ниеншанса», который сейчас является российским дистрибьютором Moxa.


      1. Jef239
        05.05.2018 00:49

        Вот, например, монтируемый прямо на плату Lantronix Xport, а вот 16портовых внешний Moxa NPort 5610-16. Между этими крайностями — вагон разных вариантов.

        Очень удобно, когда оборудование в одном месте, а ты отлаживаешься в другом. Вплоть до связи с соседним блоком (оба за Волгой) через сервер в Питере, Как сказал мой коллега: «А что ты можешь сделать на месте, чего не сможешь удаленно?». И я понял, что только разъемы покрепче воткнуть. Ну для этого и одного инженера хватит. :-)


        1. romanetz_omsk
          05.05.2018 07:30

          Осциллографом в линию потыкаться. Иногда это решает.


          1. Jef239
            05.05.2018 11:26

            С осциллографом лучше справится тот инженер, что на месте. я же программер, с осциллографом последний раз лет 40 назад игрался. На современных моделях — вряд ли сумею синхронизацию верно выставить.

            Но вы правы — иногда осциллограф незаменим при отладке. Как и вольтметр. Просто стараемся, чтобы все такие вещи были отлажены в офисе, а не на испытаниях.


        1. svavan Автор
          05.05.2018 11:34

          Я бы еще заклеил разъемы, если что-то можно выткнуть — это сделают.


      1. Javian
        05.05.2018 17:20

        В промышленности можно часто встретить изделия MOXA www.moxa.ru/shop/com_v_ethernet/standart/5000
        Например 8/16-портовые асинхронные серверы RS-232/422/485 в Ethernet


        1. svavan Автор
          05.05.2018 17:22

          Да, это один из самых распространенных брендов, сталкивался 100 лет назад, впечатления положительные потому что весели себе синие коробочки, весело мигали диодами и никто не знал что это и зачем потому что оно не ломалось)


    1. antonn
      04.05.2018 14:00

      Пытались перевести POS в «облако» (RDS, если без маркетинга) через такие штуки: ФРы вроде не захотели нормально работать, с остальным даже пробовать не стали (сканеры, дисплеи).


      1. svavan Автор
        04.05.2018 14:06

        Вот я писал выше про особенное устройство, это как раз фискальный регистратор не буду называть модель, дибильнейшее устройство.


        1. alex_kag
          04.05.2018 14:09

          тут увы, хотя, я не понимаю, что там можно такого наворотить, что оно не заведется… мы же не про интернет канал или gsm, а про локальную сеть…


          1. svavan Автор
            04.05.2018 14:17

            Ой, это та еще поделка)))


          1. antonn
            04.05.2018 14:24

            И тем не менее проблема была, а требовалась стабильная работа (в случае с ФР — стабильнейшая), пауза на кассе в гипермаркете моментально собирает очереди. ФРы какие-то старые еще, типа сп101фр-к (или штрихи, не помню уже). И тогда еще были пинпады с подключением так же к COM (вот сейчас классно, массовые ингенико и верифоны — сетевые)


  1. ktod
    04.05.2018 14:12

    Удивительно мне читать про проблемы с usb. Именно к малине 4 rs232 не подключал, но, по опыту, единственная проблема при подключении большого количества устройств к малине, это надежное питание. Если же подключать через хаб со своим питанием, она вообще не стоит.

    По поводу путаницы с именами: имена через udev нормально назначаются.
    Уже не помню точно, как именно я решал эту задачу, больше 5 лет прошло. Возможно, назначал по серийному номеру устройств или по номеру шины. Во всяком случае, 4 девайса нормально подключал к одному порту usb древнего ноута и рекламаций от заказчика не имел.


  1. romanetz_omsk
    04.05.2018 14:26

    Но почему HID, а не CDC?
    По нулевой кт в девайсе отличия небольшие, а в системе появится ttyUSB или COM-порт обычный. Тогда вообще софт на ПК дорабатывать не надо


    1. svavan Автор
      04.05.2018 14:27

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


    1. dernuss
      04.05.2018 14:32
      +1

      я думаю если бы надо было CDC, проще купить было бы чипы silabs или ftdi. И не надо было бы переделывать софт.
      Но есть один недостаток, который мне ужасно не нравится, если вытащить чип когда порт открыт.

      А если делать HID, это заведомо стабильнее, можно спокойно коммутировать usb порты. Не нужно драйверов. Но надо пилить ПО


      1. svavan Автор
        04.05.2018 14:35

        И что не менее важно в моем случае — был хорошо документированный пример)


      1. Andy_Big
        04.05.2018 15:15
        +1

        Не нужно драйверов

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


      1. bugdesigner
        05.05.2018 08:49

        С SiLabs был у меня неприятный момент — при интенсивном обмене иногда терялись данные. Возможно, чипы были "левые из Китая". Пришлось заменить на FTDI.


  1. neitri
    04.05.2018 15:27

    Можно ли совместить HID и CDC? Так можно и I2C и SPI вывести. Надо бы обдумать на досуге.
    Ссылка на статью битая.


    1. Andy_Big
      04.05.2018 15:28

      Была битая, но автор ее уже исправил, обновите страницу :)


    1. svavan Автор
      04.05.2018 15:34

      Да, ссылки поправил, подсказали хорошие люди. Про совместить не совсем понял. Думаю возможно что у одного физического устройства будет два виртуальных HID и CDC, но камень уже наверно не справится. Вывести I2C и SPI конечно можно, с некоторыми ограничениями разумеется.


      1. holomen
        05.05.2018 00:42

        103с8 gрекрасно справляется с составным устройством HID(kbd)+HID(mouse)+MSC и еще запас есть.


        1. svavan Автор
          05.05.2018 11:36

          Замечательно, не слышал по этому поводу опытного мнения.


  1. en1gma
    04.05.2018 15:52

    уже упомянули ftdi, но не тот. есть прекрасный ft4232h — usb четыре 8-битных порта (которые через драйвер конфигурируются в тe же full-uart). китайцы такое ещё не подделывают. да вроде кроме ft232r ничего ftdiшного не подделывают. у silicon labs тоже есть usb-multiuart. и у тех и у других драйвера есть под основные системы, включая анроид.

    кроме того, старое оборудование очень и очень часто требует полного rs232 (который как бы ещё с 1988 года tia-232-f), ну или хотя бы rts и cts (для аппаратного управления потоком), а не только rtg. в stm32f1x, емнип, только один такой uart


    1. svavan Автор
      04.05.2018 18:49

      Вот про полный RS232 вы правильно заметили, но те устройства что мне попадались можно было заставить работать по трем проводам.


    1. bugdesigner
      05.05.2018 08:42

      FTDI лучше, но значительно дороже. Хотя учитывая головную больс драйверами под Win, я предпочиёл бы FTDI.


  1. oam2oam
    04.05.2018 18:41
    +2

    Я очень давно использую для аналогичных целей простую и дешевую систему на ATXMEGA32A4U. на плате конвертор питания lm1117 четыре ограничительнех резистра на входных цепях и два конденсатора на питании… и все! С программной точки зрения при подключании по usb появляется 4 cdc порта (ну я добавляю еще одно hid устройство, через которое рулю типов портов и другими ништяками..), а включение бита управления инвертором на порту позволяет реализовать и rs232 и uart (смотря что нужнее) на каждом из 4 портов. Обычно я еще добавляю dcdc для генерации напряжения до 15 вольт (для этого нужет один транзистор, диод и индуктивность), одновременно adc (на нем я реализую осциллограф на 1 Мгц) и генератор сигнала произвольной формы (ну это dac, даже два) — это по деталям бесплатно… хотел добавить i2c spi, но… нет времени на программирование…


    1. svavan Автор
      04.05.2018 18:47

      Прикольно, надо погуглить этого зверя.


    1. dernuss
      05.05.2018 06:25

      не такая уж она и дешёвая, немного дороже даже чем stm32f103 ))
      но для этих целей подходит даже лучше чем stm32f103 за счет 4 usart


      1. gopotyr
        05.05.2018 11:37

        3 UART


  1. romanetz_omsk
    05.05.2018 07:29

    Скорее, за счёт 32-х конечных точек в USB.


  1. gosha-z
    05.05.2018 09:09

    А я бы подумал в сторону 2xMAX14830+MSP430F5529 — 8 портов в небольшом формфакторе.


    1. dernuss
      05.05.2018 10:38

      не очень понятно зачем в месте с 2xMAX14830 использовать дорогой MSP430F5529.

      П.С. Если уж нужно такое число портов, я бы сделал на FPGA дешёвой + какой нибудь самый дешёвый МК с USB (или ftdi с SPI)


      1. gosha-z
        05.05.2018 11:07

        580р. за МК с 8 USB EndPoints в железе — это дорого? При том, что MAX14830 стоит 1813р. Это первое. Второе — в варианте с 5529 вы получаете 8 штук CDC — никаких сторонних или самописных драйверов, включаешь и наслаждаешься. То же самое касается и ПЛИС — не бывает дешевых ПЛИС с USB-трансиверами в пузе. Плюс код отлаживать сложнее, чем прошивку для MSP.


        1. dernuss
          05.05.2018 11:15

          Может я что то не понимаю, но вполне ведь можно обойтись одной конечной точкой?
          Про плис, я имел вводу FPGA как мост допустим SPI — UART, а USB транссивер в дешёвом микроконтроллере с одной конечной точкой.

          П.С. Да, цену MAX14830 я не посмотрел, каюсь. Теперь MSP430F5529 не кажется таким уж дорогим


          1. gosha-z
            05.05.2018 11:24

            И ваша ПЛИСина с мостом будет стоить дешевле 1813р. включая разработку кода и отладку? При том, что софтинка в 5529 тупо в ISR перекладывает байты из USB в USCI и обратно.
            Насчет количества EP теперь уже не понимаю я — разве количество EP != количеству портов?


            1. dernuss
              05.05.2018 11:32

              Конечно дешевле, если партия большая. У вас ведь 2xMAX14830 + 1xMSP430F5529 это около 4000р. За такие деньги можно тупо ftdi 8 штук купить и вообще ни чего не программировать.

              Плис 1000р (наверное можно и дешевле) + тот же stm32 100р

              Насчет количества EP теперь уже не понимаю я — разве количество EP != количеству портов?

              А как по вашему автор статьи сделал?


              1. gosha-z
                05.05.2018 11:38

                1. 8xftdi потянут за собой еще один-два USB-хаба с отдельным питанием и кучу проводов — мотня за кассой будет знатная, как следствие — снижение дуракоустойчивости и надежности.
                2. Автор делал HID, а не CDC, на что ему уже указали.


                1. dernuss
                  05.05.2018 11:46

                  1. 8xftdi потянут за собой еще один-два USB-хаба с отдельным питанием и кучу проводов — мотня за кассой будет знатная, как следствие — снижение дуракоустойчивости и надежности.

                  Ну не 8, а 4 или меньше, 2х канальные точно есть. Больше не в курсе. Если делать свою плату, как в вашем случае, то выйдет также по строимости железа. Но софта ноль.

                  2. Автор делал HID, а не CDC, на что ему уже указали.

                  верно, но такова его воля. CDC глючит жутко если USB порт выдернуть при открытом виртуальном порте.

                  П.С. Я точно не уверен, но вроде в stm32f103 8 конечных точек. Если это так, то чип MSP430F5529 явно дороговат


            1. holomen
              05.05.2018 23:05

              Насчет количества EP теперь уже не понимаю я — разве количество EP != количеству портов?

              Нет, конечно. Есть один «особенноый» EP — нулевой, плюс на каждое устройство нужно по EP и на вход и на выход, плюс на устройство бывает нужен управляющий EP. А может быть что на несколько устройств нужно только две EP, например в HID.


  1. tehsmart
    05.05.2018 11:38

    Я очень извиняюсь, но в статье перечислены недостатки всех решений озвученной проблемы, с последующим выводом, что необходимо создать свое решение, которое в той или иной мере будет сочетать их все… Хотя проблема выеденного яйца не стоит. По долгу службы необходимо иметь на рабочих станциях несколько аппаратных COM портов (да да, различного рода FTDI и Profilic переходники не подходят). Самым простым решением была установка платы PCI-COM, наподобие такой…
    image


    1. svavan Автор
      05.05.2018 11:40

      Мне сложно это установить на Raspberry Pi 3 или Android медиаприставку. Но для ПК это лучшее решение если нету спрятанного порта на матери.


      1. gosha-z
        05.05.2018 11:54

        То же самое — MAX3109 или MAX14830. Вроде как даже /dev/tty драйвера под них есть.


  1. avf1906
    05.05.2018 12:02
    +1

    Это все замечательно, но как решается вопрос софта? точнее, если есть программа которая общается со своей железкой по COM-порту, то как ей сказать, что надо общаться через HID? Т.е. написать драйвер, перенаправляющий поток с COM-порта в HID и обратно


    1. svavan Автор
      05.05.2018 12:25

      Драйвер это громко сказано, но да, примерно так. Хотя смысл то как раз уйти от СОМ портов вообще. Если «есть программа которая общается со своей железкой по COM-порту» ставить промежуток из STM32 странно, по моему проще пользоваться как задумано.


      1. avf1906
        05.05.2018 12:40

        так весь смысл статьи прикрутить старое оборудование, которое подразумевает соответствующий софт. В общем надеялся как раз прочитать про подобный драйвер


        1. svavan Автор
          05.05.2018 12:46

          Мы прикручиваем старое оборудование к совершенно другому софту, железу и даже операционке, смысл апгрейда как раз в том чтобы старый софт выкинуть, вместе с эвм)) Для того что хотите вы, нужно взять мой проект с примерами и добавить туда работу с виртуальными ком портами, далее просто перенаправлять данные из HID в них и наоборот. Все, профит.


          1. avf1906
            05.05.2018 13:31

            ну так что делать я понимаю, КАК это сделать, вот в чем вопрос :) это естественно не критика статьи, просто мне чаще как раз встречается такая проблема


            1. svavan Автор
              05.05.2018 13:49

              Критика это хорошо, особенно конструктивная, посмотрите выше, я написал очень посредственную статью в которой описывается не такое уж и идеальное решение. Она притягивает людей которые в теме, они пишут свое видение и варианты решения в итоге все вместе становится похоже на вполне себе нормальный tutorial для тех кто столкнется с похожими проблемами. Мне кажется это очень положительно.


              1. avf1906
                05.05.2018 14:11
                +1

                Статья на самом деле интересная, мне например оказалась полезна информация HighLevel, не знал о таких нюансах. Если будете делать несколько таких устройств, посмотрите заказ плат jlcpcb, seedstudio (10 плат за 2$ + доставка 8-12$), будет гораздо симпатичнее, надежнее и не исключено, что дешевле. Такая плата неспешно разводится за 3 вечера.


                1. svavan Автор
                  05.05.2018 14:12

                  Спасибо!


            1. dernuss
              05.05.2018 13:50

              Тоже не большая проблема, cdc примеров полным полно


              1. avf1906
                05.05.2018 14:03

                Про cdc знаю, с ним на самом деле есть ряд проблем, которые подход com-over-hid мог бы решить. Например, usb имеет свойство отваливаться. Как результат отваливается com-порт, который при этом держит открытым софт. Когда usb-cdc снова подключается, порт оказывается занят программой, соответственно коллизия и ничего не работает. Понятно что это проблема софта, но с аппаратными портами такой коллизии не возникало и ее естественно никто не обрабатывает. В случае over-hid, все проблемы восстановления связи лежат на драйвере, и программа даже не знает что usb устройство терялось, ну не дошла часть пакетов, это как раз как правило нормально обрабатывается.


                1. dernuss
                  05.05.2018 14:06

                  Знаю я эти проблемы. Я думаю что всё решит время. И от CDC и com порта уйдут через пару тройку лет.


  1. svavan Автор
    05.05.2018 12:24

    Del