Программа для чтения данных с com порта. Анализаторы портов (COM, LPT и USB). Мониторить несколько портов в пределах одной сессии

Когда мы говорим о шине PCI Express(PCI-E), то, пожалуй, первое что выделяет ее среди других аналогичных решений – это эффективность. Благодаря этой современной шине, повышается производительность компьютера, улучшается качество графики.

На протяжении многих лет, для подключения видеокарты к материнской плате, использовалась шина PCI(Peripheral Component Interconnect), помимо этого она использовалась также и для подключения некоторых других устройств, например, сетевой и звуковой карты.

Вот как выглядят эти слоты:

PCI-Express фактически стало следующим поколением шины PCI, предложив улучшенную функциональность и производительность. Она, использует последовательное соединение, в котором имеется несколько линий, каждая из которых ведет к соответствующему устройству, т.е. каждое периферийное устройство получает свою собственную линию, благодаря чему возрастает общая производительность компьютера.

PCI-Express поддерживает «горячее» подключение, потребляет меньшее, чем ее предшественники количество энергии, контролирует целостность передаваемых данных. К тому же она совместима с драйверами PCI – шины. Еще одной замечательной особенностью данной шины, является ее масштабируемость, т.е. pci express card подключается и работает в любом слоте аналогичной или большей пропускной способности. По всей вероятности, эта функция будет обеспечивать ее использование в последующие годы.

Традиционный тип слота PCI был достаточно хорош для основных аудио/видео функций. С шиной AGP, схема работы с мультимедийными данными улучшилась, соответственно возросло и качество аудио/видео данных. Это было незадолго до того момента, когда достижения в области микроархитектуры процессоров стали еще нагляднее демонстрировать медлительность шины PCI, которая заставляла самые быстрые и новейшие на тот момент времени модели компьютеров буквально еле-еле тащиться.

Характеристики и пропускная способность шины PCI-E

Она может иметь от одной двунаправленной линии соединения x1, до x32 (32 линий). Линия функционирует по принципу точка к точке. Современные версии предоставляют гораздо большую пропускную способность, по сравнению со своими предшественниками. x16 можно использовать для подключения видеокарты, а x1 и x2 могут использоваться для подключения обычных карт.

Вот как выглядят слоты х1 и pci express x16 на :

PCI-E
Количество линий x1 x2 x4 x8 x16 x32
Ширина полосы 500 Мб /с 1000 МБ /с 2000 Мб /с 4000 МБ /с 8000 МБ / с 16000 Мб / с

Версии PCI-E и совместимость

Когда речь идет о компьютерах, то любое упоминание о версиях ассоциируется с проблемами совместимости. И, как любая другая современная технология, PCI-E постоянно развивается и модернизируется. Последний доступный вариант pci express 3.0, но уже ведется развитие шины PCI-E версии 4.0., которая должна появиться примерно в 2015 году(pci express 2.0 практически устарела).
Взгляните на следующую таблицу совместимости PCI-E.
Версии PCI-E 3,0 2,0 1,1
Общая пропускная способность
(X16) 32 Гб / с 16 Гб / с 8 Гб / с
Скорость передачи данных 8,0 ГТ / с 5,0 ГТ / с 2,5 ГТ / с

Версия PCI-E не имеет никакого влияния на функциональность карты. Наиболее отличительной чертой данного интерфейса является его прямая и обратная совместимость, что делает его безопасным и способным к синхронизации со многими вариантами карт, независимо от интерфейса версии. То есть вы можете в слот PCI-Express первой версии, вставить карту второй или третьей версии и она будет работать, хотя и с некоторой потерей производительности. Точно так же и в слот PCI-E третьей версии можно устанавливать карту первой версии PCI-Express. В настоящее время все современные модели видеокарт от NVIDIA и AMD совместимы с такой шиной.

А это на закуску:

  1. Здравствуйте! Объясните пожалуйста разницу в пропускной способности между интерфейсом PCI Express 3.0 x16 и PCI Express 2.0 x16. Сейчас ещё есть в продаже материнские платы с интерфейсом PCI Express 2.0 x16. Я с ильно потеряю в производительности видюхи, если установлю новую видеокарту интерфейса PCI Express 3.0 на компьютер с материнской платой, где есть только разъём PCI-E 2.0? Думаю что потеряю, ведь суммарная скорость передачи данных у PCI Express 2.0 равна - 16 ГБ/с, а суммарная скорость передачи данных у PCI Express 3.0 в два раза больше - 32 ГБ/с.
  2. Привет! У меня компьютер с мощным, но уже не новым процессором Intel Core i7 2700K и материнской платой, на которой имеется разъём PCI Express 2.0. Скажите, если я куплю новую видеокарту интерфейса PCI Express 3.0, то эта видеокарта будет работать в два раза медленнее, чем если бы у меня была материнка с разъёмом PCI Express 3.0? То есть мне пора менять компьютер?
  3. Ответьте пожалуйста на такой вопрос. На моей материнской плате есть два разъёма: PCI Express 3.0 и PCI Express 2.0, но в разъём PCI Express 3.0 новая видеокарта PCI Express 3.0 не лезет, мешает радиатор южного моста. Если я установлю видеокарту PCI-E 3.0 в слот PCI-E 2.0, то моя видеокарта будет работать хуже, чем если бы она была установлена в слот PCI Express 3.0 ?
  4. Здравствуйте, хочу купить у приятеля за две тысячи рублей немного бывшую в употреблении материнскую плату. Три года назад он покупал её за 7000 рублей, но меня смущает то, что на ней слот для видеокарты интерфейса PCI-E 2.0, а видеокарта у меня PCI-E 3.0. Моя видеокарта на этой материнской плате будет работать на полную мощность или нет?

Привет друзья! На сегодняшний день в продаже можно встретить материнские платы с разъёмом для установки видеокарт PCI Express 2.0 x16, так и PCI Express 3.0 x16. Тоже самое можно сказать и о графических адаптерах, в продаже встречаются видеокарты с интерфейсом PCI-E 3.0, а также PCI-E 2.0. Если смотреть официальные характеристики интерфейсов PCI Express 3.0 x16 и PCI Express 2.0 x16, то вы узнаете, что суммарная скорость передачи данных у PCI Express 2.0 равна - 16 ГБ/с, а у PCI Express 3.0 она в два раза больше - 32 ГБ/с. Не буду углубляться в дебри специфики работы этих интерфейсов и просто скажу вам, что такая большая разница в скорости передачи данных видна лишь в теории, на практике же она очень небольшая. Если читать статьи на эту тему в интернете, то вы придёте к выводу, что современные видеокарты интерфейса PCI Express 3.0 работают с одинаковой скоростью в разъёмах PCI Express 3.0 x16 и PCI Express 2.0 x16 и разница в пропускной способности между PCI-E 3.0 x16 и PCI-E 2.0 x16 составляет всего 1-2% потери производительности видеокарты . То есть, всё равно в какой слот вы установите видеокарту, в PCI-E 3.0 или PCI-E 2.0, работать всё будет одинаково.

Но к сожалению все эти статьи написаны в 2013 и 2014 году и в то время не было таких игр, как Far Cry Primal, Battlefield 1 и других новинок, появившихся в 2016 году. Также в 2016 году увидело свет семейство графических процессоров NVIDIA 10-ой серии, к примеру видеокарты GeForce GTX 1050 и GeForce GTX 1050 Ti и даже GTX 1060. Мои эксперименты с новыми играми и новыми видеокартами показали, что преимущество интерфейса PCI-E 3.0 над PCI-E 2.0 уже далеко не 1-2%, а в среднем 6-7%. Что интересно, если видеокарта ниже классом, чем GeForce GTX 1050 , то процент меньше (2-3 %) , а если наоборот, то больше - 9-13%.

Итак, в своём эксперименте я использовал видеокарту GeForce GTX 1050 интерфейса PCI-E 3.0 и материнскую плату с разъёмами PCI Express 3.0 x16 и PCI Express 2.0 x16.

Н астройки графики в играх везде максимальные.

  1. Игра FAR CRY PRIMAL. Интерфейс PCI-E 3.0 показал преимущество над PCI-E 2.0, так как всегда выше на 4-5 кадров, что в процентом соотношении примерно 4 % %.
  2. Игра Battlefield 1.Отрыв PCI-E 3.0 от PCI-E 2.0 составил 8-10 кадров , что в процентом соотношении примерно 9 %.
  3. Rise of the Tomb Raider. Преимущество PCI-E 3.0 составляет в среднем 9- 10 fps или 9 %.
  4. Ведьмак. Преимущество PCI-E 3.0 составил 3 %.
  5. Grand Theft Auto V. Преимущество PCI-E 3.0 составляет 5 fps или 5 %.

То есть, разница в пропускной способности между интерфейсом PCI-E 3.0 x16 и PCI-E 2.0 x16 всё же есть и не в пользу PCI-E 2.0. Поэтому я бы не стал покупать на данный момент материнскую плату с одним разъёмом PCI-E 2.0.

Один мой приятель купил бывшую в употреблении материнскую плату за три тысячи рублей. Да, когда-то она была наворочена и стоила около десяти тысяч рублей, на ней много разъёмов SATA III и USB 3.0, также 8 слотов для оперативки, она поддерживает технологию RAID и др, но построена она на устаревшем чипсете и слот для видеокарты на ней PCI Express 2.0! Моё мнение, лучше бы купил . Почему?

Вполне может так случиться, что уже через год-два новейшие видеокарты будут работать только в разъёме PCI Express 3.0 x16 , а на вашей материнке будет морально-устаревший и уже неиспользуемый производителями разъём PCI Express 2.0 x16 . Вы купите новую видеокарту, а она откажется работать в старом разъёме. Лично я уже много раз сталкивался с тем, что видеокарта PCI-E 3.0 не запускалась на мат. плате с разъёмом PCI-E 2.0, и не помогало даже обновление БИОСа материнской платы. Также я имел дело с видеокартами PCI-E 2.0 x16, которые отказывались работать на старых материнских платах с интерфейсом PCI-E 1.0 x16, хотя везде пишут об обратной совместимости. Случаев, когда видеокарта PCI Express 3.0 x16 не заводилась на материнках с PCI Express 1.0 x16, ещё больше.

Ну и не забудьте о появлении уже в этом году интерфейса PCI Express 4.0. В этом случае устаревшим окажется уже PCI Express 3.0.

Если спросить, какой интерфейс следует использовать для твердотельного накопителя с поддержкой протокола NVMe, то любой человек (вообще знающий, что такое NVMe) ответит: конечно PCIe 3.0 x4! Правда, с обоснованием у него, скорее всего, возникнут сложности. В лучшем случае получим ответ, что такие накопители поддерживают PCIe 3.0 x4, а пропускная способность интерфейса имеет значение. Иметь-то имеет, однако все разговоры об этом начались только тогда, когда некоторым накопителям на некоторых операциях стало тесно в рамках «обычного» SATA. Но ведь между его 600 МБ/с и (столь же теоретическими) 4 ГБ/с интерфейса PCIe 3.0 x4 - просто пропасть, причем заполненная массой вариантов! А вдруг и одной линии PCIe 3.0 хватит, поскольку это уже в полтора раза больше SATA600? Масла в огонь подливают производители контроллеров, грозящиеся в бюджетной продукции перейти на PCIe 3.0 x2, а также тот факт, что у многих пользователей и такого-то нет. Точнее, теоретически есть, но высвободить их можно, лишь переконфигурировав систему или даже что-то в ней поменяв, чего делать не хочется. А вот купить топовый твердотельный накопитель - хочется, но есть опасения, что пользы от этого не будет совсем никакой (даже морального удовлетворения от результатов тестовых утилит).

Но так это или нет? Иными словами, нужно ли действительно ориентироваться исключительно на поддерживаемый режим работы - или все-таки на практике можно поступиться принципами ? Именно это мы сегодня и решили проверить. Пусть проверка будет быстрой и не претендующей на исчерпывающую полноту, однако полученной информации должно оказаться достаточно (как нам кажется) хотя бы для того, чтобы задуматься... А пока вкратце ознакомимся с теорией.

PCI Express: существующие стандарты и их пропускная способность

Начнем с того, что́ представляет собой PCIe и с какой скоростью этот интерфейс работает. Часто его называют «шиной», что несколько неверно идеологически: как таковой шины, с которой соединены все устройства, нет. На деле имеется набор соединений «точка-точка» (похожий на многие другие последовательные интерфейсы) с контроллером в середине и присоединенными к нему устройствами (каждое из которых само по себе может быть и концентратором следующего уровня).

Первая версия PCI Express появилась почти 15 лет назад. Ориентация на использование внутри компьютера (нередко - и в пределах одной платы) позволила сделать стандарт скоростным: 2,5 гигатранзакции в секунду. Поскольку интерфейс последовательный и дуплексный, одна линия PCIe (x1; фактически атомарная единица) обеспечивает передачу данных на скоростях до 5 Гбит/с. Однако в каждом направлении - лишь половина от этого, т. е. 2,5 Гбит/с, причем это полная скорость интерфейса, а не «полезная»: для повышения надежности каждый байт кодируется 10 битами, так что теоретическая пропускная способность одной линии PCIe 1.x составляет примерно 250 МБ/с в каждую сторону. На практике нужно еще передавать служебную информацию, и в итоге правильнее говорить о ≈200 МБ/с передачи пользовательских данных. Что, впрочем, на тот момент времени не только покрывало потребности большинства устройств, но и обеспечивало солидный запас: достаточно вспомнить, что предшественница PCIe в сегменте массовых системных интерфейсов, а именно шина PCI, обеспечивала пропускную способность в 133 МБ/с. И даже если рассматривать не только массовую реализацию, но и все варианты PCI, то максимумом были 533 МБ/с, причем на всю шину, т. е. такая ПС делилась на все подключенные к ней устройства. Здесь же 250 МБ/с (поскольку и для PCI приводится обычно полная, а не полезная пропускная способность) на одну линию - в монопольном использовании. А для устройств, которым нужно больше, изначально была предусмотрена возможность агрегирования нескольких линий в единый интерфейс, по степеням двойки - от 2 до 32, т. е. предусмотренный стандартом вариант х32 в каждую сторону мог передавать уже до 8 ГБ/с. В персональных компьютерах х32 не использовался из-за сложности создания и разведения соответствующих контроллеров и устройств, так что максимумом стал вариант с 16 линиями. Использовался он (да и сейчас используется) в основном видеокартами, поскольку большинству устройств столько не требуется. Вообще, немалому их количеству и одной линии вполне достаточно, но некоторые применяют с успехом и х4, и х8: как раз по накопительной теме - RAID-контроллеры или SSD.

Время на месте не стояло, и около 10 лет назад появилась вторая версия PCIe. Улучшения касались не только скоростей, но и в этом отношении был сделан шаг вперед - интерфейс начал обеспечивать 5 гигатранзакций в секунду с сохранением той же схемы кодирования, т. е. пропускная способность удвоилась. И еще раз она удвоилась в 2010 году: PCIe 3.0 обеспечивает 8 (а не 10) гигатранзакций в секунду, но избыточность уменьшилась - теперь для кодирования 128 бит используется 130, а не 160, как ранее. В принципе, и версия PCIe 4.0 с очередным удвоением скоростей уже готова появиться на бумаге, но в ближайшее время в железе мы ее массово вряд ли увидим. На самом деле и PCIe 3.0 до сих пор в массе платформ используется совместно с PCIe 2.0, потому что и производительность последней для многих сфер применения просто... не нужна. А где нужна - работает старый добрый метод агрегации линий. Только каждая из них стала за прошедшие годы вчетверо быстрее, т. е. PCIe 3.0 х4 - это PCIe 1.0 x16, самый быстрый слот в компьютерах середины нулевых. Именно этот вариант поддерживают топовые контроллеры SSD, и именно его рекомендуется использовать. Понятно, что если такая возможность есть - много не мало. А если ее нет? Будут ли возникать какие-то проблемы, и если да, то какие? Вот с этим-то вопросом нам и предстоит разобраться.

Методика тестирования

Провести тесты с разными версиями стандарта PCIe несложно: практически все контроллеры позволяют использовать не только поддерживаемый ими, но и все более ранние. Вот с количеством линий - сложнее: нам хотелось непосредственно протестировать и варианты с одной-двумя линиями PCIe. Используемая нами обычно плата Asus H97-Pro Gamer на чипсете Intel H97 полного набора не поддерживает, но кроме «процессорного» слота х16 (который обычно и используется) на ней есть еще один, работающий в режимах PCIe 2.0 х2 или х4. Вот этой тройкой мы и воспользовались, добавив к ней еще и режим PCIe 2.0 «процессорного» слота, дабы оценить, есть ли разница. Все-таки в этом случае между процессором и SSD посторонних «посредников» нет, а вот при работе с «чипсетным» слотом - есть: собственно чипсет, фактически соединяющийся с процессором тем же PCIe 2.0 x4. Можно было добавить еще несколько режимов работы, но основную часть исследования мы все равно собирались провести на другой системе.

Дело в том, что мы решили воспользоваться случаем и заодно проверить одну «городскую легенду», а именно поверие о полезности использования топовых процессоров для тестирования накопителей. Вот и взяли восьмиядерный Core i7-5960X - родственника обычно применяемого в тестах Core i3-4170 (это Haswell и Haswell-E), но у которого ядер в четыре раза больше. Кроме того, обнаруженная в закромах плата Asus Sabertooth X99 нам сегодня полезна наличием слота PCIe x4, на деле способного работать как х1 или х2. В этой системе мы протестировали три варианта х4 (PCIe 1.0/2.0/3.0) от процессора и чипсетные PCIe 1.0 х1, PCIe 1.0 х2, PCIe 2.0 х1 и PCIe 2.0 х2 (во всех случаях чипсетные конфигурации отмечены на диаграммах значком (c) ). Есть ли смысл сейчас обращаться к первой версии PCIe, с учетом того, что вряд ли найдется хоть одна плата с поддержкой только этой версии стандарта, способная загрузиться с NVMe-устройства? С практической точки зрения - нет, а вот для проверки априори предполагаемого соотношения PCIe 1.1 х4 = PCIe 2.0 х2 и подобных оно нам пригодится. Если проверка покажет, что масштабируемость шины соответствует теории, значит, и неважно, что нам не удалось пока получить практически значимые способы подключения PCIe 3.0 x1/х2: первый будет идентичен как раз PCIe 1.1 х4 или PCIe 2.0 х2, а второй - PCIe 2.0 х4. А они у нас есть.

В плане ПО мы ограничились только Anvil’s Storage Utilities 1.1.0: разнообразные низкоуровневые характеристики накопителей она измеряет неплохо, а ничего другого нам и не нужно. Даже наоборот: любое влияние других компонентов системы является крайне нежелательным, так что низкоуровневая синтетика для наших целей безальтернативна.

В качестве «рабочего тела» мы использовали Patriot Hellfire емкостью 240 ГБ . Как было установлено при его тестировании, это не рекордсмен по производительности, но его скоростные характеристики вполне соответствуют результатам лучших SSD того же класса и той же емкости. Да и более медленные устройства на рынке уже есть, причем их будет становиться все больше. В принципе, можно будет повторить тесты и с чем-нибудь более быстрым, однако, как нам кажется, необходимости в этом нет - результаты предсказуемы. Но не станем забегать вперед, а посмотрим, что же у нас получилось.

Результаты тестов

Тестируя Hellfire, мы обратили внимание на то, что максимальную скорость на последовательных операциях из него можно «выжать» лишь многопоточной нагрузкой, так что это тоже надо принимать во внимание на будущее: теоретическая пропускная способность на то и теоретическая, что «реальные» данные, полученные в разных программах по разным сценариям, будут больше зависеть не от нее, а от этих самых программ и сценариев - в том случае, конечно, когда не помешают обстоятельства непреодолимой силы:) Как раз такие обстоятельства мы сейчас и наблюдаем: выше уже было сказано, что PCIe 1.x x1 - это ≈200 МБ/с, и именно это мы и видим. Две линии PCIe 1.x или одна PCIe 2.0 - вдвое быстрее, и именно это мы и видим. Четыре линии PCIe 1.x, две PCIe 2.0 или одна PCIe 3.0 - еще вдвое быстрее, что подтвердилось для первых двух вариантов, так что и третий вряд ли будет отличаться. То есть в принципе масштабируемость, как и предполагалось, идеальная: операции линейные, флэш с ними справляется хорошо, так что интерфейс имеет значение. Флэш перестает справляться хорошо на PCIe 2.0 x4 для записи (значит, подойдет и PCIe 3.0 x2). Чтение «может» больше, но последний шаг дает уже полутора-, а не двукратный (каким он потенциально должен быть) прирост. Также отметим, что заметной разницы между чипсетным и процессорным контроллером нет, да и между платформами тоже. Впрочем, LGA2011-3 немного впереди, но на самую малость.

Все ровно и красиво. Но шаблоны не рвет : максимум в этих тестах составляет лишь немногим больше 500 МБ/с, а это вполне по силам даже SATA600 или (в приложении к сегодняшнему тестированию) PCIe 1.0 х4 / PCIe 2.0 х2 / PCIe 3.0 х1 . Именно так: не стоит пугаться выпуску бюджетных контроллеров под PCIe х2 или наличию лишь такого количества линий (причем версии стандарта 2.0) в слотах М.2 на некоторых платах, когда больше-то и не нужно. Иногда и столько не нужно: максимальные результаты достигнуты при очереди в 16 команд, что для массового ПО не типично. Чаще встречается очередь с 1-4 командами, а для этого обойтись можно и одной линией самого первого PCIe и даже самым первым SATA. Впрочем, накладные расходы и прочее имеют место быть, так что быстрый интерфейс полезен. Однако излишне быстрый - разве что не вреден.

А еще в этом тесте по-разному ведут себя платформы, причем с единичной очередью команд - принципиально по-разному. «Беда» вовсе не в том, что много ядер - плохо. Они тут все равно не используются, разве что одно, и не настолько, чтоб вовсю развернулся буст-режим. Вот и имеем разницу где-то в 20% по частоте ядер и полтора раза по кэш-памяти - она в Haswell-E работает на более низкой частоте, а не синхронно с ядрами. В общем, топовая платформа может пригодиться разве что для вышибания максимума «йопсов» посредством максимально многопоточного режима с большой глубиной очереди команд. Жаль только, что с точки зрения практической работы это совсем уж сферическая синтетика в вакууме:)

На записи положение дел принципиально не изменилось - во всех смыслах. Но, что забавно, на обеих системах самым быстрым оказался режим PCIe 2.0 х4 в «процессорном» слоте. На обеих! И при многократных проверках/перепроверках. Тут уж поневоле задумаешься, нужны ли эти ваши новые стандарты или лучше вообще никуда не торопиться...

При работе с блоками разного размера теоретическая идиллия разбивается о то, что повышение скорости интерфейса все же имеет смысл. Результирующие цифры такие, что хватило бы пары линий PCIe 2.0, но реально в таком случае производительность ниже, чем у PCIe 3.0 х4, пусть и не в разы. И вообще тут бюджетная платформа топовую «забивает» в куда большей степени. А ведь как раз такого рода операции в основном в прикладном ПО и встречаются, т. е. эта диаграмма - наиболее приближенная к реальности. В итоге нет ничего удивительного, что никакого «вау-эффекта» толстые интерфейсы и модные протоколы не дают. Точнее, переходящему с механики - дадут, но ровно такой же, какой ему обеспечит любой твердотельный накопитель с любым интерфейсом.

Итого

Для облегчения восприятия картины по больнице в целом мы воспользовались выдаваемым программой баллом (суммарным - по чтению и записи), проведя его нормирование по «чипсетному» режиму PCIe 2.0 x4: на данный момент именно он является наиболее массово доступным, поскольку встречается даже на LGA1155 или платформах AMD без необходимости «обижать» видеокарту. Кроме того, он эквивалентен PCIe 3.0 x2, который готовятся освоить бюджетные контроллеры. Да и на новой платформе AMD АМ4, опять же, именно этот режим как раз можно получить без влияния на дискретную видеокарту.

Итак, что мы видим? Применение PCIe 3.0 x4 при наличии возможности является, безусловно, предпочтительным, но не необходимым: NVMe-накопителям среднего класса (в своем изначально топовом сегменте) он приносит буквально 10% дополнительной производительности. Да и то - за счет операций в общем-то не столь уж часто встречающихся на практике. Для чего же в данном случае реализован именно этот вариант? Во-первых, была такая возможность, а запас карман не тянет. Во-вторых, есть накопители и побыстрее, чем наш тестовый Patriot Hellfire. В-третьих, есть такие области деятельности, где «атипичные» для настольной системы нагрузки - как раз вполне типичные. Причем именно там наиболее критично быстродействие системы хранения данных или, по крайней мере, возможность сделать ее часть очень быстрой. Но к обычным персональным компьютерам это все не относится.

В них, как видим, и использование PCIe 2.0 x2 (или, соответственно, PCIe 3.0 х1) не приводит к драматическому снижению производительности - лишь на 15-20%. И это несмотря на то, что потенциальные возможности контроллера в этом случае мы ограничили в четыре раза! Для многих операций и такой пропускной способности достаточно. Вот одной линии PCIe 2.0 уже недостаточно, поэтому контроллерам имеет смысл поддерживать именно PCIe 3.0 - и в условиях жесткой нехватки линий в современной системе это будет работать неплохо. Кроме того, полезна ширина х4 - даже при отсутствии поддержки современных версий PCIe в системе она все равно позволит работать с нормальной скоростью (пусть и медленнее, чем могло бы потенциально), если найдется более-менее широкий слот.

В принципе, большое количество сценариев, в которых узким местом оказывается собственно флэш-память (да, это возможно и присуще не только механике), приводит к тому, что четыре линии третьей версии PCIe на этом накопителе обгоняют одну первой примерно в 3,5 раза - теоретическая же пропускная способность этих двух случаев различается в 16 раз. Из чего, разумеется, не следует, что нужно спешно бежать осваивать совсем медленные интерфейсы - их время ушло безвозвратно. Просто многие возможности быстрых интерфейсов могут быть реализованы лишь в будущем. Или в условиях, с которыми обычный пользователь обычного компьютера никогда в жизни непосредственно не столкнется (за исключением любителей меряться известно чем). Собственно, и всё.

И PCI-X представляют собой щелевые разъемы, имеющие контакты с шагом 0,05 дюйма. Слоты расположены несколько дальше от задней панели, чем ISA/EISA или MCA. Компоненты карт PCI расположены на левой поверхности плат. По этой причине крайний PCI-слот обычно совместно использует посадочное место адаптера (прорезь на задней стенке корпуса) с соседним ISA-слотом. Такой слот называют разделяемым (shared slot), в него может устанавливаться либо карта ISA, либо PCI.

Карты PCI могут предназначаться для интерфейсных сигналов уровня 5 В и 3,3 В, а также быть универсальными. Слоты PCI имеют уровни сигналов, соответствующие питанию микросхем PCI-устройств системной платы (включая главный мост): либо 5 В, либо 3,3 В. Во избежание ошибочного подключения слоты имеют ключи, определяющие номинал напряжения. Ключами являются пропущенные ряды контактов 12, 13 и/или 50, 51:

  • для слота на 5 В ключ (перегородка) расположен на месте контактов 50, 51 (ближе к передней стенке корпуса); такие слоты отменены в PCI 3.0;
  • для слота на 3,3 В перегородка находится на месте контактов 12, 13 (ближе к задней стенке корпуса);
  • на универсальных слотах перегородок нет;
  • на краевых разъемах карт 5 В имеются ответные прорези только на месте контактов 50, 51; такие карты отменены в PCI 2.3;
  • на картах 3,3 В прорези только на месте контактов 12, 13;
  • на универсальных картах имеется оба ключа (две прорези).

Ключи не позволяют установить карту в слот с неподходящим напряжением питания. Карты и слоты различаются лишь питанием буферных схем, которое поступает с линий +V I/O:

  • на слоте «5 В» на линии +V I/O подается + 5 В;
  • на слоте «3,3 В» на линии +V I/O подается + (3,3–3,6) В;
  • на карте «5 В» буферные микросхемы рассчитаны только на питание + 5 В;
  • на карте «3,3 В» буферные микросхемы рассчитаны только на питание + (3,3– 3,6) В;
  • на универсальной карте буферные микросхемы допускают оба варианта питания и будут нормально формировать и воспринимать сигналы по спецификациям 5 или 3,3 В, в зависимости от типа слота, в который установлена карта (то есть от напряжения на контактах + V I/O).

На слотах обоих типов присутствуют питающие напряжения + 3,3, + 5, + 12 и –12 В на одноименных линиях. В PCI 2.2 определена дополнительная линия 3.3Vaux - «дежурное» питание + 3,3 В для устройств, формирующих сигнал PME# при отключенном основном питании.

ПРИМЕЧАНИЕ!

Выше приведены положения из официальных спецификаций PCI. На современных системных платах пока чаще всего встречаются слоты, по ключу являющиеся 5вольтовыми. Однако при этом напряжение на линиях +V I/O и уровни сигналов интерфейса являются 3,3-вольтовыми. В этих слотах нормально работают все современные карты с 5-вольтовыми ключами - их интерфейсные схемы работают при питании как 3,3, так и 5 В. Интерфейс с 5-вольтовым питанием может работать только на частоте до 33 МГц. «Настоящие» 5-вольтовые системные платы были только для процессоров 486 и первых моделей Pentium.

Наибольшее распространение получили 32-битные слоты, заканчивающиеся контактами A62/B62. 64-битные слоты встречаются реже, они длиннее и заканчиваются контактами A94/B94. Конструкция разъемов и протокол позволяют устанавливать 64-битные карты как в 64-битные, так и в 32-битные разъемы, и наоборот, 34-битные карты как в 32-битные, так и в 64-битные разъемы. При этом разрядность обмена будет соответствовать слабейшему компоненту.

Для сигнализации об установке карты и потребляемой ею мощности на разъемах PCI предусмотрено два контакта - PRSNT1# и PRSNT2#, из которых хотя бы один соединяется на карте с шиной GND. С их помощью система может определить присутствие карты в слоте и ее энергопотребление. Кодирование потребляемой мощности приведено в таблице; здесь приведены значения и для малогабаритных карт Small PCI.

Карты и слоты PCI-X по механическим ключам соответствуют 3,3-вольтовым картам и слотам; напряжение питания + V I/O для PCI-X Mode 2 устанавливается 1,5 В.

На рисунке изображены карты PCI в конструктиве PC/AT-совместимых компьютеров. Полноразмерные карты (Long Card, 107×312 мм) используются редко, чаще применяются укороченные платы (Short Card, 107×175 мм), но многие карты имеют и меньшие размеры. Карта имеет обрамление (скобку), стандартное для конструктива ISA (раньше встречались карты и с обрамлением в стиле MCA IBM PS/2). У низкопрофильных карт (Low Profile) высота не превышает 64,4 мм; их скобки также имеют меньшую высоту. Такие карты могут устанавливаться вертикально в 19-дюймовые корпуса высотой 2U (около 9 см).

Назначение выводов разъема карт PCI/PCI-X приведено в таблице ниже.

Ряд B Ряд A Ряд B Ряд A
-12В 1 TRST# GND/M66EN 1 49 AD9
TCK 2 +12 В GND/Ключ 5 В/MODE 2 50 GND/Ключ 5 В
GND 3 TMS GND/Ключ 5 В 51 GND/Ключ 5 В
TDO 4 TDI AD8 52 C/BE 0 #
+5 В 5 +5 В AD7 53 +3,3 В
+5 В 6 INTA# +3,3 В 54 AD6
INTB# 7 INTC# AD5 55 AD4
INTD# 8 +5 В AD3 56 GND
PRSNT1# 9 ECC 5 2 GND 57 AD2
ECC4 2 10 +V I/O AD1 58 AD0
PRSNT2# 11 ECC 3 2 +V I/O 59 +V I/O
GND/Ключ 3,3 В 12 GND/Ключ 3,3 В ACK 64 #/ ECC 1 60 REQ 64 #/ ECC 6
GND/Ключ 3,3 В 13 GND/Ключ 3,3 В +5 В 61 +5 В
ECC2 2 14 3.3Vaux 3 +5 В 62 +5 В
GND 15 RST# Конец 32-битного разъема
CLK 16 +V I/O Резерв 63 GND
GND 17 GNT# GND 64 C/BE 7 #
REQ# 18 GND C/BE 6 # 65 C/BE 5 #
+V I/O 19 PME# 3 C/BE 4 # 66 +V I/O
AD31 20 AD30 GND 67 PAR 64 /ECC 7 2
AD29 21 +3,3 В AD63 68 AD62
GND 22 AD28 AD61 69 GND
AD27 23 AD26 +V I/O 70 AD60
AD25 24 GND AD59 71 AD58
+3,3 В 25 AD24 AD57 72 GND
C/BE3# 26 IDSEL GND 73 AD56
AD23 27 +3,3 В AD55 74 AD54
GND 28 AD22 AD53 75 +V I/O
AD21 29 AD20 GND 76 AD52
AD19 30 GND AD51 77 AD50
+3.3 В 31 AD18 AD49 78 GND
AD17 32 AD16 +V I/O 79 AD48
C/BE 2 # 33 +3,3 В AD47 80 AD46
GND 34 FRAME# AD45 81 GND
IRDY# 35 GND GND 82 AD44
+3,3 В 36 TRDY# AD43 83 AD42
DEVSEL# 37 GND AD41 84 +V I/O
PCIXCAP 4 38 STOP# GND 85 AD40
LOCK# 39 +3,3 В AD39 86 AD38
PERR# 40 SMBCLK 5 AD37 87 GND
+3,3 В 41 SMBDAT 5 +V I/O 88 AD36
SERR# 42 GND AD35 89 AD34
+3,3 В 43 PAR/ECC0 AD33 90 GND
C/BE 1 # 44 AD15 GND 91 AD32
AD14 45 +3,3 В Резерв 92 Резерв
GND 46 AD13 Резерв 93 GND
AD12 47 AD11 GND 94 Резерв
AD10 48 GND Конец 64-битного разъема

Примечание!

1 - Сигнал M66EN определен в PCI 2.1 только для слотов на 3,3 В.
2 - Сигнал введен в PCI-X 2.0 (прежде был резерв).
3 - Сигнал введен в PCI 2.2 (прежде был резерв).
4 - Сигнал введен в PCI-X (в PCI - GND).
5 - Сигналы введены в PCI 2.3. В PCI 2.0 и 2.1 контакты A40 (SDONE#) и A41 (SBOFF#) использовались для слежения за кэшем; в PCI 2.2 они были освобождены (для совместимости на системной плате эти цепи подтягивались к высокому уровню резисторами 5 кОм).

На слотах PCI имеются контакты для тестирования адаптеров по интерфейсу JTAG (сигналы TCK, TDI, TDO, TMS и TRST#). На системной плате эти сигналы задействованы не всегда, но они могут и организовывать логическую цепочку тестируемых адаптеров, к которой можно подключить внешнее тестовое оборудование. Для непрерывности цепочки на карте, не использующей JTAG, должна быть связь TDI–TDO.

На некоторых старых системных платах позади одного из слотов PCI встречается разъем Media Bus, на который выводятся сигналы ISA. Он предназначен для размещения на карте PCI звукового чипсета, предназначенного для шины ISA. Большинство сигналов PCI соединяются по чистой шинной топологии, то есть одноименные контакты слотов одной шины PCI электрически соединяются друг с другом. Из этого правила есть несколько исключений:

  • сигналы REQ# и GNT# индивидуальны для каждого слота, они соединяют слот с арбитром (обычно - мостом, подключающим эту шину к вышестоящей);
  • сигнал IDSEL для каждого слота соединяется (возможно, через резистор) с одной из линий AD, задавая номер устройства на шине;
  • сигналы INTA#, INTB#, INTC#, INTD# циклически сдвигаются по контактам, обеспечивая распределение запросов прерываний;
  • сигнал CLK заводится на каждый слот индивидуально от своего выхода буфера синхронизации; длина подводящих проводников выравнивается, обеспечивая синхронность сигнала на всех слотах (для 33 МГц допуск ± 2 нс, для 66 МГц - ± 1 нс).

Вот мы и добрались до COM порта. Но с ним все не так просто как с LPT, и его полноценное использование потребует значительно больших усилий. Главной загвоздкой является и его главное преимущество - передача данных в последовательном виде. Если в LPT байт данных передается по 8-ми линиям по биту на каждую, и состояние каждой линии можно было легко посмотреть, то в COM порту байт данных передается бит за битом по одной линии (относительно земли, конечно) и посмотреть что там передается с помощью одних светодиодов не удастся. Для этого нужно специальное устройство - преобразователь потока последовательных данных в парраллельный, т.н. USART (Universal Synchronous/Asynchronous Receiver Transmitter). Например, он есть в составе материнской платы компьютера, снабженного COM портом, в любом более мение серьезном микроконтроллере.


Надеюсь, вы еще пали духом в освоении COM порта. Все не так уж и мрачно. Некоторые результаты можно получить и без USART. Сформулируем задачу, которую реализуем на начальном этапе работы с COM портом:


"Хочу что бы к компьютеру через COM порт подключался светодиод. Запускаю программу. Далаю какое-то действие в этой программе, светодиод загорается, делаю другое - светодиод тухнет."


Задача довольно специфичная (с учетом того, что USART не используется) и является чистой "самопальщиной", но вполне реализуема и работоспособна. Давайте приступим к ее реализации.


1. COM порт

Опять берем системный блок вашего ПК и смотрим в тыловую часть. Примечаем там 9-ти штырьковй разъем - это и есть COM порт. Реально их может быть неколько (до 4-х). На моем ПК установлено два COM порта (см. фото).


2. Удлинитель COM порта


3. Аппаратная часть

С аппаратной частью нам тоже придется "повозиться", в том смысле что она будет сложнее чем с первым устройством для LPT порта. Дело в том что протокол RS-232 по которому идет обмен данными в COM порту, имеет несколько отличное соотношение логическое состояние - напряжение. Если обычно это логический 0 0 В, логическая 1 +5 В, то в RS-232 это соотношение следующее: логический 0 +12 В, логическая 1 -12 В.

И например, получив -12 В не сразу понятно что с этим напряжением делать. Обычно проводят преобразование уровней RS-232 в ТТЛ (0, 5 В). Самый простой вариант - стабилитроны. Но я предлагаю сделать этот преобразователь на специальной микросхеме. Называется она MAX232.

Теперь давайте посмотрим, а какие сигналы из COM порта мы можем посмотреть на светодиодах? В действительности, в COM порту есть аж 6 независимых линий, представляющих интерес для разработчика устройств сопряжения. Две из них пока для нас недоступны - линии по передаче последовательных данных. А вот оставшиеся 4 предназначены для управления и индикации процесса передачи данных и мы сможем "передалать" их под свои нужды. Две из них предназначены для управления со стороны внешнего устройства и мы их пока трогать не будем, а вот последние две оставшиеся линии мы сейчас и поиспользуем. Они называются:

  • RTS - Запрос на передачу. Линия взаимодействия, которая показывает, что компьютер готов к приему данных.
  • DTR - Компьютер готов. Линия взаимодействия, которая показывает, что компьютер включен и готов к связи.

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

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

А вот ее практичекая реализация. Я думаю вы меня простите, что я сделал ее в таком стремном макетном варианте, ибо делать плату для такой "высоко продуктивной" схемы не хочется.


4. Программная часть

Тут все попроще. Давайте создадим Windows приложение в Microsoft Visual C++ 6.0 на основе MFC для управления двумя линиями взаимодействия COM порта. Для этого создаем новый проект MFC и указываем ему имя, например, TestCOM . Далее выбираем вариант построения на основе диалога.

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

Class CTestCOMDlg: public CDialog { // Construction public: CTestCOMDlg(CWnd* pParent = NULL); // standard constructor HANDLE hFile;

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

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) { MessageBox("Не удалось открыть порт!", "Ошибка", MB_ICONERROR); } else { MessageBox("Порт успешно открыт", "Ok", MB_OK); }

С помощью стандарной функции Win API CreateFile() открываем COM-порт COM2 . Далее проверяем успешность открытия с выводом информационного сообщения. Вот тут надо сделать важное замечание: COM2 - это в моем компьютере, а на Вашем компьютере Вы могли подключить его к другому COM порту. Соответственно, его имя нужно изменить на то, кокай порт Вы используете. Посмотреть, какие номера портов присутствуют на Вашем компьютере, можно так: Пуск -> Настройка -> Панель управления -> Система -> Оборудование -> Диспетчер устройств -> Порты (COM и LPT) .

В итоге, функция CTestCOMDlg::OnInitDialog() , расположенная в файле TestCOMDlg.cpp , класса нашего диалога должна принять вид:

BOOL CTestCOMDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application"s main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) { MessageBox("Не удалось открыть порт!", "Оштбка", MB_ICONERROR); } else { MessageBox("Порт успешно открыт", "Ok", MB_OK); } return TRUE; // return TRUE unless you set the focus to a control }

Теперь добавим обработчики кнопок управления линиями. Я дал им соответствующие имена: функция, которая устанавливает еденицу на линии DTR - OnDTR1(), 0 - OnDTR0(). Для линии RTS соответственно аналогичным образом. Напомню, что обработчик создается при двойном щелчке на кнопке. В итоге, эти четыре функции должны принять вид:

Void CTestCOMDlg::OnDTR1() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 6); } void CTestCOMDlg::OnDTR0() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 5); } void CTestCOMDlg::OnRTS1() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 4); } void CTestCOMDlg::OnRTS0() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 3); }

Поясню немного как они работают. Как видно, внитри себя они содержат вызов одной и той же Win API функции EscapeCommFunction() с двумя параметрами. Первый из них - это хэндл (HANDLE) на открытый порт, второй - специальный код действия, соответствующий необходимому состоянию линии.

Все, комилируем, запускаем. Если все хорошо, должны увидеть сообщение об успешном открытии порта. Далее, нажатием соответствующих кнопок мигаем светодиодами, подключенными к COM порту.

© Иванов Дмитрий
Декабрь 2006




Top