Как посмотреть pci устройства windows

Обновлено: 01.07.2024

PCI Express (PCIe, PCI ex) – это последовательная компьютерная шина, которая пришла на замену устаревающим PCI и AGP. Сейчас PCI Express является основным способом подключения комплектующих к компьютеру. С ее помощью подключаются твердотельные накопители (SSD), видеокарты, звуковые карты, платы расширения и т. д.

PCI Express появилась в 2002 году и с тех пор вышло уже 4 ее версии (PCI Express 1.0, 2.0, 3.0 и 4.0), а в ближайшем будущем появится и 5-я версия (PCI Express 5.0). Все эти версии обладают полной совместимостью, что позволяет устанавливать новые устройства в старые платы и наоборот. Тем не менее, в некоторых случаях все-таки необходимо знать, какая версия PCI Express используется на материнской плате. Об этом мы и расскажем в данной статье.

Версия PCI Express в характеристиках материнской платы

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

Чтобы найти характеристики платы вам потребуется знать точное название ее модели. Узнать название модели можно из стандартной утилиты « Сведения о системе », которая входит в состав операционной системы Windows. Для этого нажмите комбинацию клавиш Win-R и выполните команду « msinfo32 ». В открывшемся окне, в разделе «Сведения о системе», будет указана модель основной платы. Это и есть название вашей материнской платы.

название материнской платы

Дальше вам нужно ввести название материнской платы в любую поисковую систему (например, в Google) и перейти на страницу данной платы на официальном сайте ее производителя.

поиск материнской платы

На странице материнской платы нужно найти раздел « Характеристики » или « Спецификации ».

раздел Спецификации

Здесь будут описаны все основные характеристики платы. Среди прочего здесь будет указана и версия PCI Express. В данном случае на скриншоте видно, что плата оснащена разъемом PCI Express 3.0.

разъем PCI Express 3.0

Как видно, если есть название материнской платы, то узнать версию PCI Express не составляет труда.

Версия PCI Express в программе HWiNFO64

Если описанный выше способ вызывает у вас какие-то трудности, то вы можете воспользоваться альтернативным вариантом. Вы можете посмотреть версию PCI Express в бесплатной программе HWiNFO64. Данная программа предназначена для просмотра технических характеристик компьютера. Среди прочего в ней можно посмотреть и версию PCI Express, которую поддерживает материнская плата.

версия PCI Express в HWiNFO64

Для этого нужно скачать HWiNFO64 с официального сайта и запустить на своем компьютере. После этого нужно открыть раздел « Motherboard » и найти строку « PCI Express Version Supported ». Здесь будет указана нужная вам информация.

Версия PCI Express в программе GPU-Z

На некоторых сайтах рекомендуют смотреть версию PCI Express в программе GPU-Z. Но, этот способ не совсем корректный и во многих случаях дает неверный результат.

версия PCI Express в GPU-Z

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

подсказазка о версии PCI Express в GPU-Z

В этом можно убедиться, если навести курсор на указанную информацию и дождаться появления подсказки.

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

В качестве минимальной базы для работы с PCI-устройствами будем использовать ядро, поддерживающее спецификацию Multiboot. Так удастся избежать необходимости писать собственный загрузочный сектор и загрузчик (loader). Кроме того, этот вопрос и так отлично освещен в интернете. В качестве загрузчика будет выступать GRUB. Грузиться мы будем с флэшки, так как с нее удобно загружать и виртуальную, и реальную машину. В качестве виртуальной машины будем использовать QEMU. В качестве реальной машины должна выступать машина с обычным BIOS-ом (не UEFI), поддерживающим загрузку с USB-HDD (обычно присутствует опция Legacy USB support). Для работы понадобятся Ubuntu Linux со следующими программами: expect, qemu, grub (их можно легко установить при помощи команды sudo apt-get install). Используемый gcc должен компилировать 32х битный код.

Рассмотрим первый шаг – создание ядра, поддерживающего спецификацию Multiboot. В случае использования GRUB-а в качестве загрузчика ядро будет создаваться из 3-х файлов:
Kernel.c – основной файл с кодом нашей программы и процедурой main();
Loader.s – содержит заголовок мультизагрузчика для GRUB;
Linker.ld – скрипт компоновщика ld, в котором в частности указывается, по какому адресу будет располагаться ядро.


Скрипт компоновщика указывает, как слинковать уже скомпилированные объектные файлы. В первой строчке указано, что точкой входа в нашем ядре будет адрес с меткой «loader». Далее в скрипте указано, что начиная с адреса 0x00100000 (1Мб) будет располагаться секция text. Секции rodata, data и bss выровнены по 0x1000 (4Кб) и располагаются после секции text.

Field Name

На момент передачи управления ядру процессор работает в защищенном режиме с выключенной страничной адресацией. Обработка прерываний от устройств отключена. GRUB не формирует стек для загружаемого ядра, и это первое что должна сделать операционная система. В нашем случае под стек выделяется 16Кб. Последней выполненной ассемблерной инструкцией будет инструкция call kmain, которая передает управление коду на C, а именно функции void kmain(void).

Пока здесь нет ничего интересного. С точки зрения загрузки в нем не должно присутствовать ничего специфичного, только точка входа для кода на С. Для вывода на экран была добавлена реализация функции printf, найденная на просторах Интернета, и несколько функций для работы с видеопамятью, таких как putchar, clear_screen.

Для сборки ядра будет использоваться следующий простой makefile:


Теперь у нас есть ядро, которое можно загрузить. Пора проверить, что оно действительно загружается. Установим GRUB на флешку и скажем ему загружать наше ядро при старте. Для этого нужно выполнить следующие шаги:

1. Создать раздел на флешке, отформатировать его в файловую систему, поддерживаемую GRUB-ом (в нашем случае это файловая система FAT32). Мы воспользовались утилитой Disk Utility из комплекта Ubuntu, которая позволила создать раздел:


2. Примонтировать флешку и создать каталог /boot/grub/. Скопировать в него из /usr/lib файлы stage1, stage2, fat_stage1_5. Создать текстовый файл menu.lst в директории /boot/grub/ и записать в него


Для установки GRUB-а на флешку используется expect-скрипт в файле grub_install.exp. Его содержимое:

В конкретном случае возможны другие номера дисков и названия устройств. В конечном итоге компиляция и запуск виртуальной машины должны выполняться командой make start. Эта команда из makefile выполнит установку GRUB на флэшку с использованием скрипта grub_install.exp, а затем запустит виртуальную машину QEMU с нашей программой. Поскольку все загружается с реальной флэшки, то с нее можно загрузить не только виртуальную машину QEMU, но и реальный компьютер.

Запущенная виртуальная машина QEMU с нашей программой выглядит следующим образом:


Теперь займемся основной задачей – перечисление всех имеющихся на компьютере PCI-устройств. PCI – это основная шина с устройствами на компьютере. В нее помимо обычных устройств, которые вставляются во всем известные слоты на материнской плате, также подключены устройства, вшитые в саму материнскую плату (так называемые On-board devices), а так же ряд контроллеров (например, USB) и мостов на другие шины (например, PCI-ISA bridge). Таким образом, PCI – это основная шина на компьютере, с которой начинается опрос всех его устройств.

С каждым PCI-устройством связана структура из 256-ти байт (PCI Configuration Space), в которой располагаются его настройки. Конфигурация устройства в конечном итоге сводится к записи и чтению данных из этой структуры. Для всех PCI-устройств чтение и запись данных происходит через 2 порта ввода-вывода:
0xcf8 — конфигурационный порт, в который записывается PCI-адрес;
0xcfc — порт данных, через который происходит чтение и запись данных по указанному в конфигурационном порту PCI-адресу.

При чтении данных из PCI Configuration Space можно получить информацию об устройстве, а записывая туда данные устройство можно настроить.

PCI имеет три независимых физических адресных пространства:Адресное пространство памяти устройства, адресное пространство ввода-вывода и пространство конфигурации.Конфигурационное пространство - это физическое пространство, уникальное для PCI. Поскольку PCI поддерживает устройства plug-and-play, устройства PCI не занимают фиксированное адресное пространство памяти или адресное пространство ввода-вывода, но операционная система определяет базовый адрес их отображения.

Когда система включена, BIOS обнаруживает шину PCI, определяет все устройства, подключенные к шине PCI, и их требования к конфигурации, а также выполняет настройку системы. Следовательно, все устройства PCI должны реализовывать пространство конфигурации, чтобы реализовать автоматическую настройку параметров и реализовать реальный принцип Plug and Play.

Общая длина конфигурационного пространства, определенного спецификацией шины PCI, составляет 256 Байты, информация о конфигурации хранится в определенном порядке и размерах. Первые 64 байта пространства конфигурации называются заголовком конфигурации. , Как и для всех устройств, основная функция заголовка конфигурации - идентифицировать устройство и определять способ доступа хоста к карте PCI (доступ ввода-вывода или доступ к памяти, а также информация о прерываниях). Остальные 192 байта называются пространством локальной конфигурации (областью, связанной с устройством), которая в основном определяет характеристики локальной шины на карте, базовый адрес и диапазон локального пространства и т. Д.

Устройства PCI имеют три пространства: адресное пространство памяти, адресное пространство ввода-вывода и пространство конфигурации. Поскольку PCI поддерживает plug and play, устройства PCI не занимают фиксированное адресное пространство памяти или адресное пространство ввода-вывода, но базовый адрес сопоставления может быть определен операционной системой. Как это настроить? Это роль конфигурационного пространства.

img_c58b094a8ec5cdc8c7ad8d2ca34b04ba.jpe

Наиболее важные вещи в пространстве конфигурации:

Vendor ID: ID поставщика. ID известного производителя оборудования. FFFFh - недопустимый идентификатор поставщика, но его можно использовать, чтобы определить, существует ли устройство PCI.

Device ID: Идентификатор устройства. Идентификатор устройства определенного производителя. Операционная система использует идентификатор поставщика и идентификатор устройства для поиска соответствующего драйвера.

Class Code: Код класса. Всего имеется три байта, которые представляют собой код класса, код подкласса и интерфейс программирования. Код класса используется не только для различения типов устройств, но и для спецификации интерфейсов программирования, поэтому существуют универсальные драйверы.

IRQ Line: Номер IRQ. ПК использовался для управления 16 аппаратными прерываниями двумя микросхемами 8259. Теперь для поддержки симметричных мультипроцессоров существует APIC (Advanced Programmable Interrupt Controller), который поддерживает управление 24 прерываниями.

IRQ Pin: Контакт прерывания. PCI имеет 4 контакта прерывания.Этот регистр указывает, к какому контакту подключено устройство.

2. Как получить доступ к пространству конфигурации

Как получить доступ к пространству конфигурации? Доступен через 0xCF8h、0xCFCh Порт для достижения.

  • 0xCF8h: КОНФИГ_АДРЕС. Адресный порт пространства конфигурации PCI.
  • 0xCFCh: CONFIG_DATA. Порт данных конфигурации PCI.

Формат регистра CONFIG_ADDRESS:

31 бит: Включенный бит.
23:16 бит: номер шины.
15:11 бит: номер устройства.
10: 8 бит: номер функции.
7: 2 бита: номер регистра пространства конфигурации.
1: Бит 0: всегда «00». Это связано с тем, что порты CF8h и CFCh являются 32-битными портами.

img_4f0ca9622f597756632dffbad9cd4a6a.jpe

Теперь есть проблема-CF8h, порты CFCh 32-битные порты, как у Turbo C 16 бит Ни один из компиляторов языка C не поддерживает доступ к 32-битному порту. Как сделать? Мы можем использовать **_ _ emit _ Вставьте машинный код в программу. Каждый раз _ emit _ _ Это должно быть проблематично, поэтому мы должны инкапсулировать его как функцию. код показать, как показано ниже(Обратите внимание, что 66h - это 32-битный префикс инструкции)**:

В-третьих, проход через устройства PCI

Как перечислить устройства PCI? Мы можем попробовать все комбинации bus / dev / func, а затем определить, является ли полученный идентификатор поставщика FFFFh. Следующая программа использует этот метод для перечисления устройств PCI. В то же время, чтобы облегчить анализ данных, сохраните информацию о пространстве конфигурации каждого устройства в файл, чтобы его можно было анализировать медленно.

Код под Windows выглядит следующим образом:

Шина номер 0 - это встроенный чип на материнской плате (в основном южный мост), а типичным устройством, не являющимся материнской платой, является видеокарта. Информацию о PCI также можно увидеть в диспетчере устройств WindowsXP. Запустите «Диспетчер устройств», лучше всего установить режим просмотра «Просмотр устройств по подключению (V)». Найдите мою видеокарту и дважды щелкните ее, чтобы просмотреть ее свойства. Перейдите на страницу «Подробная информация» и найдите поле со списком как «Идентификатор оборудования». Можно увидеть одно из поведений“PCI/VEN_10DE&DEV_0110&CC_030000”, Что значитИдентификатор производителя - «10DE», идентификатор устройства - «0110», а код класса - «030000»., В соответствии с результатами, полученными программой.

Всем здравия!

Сегодняшняя заметка будет посвящена одной "простой" задаче — просмотру подключенных устройств к ПК (телефоны, флешки, адаптеры, принтеры и т.д. и т.п.).

Вообще, большинство пользователей привыкло получать эту информацию в "Моем компьютере". Однако, ряд устройств — там не отображается (я уж не говорю о тех устройствах, которые в настоящее время уже отключены от USB-порта, скажем (а ведь про них тоже можно кое-что узнать!)).

Примечание : ниже я затрону только универсальные способы решения вопроса, которые актуальны для разных версий Windows Vista*, 7, 8, 10.

ускорение ПК

Смотрим устройства

Подключенные в настоящее время

Вариант 1: мой компьютер + панель управления

Как сказал выше, это наиболее очевидный и простой вариант (правда, в "Моем компьютере" можно увидеть только флешки, диски, телефоны. (принтеров и сканеров, например, здесь нет) ).

Телефон подключен к USB-порту!

Телефон подключен к USB-порту!

В ней необходимо открыть раздел "Оборудование и звук" — там прежде всего интересны 2 вкладки: "Устройства и принтеры" и "Звук" .

Панель управления — находим джойстики, принтеры, сканеры и т.д.

Панель управления — находим джойстики, принтеры, сканеры и т.д.

Во вкладке "устройства и принтеры" можно увидеть все подключенные принтеры, сканеры, мышки, джойстики, и др. устройства мультимедиа.

Устройства и принтеры

Устройства и принтеры

Что касается каких-нибудь аудио-карт, микрофона и пр. — то их можно найти во вкладках "Воспроизведение" и "Запись" . Причем, в этой же вкладке эти устройства можно настроить: задать чувствительность, громкость, убрать шумы и т.д.

Воспроизведение, запись

Вариант 2: диспетчер устройств

Диспетчер устройств — это системная программа Windows, которая отображает всё подключенное оборудование. Кроме этого, в нем есть:

  • возможность отключить (и настроить) любое* из устройств;
  • возможность обновить драйвер (или выбрать один наиболее стабильный из нескольких);
  • диагностировать и устранить* конфликты меж разными устройствами, и многое другое.

Запуск диспетчера устройств - devmgmt.msc

Запуск диспетчера устройств - devmgmt.msc

Примечание : устройство, для которого не установлен драйвер — обычно располагается во вкладке "Другие устройства".

Диспетчер устройств!

Которые когда-то подключали к USB, но сейчас они отключены от компьютера

Не многие пользователи знают, что Windows запоминает все те устройства, которые вы когда-либо подключали к компьютеру (дату, их модель, тип и т.д.).

Нас в первую очередь интересуют USB-устройства — информация о них хранится в двух ветках реестра:

  • HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR
  • HKLM\SYSTEM\CurrentControlSet\Enum\USB

*

USBDeview (линк)

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

Разумеется, по каждому устройству можно будет посмотреть: дату и время, тип, идентиф. номера и т.д.

*

Кстати, USBDeview позволяет не только заниматься "просмотром", но также есть опции для деинсталляции устройства, его запрета, подготовки отчета и др.

USBDeview — смотрим когда подключалась флешка к компьютеру

USBDeview — смотрим, когда подключалась флешка к компьютеру

Кстати, если раскрыть свойства конкретного устройства — то здесь достаточно много информации о нем: имя, его тип, дата подкл., ID-производителя, класс и пр.

Имя устройства, дата подключения и пр.

Имя устройства, дата подключения и пр.

Что делать, если компьютер не видит устройство: флешку, телефон и т.д.

Это вопрос популярный, но не однозначный (и причин этому десятки!). Здесь я укажу лишь общие моменты, с которых нужно начать диагностику.

  1. сначала проверьте само устройство (телефон, флешку, карту памяти и т.д.) на другом ПК. Работает ли оно там?
  2. далее проверьте USB-порт проблемного компьютера — видит ли он другие устройства? Если USB-порт не работает — ознакомьтесь с этим;
  3. если вы используете удлинители, различные разветвители, адаптеры USB и пр. — на время диагностики отключите их;
  4. попробуйте задействовать USB-порты не только на передней панели системного блока, но и на задней (это для ПК);
  5. посмотрите, есть ли в диспетчере устройств контроллеры USB;

Корневой USB-концентратор

При отсутствии — проверьте, что у вас в BIOS/UEFI включен USB-контроллер!

Читайте также: