Как подключить кучу старого RS232 оборудования по USB без регистрации и sms (STM32 + USB-HID)

  • Tutorial

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


Как обычно я предлагаю заняться странным — попробовать подключить несколько старых 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 и сохранить желание разбираться дальше.
Поделиться публикацией
Похожие публикации
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 176
  • +3
    А почему нельзя было сделать на чипе FTDI 232? Они дороже?
    • +1
      Вы знаете как будет выглядеть в системе несколько FTDI 232 при условии что вы их сможете гарантированно купить оригинальные?
      • 0
        насчет гарантированно оригинальных не отвечу, но в тех что я пользовал усе ид каждого чипа можно было произвольное задать, соответственно и различить их не составляет проблемы.
        • 0
          Кстати да, рассматривали и такой вариант, задавать уникальные ИД. Но особенность нашей местности сейчас в том что сложно достать оригинальные микросхемы да и вообще что либо. Далее пришлось бы организационно очень жёстко следить чтобы втыкали все именно туда куда надо. Плюс есть у нас очень «особенное» оборудование которое очень особенно работает и очень неплохо иметь возможность управлять процессом преобразования RS232 в USB на низком уровне.
          • 0
            Я на не оригинальных ИД тоже менял, все хорошо работало, пока свежие дрова не поставили… Свежие дрова все ИД выставляют в нули, и устройства перестает работать =) С помощью некоторых телодвижений ИД возвращаются на место, а вот запретить обновлять дрова бывает сложнее!
            • 0
              Вот проблема с неоригинальными чипами и свежими дровами имеет место, да.
        • +1

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

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

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

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

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

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

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

            С RS'ом-то проблемы решаемые. А вот я как-то столкнулся с не таким уж и несвежим программатором с LPT — вот это был абзац. На новых компах такого порта как класса нет. С переходником USB-LPT он не заработал. С PCI платой расширения он тоже не заработал — оказывается плата занималась эмуляцией LPT и что-то до конца не эмулировала, не помню уже точно, но софт отказывался видеть программатор. В результате нашёл старый и чуть ли не единственный несписанный комп с Windows XP SP2, на котором себя отлично чувствует и софт к этому программатору. Теперь на складе лежат две жётско скреплённые скотчем коробки с надписью «Программатор!!! Выбрасывать категорически запрещено!!!» )))
            • 0
              Мы довольно успешно использовали 1-2 переходника, но потом их число грозило сильно возрасти, а имея уже опыт по ликвидации глюков это начало пугать. Разумеется когда он один это вполне себе вариант. Хотя я бы настаивал все равно не на переходнике, а на настоящем RS232, одну штуку чаще всего можно найти если провести ревизию внутренних разъемов конкретной материнки.
              • 0
                Использую в лабораторной установке на нынешний момент 2 ардуины + 3 разных прибора с USB-RS232 переходниками. Итого 5 USB->COM переходников.
                Все общаются с компьютером через VISA протокол. В принципе, если бы не тупой LabView, периодически при старте программ не видящий соединение (если неправильно закрыть VISA сессию), то я бы не сказал, что есть какие-то глюки. При рестарте всего Labview всё сразу находится и работает без проблем.
                К этому же компьютеру подключены еще 6 разных приборов по USB.
                Слабо представляю, какие глюки могут обнаружится. Хотя скорости обмена данными у нас не такие высокие, возможно при повышении вылезает что-то?
                • 0
                  Разное бывает, у вас одна установка? У нас много комплексов, далеко не все монтируются адекватными специалистами и с обратной связью плохо. На практике сталкивался с не корректной установкой драйверов для pl2303 и ftdi, с проблемой именования ком портов в системе, с подделками pl2303 и ftdi, с не соответствием логических уровней, с помехами на линию от мощного оборудования, с тем что некоторый софт тупо не видит ком порты созданные некоторыми переходниками, это на вскидку.
                  • 0
                    Ну в принципе, почти всё, что вы описали, я видел :)
                    И драйвера, и именование (на одном компьютере есть аж 15 непонятно под что зарезервированных СОМ-ов). Проблему с драйверами (и с подделками) обычно решаю поиском по VID PID, хотя у меня это разовая непоточная работа — раз в полгода подключить какой-то прибор на другой комп. Хотя при возникновении глюков это напрягает… Проще было бы иметь стандартный пакет установки и не мучать себе мозг.
                    • +1
                      Помехи- это да, «веселые» проблемы! Как-то несколько дней отлавливал баги в оборудовании, весы отключались. В моем присутствии все работает, когда уезжаю- глюки и постоянные пропадания связи. Все профилактические меры принял, все соединения проверил, кабели заменил, все заземлил, разъемы зафиксировал, блоки питания новые — все равно в мое отсутствие глючит. На третий день приехал, сел в стороне и смотрел, что делают операторы. Оказалось, что через некоторое время приходит упаковщик и зашивает готовую продукцию в мешки. А делает он это монструозным агрегатом с приводом на коллекторном двигателе, который при работе не хило искрит щетками и наводит на линии связи помеху амплитудой около 10В, даже сквозь экраны…
                      • 0
                        Вот она практика))) Пока космические корабли бороздят в теории…, а на практике приходит мужик и все, сушите весла)))
                      • 0
                        И ни одна из этих проблем не специфична для USB-COM, с железными многопортовками на PCI — проблемы те же.

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

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

                        Но это все общие проблемы RS32, а не проблемы переходников.
                        • 0
                          Иногда софт настолько непослушный что не видит портов вообще никак. В этом случае я использовал виртуальную перемычку с реального компорта на виртуальный, который почему-то программа видит. Вообще тут бывает много бубнов разного размера и цвета.
                          • 0
                            Уже писал — смените номер порта в диспетчере устройств (вкладка Settings в свойствах, кнопка Advanced) на 1-4. Порты больше 4 надо открывать как //./COM5, а это не любая программа умеет.
                          • 0
                            С этими корпусными соединениями тоже не все так просто, меры надо применять комплексно. Как-то в одной локалке (еще на коаксиале) были разные земли в разных местах здания. Соединили две аудитории — сгорела оплетка кабеля, «заземленная» с обоих концов. При этом сами сетевухи выжили, имея гальванически развязанный выход (через трансформатор).
                            В итоге решили, что прежде чем соединять сети, надо таки как следует уравнивать потенциалы земель нормальной шиной.
                            • 0
                              Это могло быть просто из-за отсутствия заземления. Для балансировки по фазам другая аудитория могла быть запитана от другой фазы, что даёт весёлые 190В разницы на корпусах незаземленных компов, подключённых к разным фазам. Ситуацию усугубляет объединение корпусов через оплетку коаксиала.
                              • 0
                                Не, заземление было, но у каждой части здания отдельное, «звездой». Но видимо, хреновое (и это электроэнергетический факультет!).

                          • 0
                            Есть еще CH340, их вроде не подделывают, т.к. они и так китайские.
                          • 0
                            В идентичном случае я бы разумеется поступил как вы.
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • 0
                                Скорее всего что-то с логическими уровнями. Самый безпроблемный на моей практике был CH340, но это ведь лютый китай))) cp2102 тоже ничего, но дороже.
                                • 0
                                  По своему опыту: для целей настройки одной линии RS485 (простые охранка/пожарка, часто с ними работаю) любые преобразователи на CH340 выглядят просто великолепно.
                                  Т.к. подключается только 1 линия и к 1 конкретному компьютеру, то количество глюков минимально, драйвера стоит один раз и навсегда. Единственная потенциальная проблема — когда реально сложная/загаженная линия RS, тогда потенциально сильно падает качество связи. Но это всё-таки отдельная проблема, которую надо устранять независимо от используемого преобразователя.
                          • +1
                            Да есть они на современных платах как класс не на всех и не часто но есть, только сзади не выведен, а как гребенка на плате вот например GIGABYTE Z370M DS3H
                            • 0
                              Я знаю, что были, а теперь оказывается, что некоторые производители это и не выпиливают. Но у нас парк компов обновлялся несколько лет назад и ни визуально, ни в мануале на матплаты я ничего не нашёл. Ну вот так вот мне повезло, что на всех трёх моделях материнок ничего не было. Материнки асус, кстати. Я уже прикидывал купить на авито старую платформу и на столе собрать этакой рассыпухой временный комп, прошить два десятка микросхем и забыть обо всём этом)
                              • 0
                                Вполне себе вариант, на новых матерях все чаще уже нету RS232.
                            • 0
                              На новых компах такого порта как класса нет.

                              как раз наоборот — на новых компах и есть и com и lpt. только они не выводятся не заднюю панель. как пример Z370 HD3P.
                              • 0
                                Я думаю это решить очень просто — у кого есть тот пусть использует и не парится.
                                • 0
                                  Где есть, а где нет. Я изучил три разные модели материнок от асусов — не было ни на одной. Других компов на работе просто не было. В бухгалтерии возможно есть, но с теми компами я лишний раз связываться и не буду. Неповезло мне короче (
                                • 0
                                  ИМХО есть смысл к подобному оборудованию взять нечто типа такого: INTEL D425KT Atom D425, например. Тут вам и параллельный, и последовательный порты как раз есть. И по тормознутости как раз для ХР в самый раз :-). Получается совсем небольшая коробка.
                                  Что поделать, порой нужна и шина ISA, как вот на производстве военном недавно видел, в своё время некому и некогда было задуматься перевести тестовые платы на USB хотя бы… Так вот и работают древние компы с чуть ли уже не рассыхающимися от старости матплатами на софте под ХР…
                                  • 0
                                    С ISA зато работать проще. Это как UART — всегда на коленке из любого чипа по нему можно связаться, накодив на ходу интерфейс если его нет под рукой (хотя у любого разрабочтка с приличным стажем он наверняка давно есть самописный, отлаженный, проверенный и доверие к нему безграничное). А для PCI и USB уже какие-то мосты нужны.
                                    Кстати, древние компы, поживучее современных. Особенно, учитывая условиях их работы. Технологии там не такие тонкие, делали всё подубовее вот оно и работает. На материнках достаточно вовремя электролиты заменить и они и дальше пашут вполне себе.
                                    • 0
                                      а мне нравится pcie и usb, контактов мало, скорость высокая.
                                      с usb конечно перемудрили сильно, но всё же… уже давно есть в дешёвых микроконтроллерах. Честно говоря ни когда не нравились разъемы COM и LPT, даже когда они были единственным средством коммуникации, уж очень огромные
                                      • 0
                                        Со стороны МК — это да. Но я всё же больше с ПЛИСами вожусь и стремлюсь лишний раз IP ядра не использовать. Понятно, что процессор сам писать не будешь — проще его вставить как IP Core, а если есть процессор — там и весь букет всяких причендалов можно подключить, превратив его в микроконтроллер. Но если плата какой-нибудь «чистой» ЦОС, где процессор просто нафиг не нужен, то такие вещи как, например, I2C я аппаратно сам кодил. Но это — что разумно ещё самому сделать и тебе на это дадут время: сделать-то порой ума много не надо, а вот отлаживать… USB, конечно, смысла нет поднимать самому — чрезмерно времязатратно, быстрее и дешевле использовать внешнее решение.
                                        • +1
                                          i2c, uart, spi на vhdl реализовать просто, так же как и на си можно написать soft_i2c, soft_uart, soft_spi. А я наоборот стремлюсь использовать ядра, часто применял ядра с opencores.org и ни чего плохого в этом не вижу, наоборот сокращает время разработки. А уж для ЦОС применить фильтр как само собой разумеющиеся, не самому же его писать…
                                          • +1
                                            Просто современные ядра порой немало ресурсов жрут. А мне их пожизни не хватает)
                                  • 0
                                    Интересно, этот самый программатор не делал некультурные попытки обращения к LPT-порту напрямую, в обход виндового драйвера? Может стоило попробовать запустить этот хитрый софт в виртуалке, которой просто отдать реальный LPT?
                                    • 0
                                      Пробовал — не помогало)
                                      • 0
                                        проще этот программатор заменить ;)
                                        сейчас вроде все есть)
                                        • 0
                                          Да фиг его знает. Это универсальный программатор для прошивания fusy PAL (типа а-ля ASIC получается) с переходником под эти самые PAL. Переходник я помню сколько-то десятков тысяч стоит (емнип, кусочек пластика с резисторами и одной микросхемкой). Сам программатор вполне может стоить под 100к. Экономически может целесообразнее заставить инженера прыгать около него практически с неделю. Тем более на выходе получось повторяемое решение для его использования… главное компьютер не выбрасывать ;) Но я согласен — заменить его было бы проще! )))
                                          • 0
                                            чем только людям не приходится заниматься)
                                  • 0
                                    По поводу переподключения USB. Я делаю похожий проект, для начала взял платку BTE14-07, почти такая же как и у Вас, но на определение подключения по USB есть ключ. Я организовал работу эмулятора RS232, а не HID, и у меня переподключение работает. Попробуйте глянуть схему этой платки, может быть чем нибудь окажется полезна.
                                    • 0
                                      Да, спасибо! На самом деле варианты есть, возможно я даже и наталкивался на вашу плату, но на этой плате сделана постоянная подтяжка к питанию, поэтому городил транзистор.
                                      • 0

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

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

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

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

                                                Верно

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

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

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

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

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

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

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

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

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


                                                                      В функции Set_System() производится настройка пина подтяжки линии D+ к питанию для программного подключения/отключения устройства от ПК (в нашей плате не используется), настраивается прерывание и инициализируются светодиоды и кнопки для демонстрационного проекта.
                                                                      • 0
                                                                        Да да, я уже проверил, щас исправлю. Спасибо!
                                                                        • +1
                                                                          тут ещё вот есть bootloader для этого камня, вдруг пригодится
                                                                          github.com/denruss/stm32_MyDfu
                                                                          • 0
                                                                            Спасибо! Как обычно у меня получается — комментарии к статье несут не меньше пользы чем статья. Вспыхивают диспуты и рождается истина)
                                                          • 0

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

                                                        • +1
                                                          Не связано это с нагрузочной способностью, проблема в реализации USB в 103-й серии. Проблема была исправлена в новых сериях, поэтому лучше взять stm32f072 — с этим чипом подтяжка D- не требуется, всё реализовано в чипе. При этом stm32f072c8 pin-to-pin совместима c stm32f103c8, правда UART-a у неё всего 2.
                                                          • 0
                                                            Удачное совпадение, я случайно заказал stm32f072 на те платы которые спалил, теперь получается что пригодится)
                                                            • 0
                                                              а в документации написано что у всех STM32F072 4 usart
                                                              • 0
                                                                Да, всё правильно написано, но если в 48-ногом корпусе включить USB получится использовать только 2 UART с hardware flow control. Может для некоторых приложений это и не нужно, но мы ведь говорим о USB-RS232.
                                                                • 0
                                                                  я думал мы говорим о реализации которую предлагает автор, а у него не используется аппаратный flow control.

                                                                  П.С. в целом мне stm32f072 нравится больше за счет ненадобности кварца для USB и за счет подтяжки внутри чипа. К тому же он дешевле :)
                                                                  • 0
                                                                    Вы правы. Если пожертвовать rts/cts, можно все 4 использовать. Я просто так не стал бы делать, поэтому и написал про 2.
                                                                    • 0
                                                                      к тому же, у STM32F103 с USB можно использовать только 2 uart с flow control.
                                                                      Так что stm32f072 здесь однозначно лучше будет, ну или там в низу товарищ использует ATXMEGA32A4U, но я этот чип не знаю) к тому же он дороже чем stm32f072
                                                                      • 0
                                                                        Да, Вы правы. Что касается xmega — тут уж столько холиваров пронеслось насчёт AVR… ARM микроконтроллеры уделали 8-битники по цене, особенно на опте. Мы покупаем stm32f051c8 меньше $1 за штуку, партии правда > 1k
                                                  • 0

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

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

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

                                                        • 0
                                                          Мне тоже так кажется.
                                              • +1

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

                                                • 0
                                                  А можно ссылку, это что вообще? Переходник с RS232 на Ethernet?
                                                  • 0
                                                    Такой вариант рассматривался и он очень неплох — сделать каждое устройство сетевым узлом. Но на практике требует сетевой инфраструктуры, ее администрирования хотя бы минимального и самое главное — значительно менять структуру софта.
                                                    • 0
                                                      А почему надо менять настройку софта??? Если взять к примеру nport 51хх серию или аналог — то делаем следующее — подключаем одним концом в локалку, вторым к прибору, а на компе просто создаем ком порты по количеству подключенных портов. и все. Программа как открывала ком порт, так и продолжает открывать именно ком порт.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                        • 0
                                                          к счастью. мне такое не встречалось… :) у меня так в основном теплосчетчики подключены.
                                                          • 0
                                                            Главное не в коем случае не пробрасывайте СОМ порты по GPRS.
                                                            • +1
                                                              Коллеги пробрасывали по Wi-Fi через лифтовую шахту(!), видимо, дальность хотели увеличить =) Лифт, останавливающийся между приемником и передатчиком, вызывал помехи и, через некоторое время, обрыв связи. Как следствие, приходилось идти наверх и перезагружать контроллер
                                                              • +1
                                                                Они бы еще канал на микрофонах и пищалках в канализации сделали…
                                                                • 0
                                                                  От затейники)))
                                                      • 0
                                                        ссылку на всякий случай кидать не буду, а так — загуглить можно — nport5130 (это то что последнее подключал но у него на выходе rs422/485), и куча других аналогов, у меня под боком есть более менее дешевое решение — микрон (1eth / 4 rs485) (построены на базе модулей tibbo). Только при покупке надо уточнять особенности софта (какой-то модуль подрядчики поставили, так то еще чудо — виртуальные порты работают ТОЛЬКО при запущенной программе.
                                                        • 0
                                                          Как написал комментатор ниже, действительно не все можно пробросить по сети. Я наступал на эти грабли.
                                                        • 0
                                                          Проброс Eth<->RS232 не для описанной в статье задачи. Данный проброс используется когда выполняется работа с внешними устройствами RS-232 а компьютер спрятан в недрах HYPER-V. Например весовое оборудование, ну то которое большое, например взвешивает вагоны, ну и много железок в промышленности которые работают через RS-232 а нужны они для технологического учета движения мат. потоков. Т.е. железки разбросаны по «полю» а сервер ТБД стоит в стойке
                                                          • 0
                                                            Да, вы правы, я тоже взвешивал вагоны) Вот там реально на замену оборудования мало кто решится, да и зачем. И есть еще одна сфера с которой я столкнулся где такой проброс уместен и иногда даже это единственное решение — это в SCADA сфере, там иногда нету альтернативы, спец ПО которое умеет только СОМ порты и ему плевать что у вас по какой-то причине объекты разнесены. Выход или пробрасывать или писать софт заново изучая протоколы описание которых давно съели крысы.
                                                            • 0
                                                              Проброс Eth<->RS232 не для описанной в статье задачи
                                                              Почему? Плиз, объясните причину.

                                                              Т.е. железки разбросаны по «полю» а сервер ТБД стоит в стойке
                                                              Тут удобней RS-422, ибо можно и на 2-3 километра кабель размотать. А у витой пары дальность — сотня метров. Ну разве что направленный wifi-канал ставить.
                                                              • 0
                                                                Почему не для этой задачи? все очень просто с одной стороны RS-232, с другой софт которому нужен COM-порт. Эмулировать COM програмно через Ethernet конечно можно, но получаем кучу сбоев по не понятным причинам, ибо Ethernet это канал без «гарантированной» доставки данных. А в условиях когда все рядом (т.е. грубо говоря кассовый комплекс магазина) лучше не устраивать себе лишних проблем.
                                                                • 0
                                                                  На счет RS-422, чаще можно встретить RS-485 (с различными протоколами поверх), однако выбор конкретного канала выбирается исходя из «унификации» протокола на объекте, ну что бы обслуживать было проще, ну и потом делаются линии связи которые достают до нужных мест. Для особо «удаленных» либо ставят модемы либо тащат оптику, ну там как получится (зависит от местных связистов)
                                                                  • +1
                                                                    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
                                                                      Может, логика и хитрая, но я уже не помню, когда последний раз встречался с 422. А с 485 — если не каждый день, то через день. Описанная проблема задержек со шлюзами таки имеет место быть. Например, в WinCC драйвер ModBus весьма убогий и проблемы начинаются уже с 3-4 устройств на одном шлюзе.
                                                                      А угадайка с полярностью 485 меня задрала настолько, что я взял клеммник от колонки, вот такой:
                                                                      image
                                                                      припаял к нему два провода и прикрутил это к преобразователю USB-485.
                                                              • 0
                                                                Вот, например, монтируемый прямо на плату Lantronix Xport, а вот 16портовых внешний Moxa NPort 5610-16. Между этими крайностями — вагон разных вариантов.

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

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

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

                                                                    Но вы правы — иногда осциллограф незаменим при отладке. Как и вольтметр. Просто стараемся, чтобы все такие вещи были отлажены в офисе, а не на испытаниях.
                                                                  • 0
                                                                    Я бы еще заклеил разъемы, если что-то можно выткнуть — это сделают.
                                                                    • 0
                                                                      Что-что… осмотреть всё своими глазами и ощупать своими руками. Лучше один раз увидеть, чем сто раз услышать. Не раз встречал такие проблемы, когда даже в голову не придёт, что же догадались сотворить на монтаже. И то, не с первого взгляда замечаешь. Сначала смотришь — вроде, всё в порядке. А вот если приглядеться…

                                                                      О, есть ещё один вариант. Завалить всю систему и обойтись без немедленных тяжких телесных. На месте убегать сложнее будет.
                                                                      • 0
                                                                        Угу, видели как-то раз такое: три GPS-антенны смонтированы под металлической марсовой площадкой.

                                                                        Но это когда монтаж заказчиков. А когда монтирует коллега — он это сделает качественней меня, криворукого.
                                                                        • 0
                                                                          Я тоже не раз встречал такое, что мне бы самому и в голову не пришло. не увидел бы своими глазами — долго бы ещё разбирался…

                                                                          Монтировать самому необязательно. Достаточно присутствовать лично и направлять.
                                                                          • 0
                                                                            Ну я не считаю, что программист должен «направлять» электронщика или сисадмина из своей же фирмы. Ну как-то они пограмотней меня в монтаже будут. А случайные ляпы проще заметить со стороны кода, у меня для этого достаточно отладочного вывода добавлено.
                                                                            • 0
                                                                              Я тоже так не считаю, но регулярно вынужден…
                                                                              Я занимаюсь автоматикой и, поэтому, приходится владеть темой от головы до *опы. Основная моя задача — писать программы для контроллеров, но приходится брать в руки отвёртку. И «направлять» — это не совсем подходящее слово. Однажды у нас были какие-то странные сбои в работе ModBus по RS-485. При внимательном осмотре выяснилось, что доблестные электрики затащили витую пару в электрический шкаф, и содрали с него кожуру вместе с экраном сразу на входе в шкаф. А дальше эта пара шла в обнимку с силовым кабелем, по которому питался мощный мотор. Наблюдение показало, что в 99% случаев связь отваливется при пуске/отключении этого мотора. Пришлось приглашать подрядчика, который это наделал, и, как вы выразились, «направлять» :)
                                                                              И это не что-то из ряда вон, а вполне себе будни.
                                                                              • 0
                                                                                Отличие в том, что подрядчики — это внешняя организация. А я про коллег из своей же фирмы. Все-таки в монтаже скорее накосячит программист (то есть я сам), чем коллега-электронщик или коллега-сисадмин.
                                                                                • 0
                                                                                  Так и бывает, если работает криво то ИТ-шники плохо программы программировали и виноваты.
                                                                                  • 0
                                                                                    Свои тоже косячат :)
                                                                                    • 0
                                                                                      Это мне заметней из диагностики в коде, чем осмотром кабелей на месте.
                                                                      • 0
                                                                        В промышленности можно часто встретить изделия MOXA www.moxa.ru/shop/com_v_ethernet/standart/5000
                                                                        Например 8/16-портовые асинхронные серверы RS-232/422/485 в Ethernet
                                                                        • 0
                                                                          Да, это один из самых распространенных брендов, сталкивался 100 лет назад, впечатления положительные потому что весели себе синие коробочки, весело мигали диодами и никто не знал что это и зачем потому что оно не ломалось)
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                        • 0
                                                                          Вот я писал выше про особенное устройство, это как раз фискальный регистратор не буду называть модель, дибильнейшее устройство.
                                                                          • 0
                                                                            тут увы, хотя, я не понимаю, что там можно такого наворотить, что оно не заведется… мы же не про интернет канал или gsm, а про локальную сеть…
                                                                            • 0
                                                                              Ой, это та еще поделка)))
                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                        • 0
                                                                          Удивительно мне читать про проблемы с usb. Именно к малине 4 rs232 не подключал, но, по опыту, единственная проблема при подключении большого количества устройств к малине, это надежное питание. Если же подключать через хаб со своим питанием, она вообще не стоит.

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

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

                                                                            • 0
                                                                              По моему этот профиль сложнее? Просто мы уже наловчились работать с USB устройствами напрямую через endpoint-ы, по сути мне не важен профиль, важно чтобы не было глюков ну и уровень вхождения был как можно ниже.
                                                                              • +1
                                                                                я думаю если бы надо было CDC, проще купить было бы чипы silabs или ftdi. И не надо было бы переделывать софт.
                                                                                Но есть один недостаток, который мне ужасно не нравится, если вытащить чип когда порт открыт.

                                                                                А если делать HID, это заведомо стабильнее, можно спокойно коммутировать usb порты. Не нужно драйверов. Но надо пилить ПО
                                                                                • 0
                                                                                  И что не менее важно в моем случае — был хорошо документированный пример)
                                                                                  • +1
                                                                                    Не нужно драйверов

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

                                                                                    • +1

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

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

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

                                                                                      • 0
                                                                                        Да, ссылки поправил, подсказали хорошие люди. Про совместить не совсем понял. Думаю возможно что у одного физического устройства будет два виртуальных HID и CDC, но камень уже наверно не справится. Вывести I2C и SPI конечно можно, с некоторыми ограничениями разумеется.
                                                                                        • +1
                                                                                          103с8 gрекрасно справляется с составным устройством HID(kbd)+HID(mouse)+MSC и еще запас есть.
                                                                                          • 0
                                                                                            Замечательно, не слышал по этому поводу опытного мнения.
                                                                                      • +2
                                                                                        уже упомянули ftdi, но не тот. есть прекрасный ft4232h — usb четыре 8-битных порта (которые через драйвер конфигурируются в тe же full-uart). китайцы такое ещё не подделывают. да вроде кроме ft232r ничего ftdiшного не подделывают. у silicon labs тоже есть usb-multiuart. и у тех и у других драйвера есть под основные системы, включая анроид.

                                                                                        кроме того, старое оборудование очень и очень часто требует полного rs232 (который как бы ещё с 1988 года tia-232-f), ну или хотя бы rts и cts (для аппаратного управления потоком), а не только rtg. в stm32f1x, емнип, только один такой uart
                                                                                        • 0
                                                                                          Вот про полный RS232 вы правильно заметили, но те устройства что мне попадались можно было заставить работать по трем проводам.
                                                                                          • +1
                                                                                            Вы в курсе, сколько всякого адского legacy и прочего говна мамонтов до сих пор есть промышленной автоматике? И у всех свои нюансы…
                                                                                        • 0

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

                                                                                          • 0
                                                                                            В полевых условиях FTDI, PC210x, PL2303 и CH340 ведут себя одинаково хорошо. Это из моей личной практики.
                                                                                            • 0
                                                                                              PL2303 часто драва ставят нерабочие, приходится руками ставить рабочую версию.
                                                                                              • 0
                                                                                                Это достаточно один раз сделать. Кстати, PL2303 в моей практике встречался меньше всего. Собственно, почти не встречался :)
                                                                                                А предпочитаю я CP210x :)
                                                                                                • +1
                                                                                                  Если порт перетыкают то надо заново.
                                                                                                  • 0
                                                                                                    Драйвер достаточно установить один раз. Если переткнуть преобразователь, винда автоматом его обнаружит и настроит, только номер порта другой выдаст.
                                                                                                    • +1
                                                                                                      Не всегда, если переткнуть в другой порт чаще всего винда по умолчанию ставит самый новый двайвер который не рабочий и чаще всего это происходит где-то на удаленном объекте. Пока своими глазами не посмотришь ничего не работает.
                                                                                        • +2
                                                                                          Я очень давно использую для аналогичных целей простую и дешевую систему на ATXMEGA32A4U. на плате конвертор питания lm1117 четыре ограничительнех резистра на входных цепях и два конденсатора на питании… и все! С программной точки зрения при подключании по usb появляется 4 cdc порта (ну я добавляю еще одно hid устройство, через которое рулю типов портов и другими ништяками..), а включение бита управления инвертором на порту позволяет реализовать и rs232 и uart (смотря что нужнее) на каждом из 4 портов. Обычно я еще добавляю dcdc для генерации напряжения до 15 вольт (для этого нужет один транзистор, диод и индуктивность), одновременно adc (на нем я реализую осциллограф на 1 Мгц) и генератор сигнала произвольной формы (ну это dac, даже два) — это по деталям бесплатно… хотел добавить i2c spi, но… нет времени на программирование…
                                                                                          • 0
                                                                                            Прикольно, надо погуглить этого зверя.