2012-06-01 4 views
4

Привет, у меня есть приложение, построенное несколько раз назад в C++.Прямой доступ PCI последовательный порт

Используется для управления устройством через последовательный порт.

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

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

Благодаря

+1

Скорее всего, драйвер карты PCI позволит ОС сообщать о серийном порту как «нормальном» последовательном порту. –

+1

Согласитесь с Joachim, даже USB <-> Последовательные преобразователи обычно загружают драйвер, который представляет последовательный порт как порт «COM #». С COM-портом вам не нужно беспокоиться о доступе к прямой памяти, потому что вы можете использовать обычные вызовы файловой системы Win32: CreateFile, OpenFile, WriteFile, ReadFile, CloseFile (и, конечно, эквиваленты async «* Ex», если необходимо) , Возможно, вам придется немного перевести программное обеспечение, но это должно быть прямолинейным. В Интернете есть тонны ресурсов для доступа к COM-портам ... –

ответ

1

Это зависит немного о том, насколько обратная совместимость поддержка драйверов ваш последовательный порт PCIe имеет.

Если он обеспечивает прямое отображение ввода-вывода (возможно, виртуального) 16550 UARTregisters, вам нужно будет изменить «базовый адрес» в программном обеспечении, но тогда это может сработать. Если драйверов нет, то это не сработает.

Первые четыре стандартных последовательных портов имеют следующие базовые адреса и прерывания, связанные с ними:

 | base IRQ 
----------------- 
COM1 | 0x3f8 IRQ4 
COM2 | 0x2f8 IRQ3 
COM3 | 0x3e8 n/a 
COM4 | 0x2e8 n/a 

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

+0

Итак, если драйвер обеспечивает прямое отображение пространства ввода-вывода, программное обеспечение не нуждается в доступе к последовательному порту через драйвер PCI? Windows 32bit всегда будет хранить часть адресной памяти для операций ввода-вывода. Как драйвер инструктирует ОС отображать часть памяти для последовательного порта? – Cyril

-2

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

+0

Я думал об этом, но он по-прежнему поднимает тот же вопрос, сможет ли приложение иметь прямой доступ к последовательному порту? В случае usb я не думаю, что это возможно. Он должен будет пройти через драйвер эмуляции. + вы не можете получить доступ к USB-порту, написав непосредственно в памяти. – Cyril

+0

драйвер с этим конвертером сделает все это, вам не придется беспокоиться о промежуточных шагах. Он будет работать точно так же, как работает ваш последовательный порт. Я использовал его. Единственная проблема, которая произошла, заключалась в медленной передаче данных. – Rizstien

+0

Windows использует usbser.sys для класса USB CDC. Каждое сообщение с эмулированным последовательным портом должно будет пройти через этот драйвер, поэтому ваше общение стало медленнее. Он добавил дополнительный слой между вашим приложением и последовательным портом. – Cyril

0

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

Спасибо всем.

1

Я считаю, что подавляющее большинство карт последовательного порта local bus эмулируют 16x50 RS-232 UART. Если вы не собираетесь использовать какую-либо специальную карту, например, дорогие многопортовые карты, используемые для управления модемными банками, это, вероятно, будет хорошо.

USB/RS-232 converters - совсем другая история - в целом они не будут работать с программным обеспечением, которое напрямую обращается к последовательному порту, поскольку их драйвер обеспечивает только доступ через подсистему последовательного порта OS. Даже если их драйвер каким-то образом пытается эмулировать надлежащую локальную шину UART, эти преобразователи часто имеют разное поведение w.r.t. что может привести к проблемам с программным обеспечением, которое делает необычные вещи с последовательным портом. Например, у меня возникли проблемы с подключением IR remote control receivers к некоторым преобразователям USB/RS-232. Использование конвертера, поддерживающего USB 2.0, несколько помогает, но оно все еще далека от реальной.

Следует также иметь в виду, что если ваше приложение предназначено для более старой ОС, более новые версии этой операционной системы могут больше не разрешать прямой доступ к последовательным портам.

Если все остальное не удается, вы все равно сможете улучшить ситуацию с помощью виртуальной машины. Например, VirtualBox позволяет гостевой ОС обращаться к последовательным портам хоста, эмулируя UART 16550A. Это может позволить вам обойти драйвер или ОС, которые не поддерживают или не разрешают прямой доступ к последовательному порту.

Смежные вопросы