Карта PCI - microcart

Карта microcart, пожалуй, самое простое и дешовое устройство, создаваемое в кустарных условиях и подключаемое к 5-ти вольтовой шине PCI с частотой синхронизации 33МГц (конечно, microcart легко адаптируется и к 3,3В, но здесь рассматривается только 5-ти вольтовый вариант). И как не парадоксально эта штука реально работает, хотя и соединяется с шиной PCI всего лишь по 18 сигнальным линиям. Ну, а в работоспособности microcart может убедиться любой, кому не жалко 200 рублей, и кто хоть мало-мальски владеет паяльником. Стоимость устройства можно снизить до смехотворных 80 рублей, если вместо покупной макетной платы (см. фотографию ниже) применить при создании microcart какую-нибудь вышедшую из строя стандартную, т.е. сделанную китайцами, карту PCI. Итак, если вы все таки решитесь хоть в какой-то степени повторить подвиг китайцев, то вам понадобится ПЛИС EPM3032ALC44-10, панелька PLCC44, разъем PLD6, немного кнопочек, светодиодиков, резисторов, конденсаторов, один переключатель, регулятор на 3,3В и время, чтобы собрать устройство по приведенным ниже схеме и фотографии.

Приведенное расположение элементов, конечно, не является обязательным, однако панельку с ПЛИС желательно установить в той же области, что и на фотографии, так как при этом обеспечиваются наименьшие длины сигнальных проводников, соединяющихся с разъемом PCI.
Для того, чтобы все это стало PCI-устройством, необходимо сконфигурировать ПЛИС, находящуюся на плате. Конфигурирование осужествляется через разъем PLD6 по интерфейсу JTAG из сред MAX+PLUS II или Quartus II. Для данной операции можно использовать ByteBlasterMV или что-нибудь попроще, например это.
ПЛИС EPM3032ALC44-10 конфигурируется в соответствии с проектом "minicontr", чья принципиальная схема приведена ниже.

Как видно схемка очень маленькая. Занимает всего 21 макроячейку EPM3032ALC44-10, но несмотря на столь скромные размеры, предоставляет даже некоторые возможности PnP.
Карта "microcart" предоставляет один байт с адресом 40H для чтения или записи в пространство конфигурации шины PCI. При чтении на старший нибл данного байта отображаются состояния кнопок SB3..SB0, а младший нибл содержит следующее значение: первый бит - 1, второй бит - состояние переключателя SA, третий и четвертый биты - 0. Таким образом по чтению байт с адресом 40H пространства конфигурации шины PCI имеет следующее битовое наполнение: |SB3|SB2|SB1|SB0| 0 | 0 |SA| 1 |. При записи по адресу 40H пространства конфигурации младший нибл записываемого байта выводится на линии светодиодов HL3..HL0.
Все остальное пространство конфигурации до адраса 40H имеет неопределенные значения, исключения составляют младшие байты двойных слов, составляющих данное конфигурационное пространство. В этих младших байтах находится значение | 0 | 0 | 0 | 0 | 0 | 0 |SA| 1 |.
Из всего вышеизложенного следует, что анализировать состояния кнопок и зажигать светодиоды "microcart", довольно просто, достаточно читать и писать значения по адресу 40H пространства конфигурации шины PCI. Но до начала работы необходимо определить географический адрес "microcart". Делается это методом несколько отличным от регламентированного спецификацией PCI способом. В соответствии со спецификацией поиск устройств на шине осуществляется по значениям полей VendorID и DeviceID пространства конфигурации. Если взглянуть на список со значениями полей VendorID, зарезервированными за наиболее известными производителями, то легко можно заметить, что во младших , байтах этих полей не встречаются значения 01H и 03H. Карта "microcart" имеет во младшем байте поля VendorID значение 01H или 03H в зависимости от переключателя SA. Если Вам очень не повезло, и в Вашей системе все таки имеется устройство PCI малоизвестного производителя чей VendorID имеет во младшем байте значение 01H или 03H, то переключателем SA всегда можно добиться уникальности карты "microcart" в Вашей (конкретной) системе. Таким образом, определить географический адрес "microcart" в конкретной системе можно по младшему байту поля VendorID. Кроме того младшие байты двойных слов до адраса 40H, составляющих конфигурационное пространство "microcart", имеют значения | 0 | 0 | 0 | 0 | 0 | 0 |SA| 1 |. Данное обстоятельство так же можно использовать для определения географического адреса "microcart", поскольку ни одно из устройств шины PCI во всем мире не должно иметь такого конфигурационного пространства.

Если приглядеться к схеме "microcart", то можно заметить, что карта не ведет подсчета паритета и не производит выдачи сигналов ошибок паритета. Дело в том, что многочисленные эксперименты с шиной PCI на ПЭВМ годов выпуска от 1997 до 2007 и ОС Windows, Linux, QNX показали бесполезность подсчета паритета и выдачи сигналов ошибок паритета. Ни одна из ПЭВМ ни как не реагирует на данные передаваемые по шине PCI с заведомой ошибкой паритета, т.е контроллеры (мосты) шины, установленные на материнских платах, не выставляют регламентированные спецификацией PCI сигналы PERR или SERR. В случае, когда PERR или SERR выставляет карта расширения, то же ни какой реакции не наблюдается. Таким образом можно сделать вывод о том, что средства обеспечения гарантированной передачи данных по шине PCI, предусмотренные в спецификации, либо не закладываются производителями материнских плат ПЭВМ, либо просто не используются или отключаются широко распространенными ОС. В общем, разбираться в конкретных причинах сего действа не так уж и охото, но только можно обратить внимание на тот факт, что когда продают материнскую плату, говорят, что на ней расположено, допустим, четыре слота PCI, но еще ни кто не сказал, что на плате установлены четыре слота шины PCI, удовлетворяющей спецификации 2.0. Как бы то ни было не стоит быть умнее Билла или Intel-а и закладывать в аппаратуру то, что не используется, а именно подсчет паритета и выдачу сигналов ошибок паритета. Так же следует отметить, что на базе ПЭВМ под управлением распространенных ОС построить ответственную систему не так просто, как кажется на первый взгляд. Необходимо предусматривать какие-то отличные от предлагаемых спецификацией PCI средства обеспечения гарантированной передачи данных по шине. Но в конце концов, ПЭВМ и не должна применяться в ответственных системах, а должна стоять дома на столе, чтобы с ней "играться".

Для определения работоспособности "microcart" существует тестовая программа m.exe, работающая под ОС Windows 98/Me.
После запуска m.exe сканирует шину PCI на предмет определения географического адреса "microcart" по младшему байту поля VendorID, значением которого при запуске считается число 03H. Если на шине PCI не найдено устройство со значением младшего байта поля VendorID - 03H, то выдается следующее сообщение:

Если операция поиска завершается успешно, то выдается такое же сообщение, но со словами: "PCI microcart найдена". После нажатия на кнопку "ОК" того или иного сообщения появляется основное окно программы m.exe, внешний вид которого приведен ниже.

Если m.exe при запуске не нашла "microcart", необходимо ввести в поле "Ven. ID" значение младшего байта поля VendorID "microcart", т.е. в нашем случае 01H, и нажать на кнопку "Найти карту". По нажатию на данную кнопку m.exe осуществляет поиск карты по младшему байту поля VendorID, значение которого совпадает со значением введенным в поле "Ven. ID". Результаты поиска выдаются в виде описанных выше сообщений. В случае успешного завершения поиска "microcart", можно нажать на кнопку "Пуск", после чего начнут загораться светодиоды HL3..HL0, расположенные на "microcart", а поле "SB[3..0]" начнет отображать значение, определяемое кнопками SB3..SB0. Светодиоды HL3..HL0 загораются в соответствии со значениями, указанными в поле "HL[3..0]". Допустим, если введена последовательность 137..., то сначала загорится HL0, затем HL1, затем HL2 и так до конца строки, введенной в поле "HL[3..0]", далее все повторится с начала строки. Значение поля "Период" определяет интервал времени, через которое m.exe выдает следующее значение из строки, находящейся в поле "HL[3..0]". По нажатию на кнопку "Стоп" прекращается сканирование кнопок SB3..SB0 и выдача очередного значения на светодиоды HL3..HL0. При закрытии окна программы m.exe светодиоды HL3..HL0 гаснут.
ОС Windows 98 и Linux определяют "microcart" как неопознанное устройство, Windows XP - как восемь неопознанных устройств, а Windows Me вообще не видит "microcart", но m.exe ее находит и работает с ней без каких либо проблем.

В заключении хотелось отметить, что назначение ресурсов устройства сопражения в пространстве конфигурации, примененное в "microcart", не такая уж и глупая затея как может показаться на первый взгляд. Во первых, довольно большой обьем ресурсов пространства конфигурации, свободных от стандартного заголовка, а именно 192 байта для одной функции, а функций в устройстве может быть восемь, причем совершенно не обязательно оснащать каждую функцию стандартным заголовком. Следовательно, имеется почти 2 кБайта свободно адресуемого пространства для одного устройства. Во вторых, устройство не занимает ни каких ресурсов из пространств ввода/вывода или памяти ПЭВМ, таким образом отпадает необходимость в формировании довольно объемистых регистров базовых адресов. В третьих. очевидная простота, сопряженная с малым объемом интерфейсной части подобного устройства. В четвертых, скорость обмена данными по шине PCI с пространством конфигурации такая же как и с пространствами ввода/вывода или памяти. Хотя для конфигурационного обмена и требуется выполнить две инструкции обращения к портам, данные обращения на шину PCI современной ПЭВМ не транслируются, а производится только цикл конфигурационного чтения или записи. Конечно, можно сказать, что две инструкции больше чем одна, но разьве, допустим, запись в порт осуществляемая на языке высокого уровня приводит к исполнению только одной инструкции...
В общем, если вам требуется разработать оригинальное устройство сопряжения с не очень большой производительностью (кстати, в разы превышающей производительность шины ISA) не спешите хвататься за такие "редкоземельные" и дорогостояшие агрегаты, как PLX или MCCA. Возьмите дешовую ПЛИС в 128/256 макроячеек и сделайте свое устройство по подобию "microcart".

Файлы: minicontr.gdf, m.exe, исходник m.exe (ассемблер).

Главная

Сайт управляется системой uCoz