- Войдите или зарегистрируйтесь, чтобы оставлять комментарии
Не всякое программное обеспечение по своей природе способно работать с COM-портами, если это не бортовые устройства. Даже на устаревшей сегодня PCI-шине размещение UART — приемо-передаточного узла последовательного порта — букет не разрешимых порой противоречий. Каково же платформам, оснащенным только PCI Express? Рассмотрим одну из самых популярных реализаций PCIe-адаптера, на котором реализованы COM-порты, способные расширить возможности компьютера — плату I-360 от компании Sunrich Technology, более известной как ST Lab.
Главное — контроллер
В основе адаптера I-360 лежит революционное и одновременно несколько спорное решение от Oxford Semiconductor — контроллер OXPCIe952. Его революционность стала возможной благодаря использованию концепции последовательных портов, отображаемых в область памяти. Другими словами, привычные адреса типа 3F8h или их аналоги из PCI-пространства никоим образом недоступны в свойствах COM-портов, предоставляемых I-360 операционной системе. Потому что это не порты ввода-вывода, а регионы памяти, эмулирующие их свойства.
Особых проблем на современных платформах это не вызывает: подобным образом реализованы все USB-to-COM. Но программному обеспечению, обслуживающему классический RS232-протокол, от этого не легче — оно просто с последовательными портами, которые вовсе и не порты, а память, может не работать. И все же, позитивного в контроллере OXPCIe952 больше: он разработан на базе проверенного временем OC16C950. Предшественник предназначался для «старой»PCI-шины и пришел к нам из глубины веков (выпущен в 1999 году).
В настоящее время Oxford Semiconductor принадлежит компании Broadcom, что снимает все вопросы к качеству разработки и, тем более, к ее воплощению. Чип OXPCIe952 выполнен в BGA-конструктиве, оснащен встроенным тактированием, обеспечен отличной драйверной поддержкой. Придраться не к чему.

Интерфейс RS232
Не менее важным в структуре адаптера COM-портов ST Lab являются преобразователи уровней, формирующие сигналы RS232-интерфейса. Обмен данными определяется спецификацией, которая нормирует максимальную амплитуду сигнала от –12 до +12 Вольт. Минимальные требования существенно скромнее и ограничены диапазоном в ±3В.

На плате I-360 за связь с внешним миром отвечают два буфера ZT3243 производства ZYWYN Corp. (сейчас принадлежит ASIX Electronics). Заводская документация на эти чипы утверждает, что уровень выходных сигналов будет не хуже ±3В. Замеры показывают, что в ненагруженном состоянии напряжение линий DTR и RTS варьируется от –5,72 до –5,83 Вольта. Подключение манипулятора «мышь» несколько просаживает выходные сигналы до +5,36В.
На первый взгляд, все в норме: требования спецификации соблюдены. С практической точки зрения, уровни сигнальных цепей «слабоваты» — все, что хуже по абсолютному значению, чем 6,5В, чревато неприятностями. Схемное решение периферийных устройств может быть не готово к работе на нижнем пределе. Не забываем и о потерях, неизбежных на протяженных проводных подключениях.
Что умеет адаптер I-360?
Микросхема OXPCIe952 содержит три сравнительно автономные подсистемы, предоставляя разработчику до двух последовательных портов, один параллельный порт и набор сигнальных линий General Purpose IO, назначение которых определяется дизайном конкретного устройства. ST Lab I-360 обеспечивает только функциональность Dual UART.
Устройство содержит конфигурационные регистры, позволяющие выполнить инициализацию ресурсов и операционные регистры, обеспечивающие целевую функциональность. Операционные регистры расположены в пространстве памяти, при этом набор memory-mapped диапазонов, задаваемых регистрами BAR (Base Address Registers) отражает функции микросхемы: UART BAR, Parallel Port BAR, GPIO BAR.

В соответствии со спецификацией PCI Express, поддерживается расширенный механизм передачи прерываний сообщениями — MSI-X. Как известно, физические линии INT в интерфейсе PCIe упразднены. Кроме того, в целях совместимости может быть обеспечена эмуляция линий INT шины PCI согласно Legacy-модели обслуживания запросов на прерывание.
Виртуализация
Насколько программная модель контроллера соответствует современным тенденциям в области разработки ОС? Чтобы ответить на этот вопрос поставим себя на место разработчиков гипервизора виртуализации и промоделируем решение типовой задачи с двумя физическими UART, один из которых требуется передать гостевой ОС, второй — оставить в распоряжении хост-системы. Со времен процессора i386 единицей измерения памяти является страница, размером 4 Килобайта. Эта гранулярность была успешно унаследованы технологиями аппаратной виртуализации.
Итак, статус страницы задается содержимым ее дескриптора. Упрощенно говоря, статус может предписывать один из трех сценариев доступа к странице:
- Отображение страницы в адресное пространство хост-ОС.
- Отображение страницы в адресное пространство гостевой ОС.
- Отметка страницы как не присутствующей — при обращении к такой странице будет вызвана процедура обработки исключения (page fault), с целью программной обработки события.
Очевидно, что последний вариант самый медленный и одним из ключевых преимуществ аппаратной виртуализации перед программной является функционирование системы на основе сценариев №1 и №2.

Вернемся к условию задачи с хостовой и гостевой ОС. Чтобы механизм трансляции страниц мог обеспечить монопольный доступ каждой из двух ОС к «своему» UART, ресурсы каждого из последовательных портов должны быть расположены в отдельной странице размером 4096 байт, ведь анализ обращений к страницам, содержащим совместно используемые ресурсы, потребует программного дифференцирования. Увы, согласно таблице, блок UART0 registers начинается по адресу 1000h, блок UART1 registers по адресу — 1200h. Эти ресурсы попадают в одну 4K-страницу, значит, сценарий виртуализации потребует периодического программного вмешательства гипервизора.
Суб-страницы (sub pages) размером 128 байт, перспективы их внедрения и уместность упоминания в контексте виртуализации memory-mapped IO — тема отдельной публикации.
Хотя на практике, виртуализация актуальна в первую очередь для таких устройств как NVMe и USB-контроллеры, не стоит сбрасывать со счетов ее значимость для агентов персональной платформы. Конечно, анализ вопроса применительно к UART был обусловлен в большей степени теоретическим интересом и стремлением формализовать критерии оптимальности программных моделей.
Послесловие
Купаясь в лучах славы мирового бреда (Broadcom, безусловно, таковым является), важно не упускать из виду, что совместимость с прикладными программами — ключевой момент в выборе адаптера COM-портов I-360. А драйверную поддержку для всех возможных операционных сред Broadcom обеспечит. ST Lab, как OEM-производитель, ставку сделал на лидера.
Адаптер COM-портов ST Lab I-360 предоставлен
на тестирование компанией IT-Link