Работа с COM портом напрямую

Тема в разделе "WASM.NT.KERNEL", создана пользователем paskal, 6 июл 2022.

  1. paskal

    paskal New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    6
    Неоднократно приходилось работать с портом LPT напрямую через пространство портов в/в. Под виндой для этого написано множество драйверов, inpout32 например, и все прекрасно работают. Возникла нужда поработать также на низком уровне с COM портом. Казалось бы такая же задача, только адреса в/в другие, но нет! Не видит драйвер его адресов вообще! Обращения к 3F8 и другим возвращают только FF как будто устройство отсутствует физически.
    Может тот драйвер не годится для такого адреса?
    Посоветуйте какие драйвера годятся для работы с COM портом через регистры.
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
  3. paskal

    paskal New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    6
    CreateFile я пользыуюсь. И в синхронном, и в асинхронном режимах. Но сейчас не тот случай. Надо принимать посылки в 9 бит. API этого сделать не могут.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Если верить гуглу, 9 бит это RS-485 и наверное не совсем корректно из RS-232 такое лепить. Зная насколько чувствительны последовательные интерфейсы к таймингам, мне вот совсем не кажется отличной затеей использовать колхоз типа крохотного примитивного драйвера inpout32 тупо как посредника, которому с юзермода что-то засылать. Тем более стоят rs-485 адаптеры 500-1000 рублей, ради экономии этих денег не стоит так упарываться.
     
  5. paskal

    paskal New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    6
    Вы видимо не поняли. Нет никакой речи о таймингах с помощью драйвера. Речь о программировании контроллера COM порта, тайминги также вырабатывает контроллер как и программировании через CreateFile.

    И у нас стоит rs-485 адаптер. Адапртер это всего лишь преобразователь уровней от rs-232 к rs-485, проблему с 9-битной посылкой он не решает.

    И вообще, предложения с покупкой нового железа не годятся. Проблема возникла с серийныйным изделием которое лет 20 как разработано, менять отработанное железо никто не даст. Софт тогда был под ДОС и проблем не было. Теперь надо сделать тоже самое под виндой.
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Будем считать, что это я о своем. Если управлять устройством с юзермода, лаг может составить 1-2мс.

    Почитал подробней. Как я понял 9й бит не фича, а скорей народное творчество:
    изображение_2022-07-10_214754732.png
    dcb.fParity=1 и по идее можно проверять parity error GetCommMask'ом с EV_ERR.

    Как альтернатива виндовым апям есть ftdi-интерфейсы со своим драйвером и своей интерфейсной библиотекой ftd2xx.dll.
    Включается parity FT_SetDataCharacteristics'ом, parity error проверяется маской 0x0400 от статуса, возвращаемого FT_GetModemStatus.
     
    Последнее редактирование: 10 июл 2022
  7. paskal

    paskal New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    6
    И с FT мы тоже работали. Тут проблема в особенности USB интерфейса. USB работает с блоком, а не с отдельным байтом как это можно в RS-232. Поэтому проверить паритет можно для всего пакета, а отдельные байты недоступны. Нашу задачу это не решает.
    Кроме того USB вносит задержки.
    И повторяю. НЕЛЬЗЯ ДОБАВЛЯТЬ НОВОЕ ЖЕЛЕЗО. Нужно программное решение.
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Ну если никакое железо добавлять нельзя, мои полномочия всё. Гугл говорит, что одна коммерческая библиотека умеет в 9 бит: https://www.adontec.com/9-bit-serial-communication.htm, есть даже отдельное упоминание, что бесплатная демо-версия в такое может. Можешь ее попробовать.
     
    paskal нравится это.
  9. НетРегистрации

    НетРегистрации Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    72