Низкоуровневый доступ к СОМ порту
Низкоуровневый доступ к СОМ порту
Разработал простейшую плату ввода-вывода через СОМ порт компьютера. Также разработал для нее набор подпрограмм на майкрософтовском бейсике под ДОС для создания с помощью этих подпрограмм, в свою очередь, управляющих программ для подключаемого оборудования. Таким образом получил возможность управления из ДОС и Win9x.
Мне бы хотелось иметь также возможность использовать и NT образные ОСи. Я вижу это так: управляющая программа пишется на Вижуал бейсике и обращается к библиотечным процедурам для доступа к регистрам порта. Необходимо иметь доступ к любому регистру порта на запись и чтение. Например, пусть мы имеем две процедуры Get и Put. Тогда обращение должно выглядеть так:
Put (port, register, data)
Get (port, register, data)
Где port - адрес порта, register - номер регистра, data – восьми битные данные.
Проблема в том, что я совершенно не представляю, как разработать такие процедуры и оформить их в виде библиотечных. Я не знаком с низкоуровневым программированием под Win. Я вообще не программист, а только электронщик. Может быть кто-нибудь знает где можно найти подобные бесплатные библиотеки, к которым я мог бы обращаться из бейсика. Еще один вопрос, сейчас для работы под Win9х я в свойствах системы отключаю нужный СОМ порт и только тогда Винда дает мне доступ к этому порту. А в случае, например, Win10 в принципе такой доступ возможен?
Заранее спасибо за возможные ответы.
Мне бы хотелось иметь также возможность использовать и NT образные ОСи. Я вижу это так: управляющая программа пишется на Вижуал бейсике и обращается к библиотечным процедурам для доступа к регистрам порта. Необходимо иметь доступ к любому регистру порта на запись и чтение. Например, пусть мы имеем две процедуры Get и Put. Тогда обращение должно выглядеть так:
Put (port, register, data)
Get (port, register, data)
Где port - адрес порта, register - номер регистра, data – восьми битные данные.
Проблема в том, что я совершенно не представляю, как разработать такие процедуры и оформить их в виде библиотечных. Я не знаком с низкоуровневым программированием под Win. Я вообще не программист, а только электронщик. Может быть кто-нибудь знает где можно найти подобные бесплатные библиотеки, к которым я мог бы обращаться из бейсика. Еще один вопрос, сейчас для работы под Win9х я в свойствах системы отключаю нужный СОМ порт и только тогда Винда дает мне доступ к этому порту. А в случае, например, Win10 в принципе такой доступ возможен?
Заранее спасибо за возможные ответы.
- Реклама
Re: Низкоуровневый доступ к СОМ порту
Зачем тебе низкоуровневый доступ? Тут есть всё необходимое с описанием, исходниками и примерами.
https://www.kernelchip.ru/pcports.php
https://www.kernelchip.ru/pcports.php
Re: Низкоуровневый доступ к СОМ порту
Зачем низкоуровневый доступ? Чего этим хотите добиться? Понимаете что USB конвертеры работать не будут, т. к. нет регистров COM порта?
Если нужно работать с COM портом, вот функции для бейсика, которые могут работать с портом в Windows, Linux и MacOS. Поддерживаются процы x86, x64 и ARM64.
Если нужно работать с COM портом, вот функции для бейсика, которые могут работать с портом в Windows, Linux и MacOS. Поддерживаются процы x86, x64 и ARM64.
Re: Низкоуровневый доступ к СОМ порту
Там описывается как передавать данные стандартным образом через СОМ порт, а меня интересует именно возможность записывать\читать содержимое ЛЮБОГО регистра порта. Моя плата не использует стандартный протокол, а только входы\выходы порта как независимые выводы.
Добавлено after 3 minutes 16 seconds:
Чтобы было понятней, приведу ссылку на разработку. К сожалению на англоязычном форуме.
https://www.vogons.org/viewtopic.php?t=99840
Добавлено after 3 minutes 16 seconds:
Чтобы было понятней, приведу ссылку на разработку. К сожалению на англоязычном форуме.
https://www.vogons.org/viewtopic.php?t=99840
Re: Низкоуровневый доступ к СОМ порту
Вы наверное не внимательно смотрели мою ссылку и не заметили функции GetSerialPortStatus() и SetSerialPortStatus(), которые позволяют управлять выводами порта и считывать их состояния.
Вот к примеру прошивка PIC контроллеров через COM порт, но там другая библиотека, уже устаревшая.
Так же есть софт для программатора PIC на основе этого кода https://pure-basic.narod.ru/project/mpf_prog.html
Прога древняя (написана во времена Windows XP) и на современной винде работать не будет из-за отсутствия цифровой подписи у драйвера LPT порта.
Вот к примеру прошивка PIC контроллеров через COM порт, но там другая библиотека, уже устаревшая.
Так же есть софт для программатора PIC на основе этого кода https://pure-basic.narod.ru/project/mpf_prog.html
Прога древняя (написана во времена Windows XP) и на современной винде работать не будет из-за отсутствия цифровой подписи у драйвера LPT порта.
- Реклама
Re: Низкоуровневый доступ к СОМ порту
Все эти функции годятся только для обмена с внешними устройствами через последовательную передачу данных, т.е. стандартное использование СОМ порта. Да они позволяют считывать состояние входов DCD, DSR, CTS, RI а также устанавливать выходы RTS и DTR. Мне же, кроме того, нужно устанавливать выход TXD и считывать вход RXD так, словно это простые вход и выход с логическими уровнями. Кроме того, нужно заносить нестандартные значения во все регистры порта. А этого предложенные функции не позволяют, по крайней мере я этого не нашел.
Re: Низкоуровневый доступ к СОМ порту
Устанавливать TXD можно, а вот считывание RXD не предусмотрено. То есть не поддерживается только RXD. Без него нельзя обойтись?Darmok писал(а):Мне же, кроме того, нужно устанавливать выход TXD и считывать вход RXD
Почему не использовать arduino или плату с STM32?
Прямая работа с портом потребует в Windows 2000 и выше, драйвер с цифровой подписью для прямого доступа к порту и может работать нестабильно из-за конфликта с драйвером винды. Будет работать только с портом на системной плате, а не с USB конвертерами.
Для чего?Darmok писал(а):Кроме того, нужно заносить нестандартные значения во все регистры порта.
Поставьте DOS и пишите под нее.
Современные системы не дадут полный доступ к железу и получить его не так просто, т. к. нужен драйвер с цифровой подписью и нужно быть готовым к конфликтам с драйверами ОС.
Re: Низкоуровневый доступ к СОМ порту
То, что требуется низкоуровневый доступ к порту это цена которую приходится платить за простоту устройства. Вариантов работать через контроллер полно и даже ничего делать не нужно, можно купить готовое решение. Но разве настоящий хоббист электронщик так поступает? Нет, мы идем сложным путем. Драйвер так драйвер, знать бы еще как его написать.
Требование цифровой подписи можно обойти, хотя, конечно, это нежелательно, но если другого выхода нет, то ...
В ДОС и Win9х у меня и так все работает. Что касается того зачем писать во все порты, то если Вы мельком гляните в мой код, то все станет ясно.
Требование цифровой подписи можно обойти, хотя, конечно, это нежелательно, но если другого выхода нет, то ...
В ДОС и Win9х у меня и так все работает. Что касается того зачем писать во все порты, то если Вы мельком гляните в мой код, то все станет ясно.
Re: Низкоуровневый доступ к СОМ порту
Мне вспомнилось про мышей и кактус.Darmok писал(а):Вариантов работать через контроллер полно и даже ничего делать не нужно, можно купить готовое решение. Но разве настоящий хоббист электронщик так поступает?
Зачем усложнять то что можно сделать проще?
Обычно пишут на Си, но если очень нужно, можно на бейсике написать. Там есть готовый драйвер для x86 и x64 для доступа к портам - pbdriverio.sys и pbdriverio_x64.sys. Чтобы работал его нужно подписать, а с этим немного сложно. Нужно юридическое лицо и несколько сотен американских рублей на покупку цифровой подписи у майкрософта.Darmok писал(а):Драйвер так драйвер, знать бы еще как его написать.
Кода нет и не на что смотреть. Не проще в двух словах объяснить?Darmok писал(а):если Вы мельком гляните в мой код, то все станет ясно
Re: Низкоуровневый доступ к СОМ порту
Некоторые сорта кактусов весьма аппетитны, из них, в том числе, делают текилу.
За ссылку огромное спасибо, буду изучать, авось что-нибудь получится. С подписью даст бог справлюсь.
Мой код доступен по ссылке, которую я давал. Но дам его напрямую. В двух словах объяснить сложно.
За ссылку огромное спасибо, буду изучать, авось что-нибудь получится. С подписью даст бог справлюсь.
Мой код доступен по ссылке, которую я давал. Но дам его напрямую. В двух словах объяснить сложно.
Re: Низкоуровневый доступ к СОМ порту
[uquote="Darmok",url="/forum/viewtopic.php?p=4689728#p4689728"]То, что требуется низкоуровневый доступ к порту это цена которую приходится платить за простоту устройства.[/uquote]
По-моему, проще взять готовую плату на FT232H по цене бутылки вина и получить законченное решение. Можно взять любой маленький МК с USB за 100 рублей и повторить на нём эту плату времён царя Гороха. И все они будут управляться через СОМ-порт, правда, виртуальный. Впрочем, каждый сам выбирает себе объект для секса...
По-моему, проще взять готовую плату на FT232H по цене бутылки вина и получить законченное решение. Можно взять любой маленький МК с USB за 100 рублей и повторить на нём эту плату времён царя Гороха. И все они будут управляться через СОМ-порт, правда, виртуальный. Впрочем, каждый сам выбирает себе объект для секса...
Re: Низкоуровневый доступ к СОМ порту
И я про тоже. Можно организовать связь через USB HID что позволит использовать имеющийся драйвер и будет работать начиная с Win95 (не помню была ли там поддержка USB, в 98 точно была) до текущей версии винды.tonyk писал(а):Можно взять любой маленький МК с USB за 100 рублей и повторить на нём эту плату времён царя Гороха.
Вот к примеру баромер со связью по USB HID.


