Как важно быть последовательным

Не всякое программное обеспечение по своей природе спо­соб­но ра­бо­тать с COM-пор­та­ми, ес­ли это не бор­то­вые уст­рой­ст­ва. Да­же на ус­та­рев­шей се­го­дня PCI-ши­не раз­ме­ще­ние UART — при­е­мо-пе­ре­да­то­ч­но­го уз­ла по­сле­до­ва­тель­но­го пор­та — бу­кет не раз­ре­ши­мых по­рой про­ти­во­ре­чий. Ка­ко­во же плат­фор­мам, ос­на­щен­ным толь­ко PCI Ex­press? Рас­смо­т­рим одну из самых популярных реализаций PCIe-адап­те­ра, на ко­то­ром ре­а­ли­зо­ва­ны COM-пор­ты, спо­соб­ные рас­ши­рить воз­мож­нос­ти ком­пью­те­ра — пла­ту I-360 от ком­па­нии Sun­rich Tech­no­lo­gy, бо­лее из­вест­ной как ST Lab.

 

Главное — контроллер

В основе адаптера I-360 лежит ре­во­лю­ци­он­ное и од­но­вре­мен­но не­сколь­ко спор­ное ре­ше­ние от Ox­ford Se­mi­con­duc­tor — кон­трол­лер OXPCIe952. Его ре­во­лю­ци­он­ность ста­ла воз­мож­ной бла­го­да­ря ис­поль­зо­ва­нию кон­цеп­ции по­сле­до­ва­тель­ных пор­тов, ото­бра­жа­е­мых в об­ласть па­мя­ти. Дру­ги­ми сло­ва­ми, при­выч­ные ад­ре­са ти­па 3F8h или их ана­ло­ги из PCI-про­ст­ран­ст­ва ни­ко­им об­ра­зом не­до­ступ­ны в свой­ст­вах COM-пор­тов, пред­ос­тав­ля­е­мых I-360 опе­ра­ци­он­ной сис­те­ме. По­то­му что это не пор­ты вво­да-вы­во­да, а ре­ги­о­ны па­мя­ти, эму­ли­ру­ю­щие их свой­ст­ва.

Особых проблем на современных платформах это не вызывает: подобным образом реализованы все USB-to-COM. Но про­грам­мно­му обес­пе­че­нию, обслуживающему классический RS232-протокол, от этого не легче — оно просто с по­сле­до­ва­тель­ны­ми портами, которые вовсе и не порты, а память, может не работать. И все же, позитивного в контроллере OXPCIe952 больше: он разработан на базе проверенного временем OC16C950. Пред­шест­вен­ник предназначался для «старой»PCI-шины и пришел к нам из глубины веков (выпущен в 1999 году).

В настоящее время Ox­ford Se­mi­con­duc­tor принадлежит компании Broadcom, что снимает все вопросы к ка­че­ст­ву раз­ра­бот­ки и, тем более, к ее воплощению. Чип OXPCIe952 выполнен в BGA-кон­ст­рук­ти­ве, оснащен встроенным так­ти­ро­ва­ни­ем, обеспечен отличной драй­вер­ной поддержкой. Придраться не к чему.

qqq

 

Интерфейс RS232

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

qqq

 

На плате 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 Ки­ло­бай­та. Эта гра­ну­ляр­ность была успешно уна­сле­до­ва­ны тех­но­ло­ги­я­ми аппаратной вир­ту­а­ли­за­ции.

Итак, статус страницы задается содержимым ее дескриптора. Упрощенно говоря, статус может предписывать один из трех сценариев доступа к странице:

  1. Отображение страницы в адресное пространство хост-ОС.
  2. Отображение страницы в адресное пространство гостевой ОС.
  3. Отметка страницы как не присутствующей — при обращении к такой странице будет вызвана про­це­ду­ра об­ра­бот­ки ис­клю­че­ния (page fault), с целью программной об­ра­бот­ки события.

Очевидно, что последний вариант самый медленный и одним из ключевых преимуществ аппаратной вир­ту­а­ли­за­ции перед программной является функционирование системы на основе сценариев №1 и №2.

Регистры UART в пространстве memory-mapped I/O

 

Вернемся к условию задачи с хос­то­вой и гостевой ОС. Чтобы механизм трансляции страниц мог обес­пе­чить мо­но­по­ль­ный до­ступ каждой из двух ОС к «своему» UART, ресурсы каждого из последовательных портов должны быть рас­по­ло­же­ны в отдельной странице размером 4096 байт, ведь анализ обращений к страницам, со­дер­жа­щим со­вмест­но ис­поль­зу­е­мые ресурсы, потребует программного дифференцирования. Увы, согласно таблице, блок UART0 re­gis­ters на­чи­на­ет­ся по адресу 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