Gpio driver что это
Система в интегрированных каналах с использованием микросхемы (SoC) широко использует контакты ввода-вывода общего назначения (GPIO). для платформ на основе SoC Windows определяет общую абстракцию для оборудования GPIO, и эта абстракция требует поддержки из пространства имен Advanced Configuration and Power Interface (ACPI).
Абстракция GPIO поддерживается определениями спецификаций ACPI 5,0 , которые перечислены в этой статье.
чтобы убедиться, что контроллер GPIO соответствует всем требованиям к платформе Windows, ознакомьтесь с контрольным списком требований к контроллеру gpio.
Устройства GPIO Controller
Windows поддерживает контроллеры GPIO. Контроллеры GPIO предоставляют разнообразные функции для периферийных устройств, включая прерывания, сигналы ввода и выходные сигналы. Возможности GPIO моделируются в пространстве имен в качестве устройства контроллера GPIO. Расширение GPIO Framework (гпиоклкс) МОДЕЛИРУЕТ устройство GPIO-контроллера, разбивает его на несколько банков. Каждый банк ПИН-кодов имеет 64 или меньше настраиваемых ПИН. Банки в контроллере GPIO упорядочиваются относительно их положения в закреплениях, относительных от контроллера. Например, Банк 0 содержит контакты 0-31 на контроллере, Банк 1 содержит контакты 32-63 и т. д. Все банки имеют одинаковое количество ПИН-кодов, за исключением последнего банка, в котором может быть меньше. Банки являются значительными для встроенного по ACPI, так как встроенное по должно сообщать о сопоставлении ресурсов системного прерывания с банками, как описано в разделе об объектах пространства имен GPIO ниже.
Каждый ПИН-код в банке имеет набор параметров (например, выходные данные, прерывание с учетом уровня, передаваемый ввод и т. д.), описывающие настройку ПИН-кода.
Контроллеры GPIO и прерывания Активебос
Компонент некоторых контроллеров GPIO — это возможность создавать прерывания на обоих краях сигнала (подъемных или Активехигхных кромок, а также на Активелов краях). Это полезно в различных приложениях, включая интерфейс Button, где обе кнопки — события (одна сторона) и события освобождения кнопок (противоположные границы). Эта функция называется "Активебос".
Логически Активебос сигналы имеют как утвержденное, так и неутвержденное состояние, независимо от того, являются ли они недостижимыми (например, кнопками) или длительными утверждениями (например, вставляются в розетки наушников). Обнаружение границ для прерываний Активебос может быть реализовано в оборудовании контроллера GPIO (оборудование Активебос) или эмулироваться в программном обеспечении драйвера GPIO (эмуляция Активебос). Windows требует, чтобы контроллеры GPIO, реализующие активебос, использовали эмуляцию активебос. Это необходимо для обеспечения надежной обработки двойных прерываний для всех сценариев. Для поддержки эмуляции Активебос применяются следующие требования к оборудованию.
Контроллеры GPIO, поддерживающие прерывания Активебос, должны поддерживать прерывания режима уровня и должны поддерживать повторное программирование полярности прерывания динамически во время выполнения.
чтобы снизить риск возникновения ошибок ввода-вывода, Windows предпочитает использовать подключенные к памяти контроллеры gpio вместо контроллеров gpio, подключенных к SPB. на самом деле, для устройства массива кнопок Windows (PNP0C40) требуется, чтобы активебос gpio для этого устройства подключался к подключенному к памяти контроллеру gpio, а не к SPB-подключенному каналу. Чтобы определить, какие прерывания кнопки должны быть Активебос, ознакомьтесь с разделом устройства для кнопок в разделе другие объекты пространства имен ACPI .
чтобы установить детерминированное начальное состояние для сигналов прерывания активебос, стек устройств GPIO Windows гарантирует, что первый прерывание, созданное после соединения прерывания с драйвером, всегда будет соответствовать утвержденному состоянию сигнала. В стеке Далее предполагается, что состояние всех Активебос прерываний по умолчанию — низкий уровень логики (Активелов край). Если на вашей платформе это не так, можно переопределить значение по умолчанию, включив в пространство имен контроллера GPIO Device-Specific метод (_DSM). Дополнительные сведения об этом методе см. в разделе Device-Specificный метод контроллера GPIO (_DSM).
Третье требование в приведенном выше списке подразумевает, что драйвер устройства, использующего Активебос, может получить прерывание немедленно после инициализации (подключения к) прерывания, если сигнал в ПИН-коде GPIO находится в состоянии утвержденного. Это возможно и, скорее всего, для некоторых устройств (например, наушников) и должно поддерживаться в драйвере.
Для поддержки эмуляции Активебос драйвер контроллера GPIO должен включить эмуляцию Активебос ("явный вход в"), реализовав функцию обратного вызова CLIENT_ReconfigureInterrupt и установив флаг емулатеактивебос в базовой структуре данных, которую функция обратного вызова CLIENT_QueryControllerBasicInformation драйвера предоставляет гпиоклкс. Дополнительные сведения см. в статье драйверы общего назначения ввода-вывода (GPIO).
Объекты пространства имен GPIO
Контроллеры GPIO и периферийные устройства, подключаемые к ним, перечисляются с помощью ACPI. Соединение между ними описано с помощью дескрипторов ресурсов подключения GPIO. Дополнительные сведения см. в разделе 6.4.3.8, «дескрипторы соединений» спецификации ACPI 5,0.
Объекты идентификации и конфигурации устройств
Пространство имен устройства GPIO контроллера типа ACPI включает в себя следующее:
- Назначенный поставщиком идентификатор оборудования (_HID), соответствующий стандарту ACPI.
- Набор использованных ресурсов (_CRS).
- Уникальный идентификатор (_UID), если в пространстве имен имеется более одного экземпляра GPIO-контроллера (то есть два или более узла пространства имен с одинаковыми объектами идентификации устройств).
_CRS контроллера GPIO содержит все ресурсы (адресное пространство для регистров, системных прерываний и т. д.), потребляемых всеми банками в контроллере GPIO. Сопоставление ресурсов прерываний в банке представлено в том порядке, в котором ресурсы прерывания перечислены в _CRS, то есть первое прерывание, указанное в списке, назначается банку 0, а затем — к банку 1 и т. д. Банки могут совместно использовать ресурсы прерываний. в этом случае прерывание указывается один раз для каждого банка, подключенного к нему, в поле «банк» и настраивается как общий.
Дескрипторы ресурсов подключения GPIO
Связь между периферийными устройствами и контактами GPIO, к которым они подключены, описывается операционной системой с помощью дескрипторов ресурсов подключения GPIO. Эти дескрипторы ресурсов могут определять два типа соединений GPIO: подключения GPIO interrupt и подключения ввода-вывода GPIO. К периферийным устройствам относятся дескрипторы подключения GPIO в _CRS для всех подключенных контактов ввода-вывода GPIO и закрепления прерываний. Если подключенное прерывание поддерживает пробуждение (с возможностью пробуждения системы из состояния пониженного энергопотребления), оно должно быть настроено как Ексклусивеандваке или Шаредандваке; дополнительные сведения см. в разделе Управление питанием устройств.
Дескрипторы определяются в разделе 6.4.3.8.1, "GPIO Connection descriptor" спецификации ACPI 5,0. Макросы шаблонов ресурсов АСЛ для этих дескрипторов описаны в разделе 19.5.53 "Гпиоинт (макрос дескриптора ресурса подключения GPIO)" спецификации ACPI 5,0.
События ACPI с сигнальным сигналом
Для платформ SoC прерывания GPIO используются для сигнализации о событиях платформы. Любое устройство пространства имен ("устройство источника событий ACPI"), которое передает события драйверу с помощью оператора уведомления АСЛ, требует следующего:
Узел пространства имен контроллера GPIO, к которому подключен сигнал события ACPI, должен включать ресурс Гпиоинт для этого ПИН-кода в его объекте сведений о событиях ACPI (_AEI) (см. раздел 2.4.2.3.1, "сведения о событии ACPI (_AEI)" ниже). Ресурс Гпиоинт должен быть настроен как не являющийся общим (эксклюзивным).
Узел контроллера также должен содержать метод управления ребра (_Exx), уровня (_Lxx) или события (_EVT) для каждого ПИН-кода, указанного в объекте _AEI.
Драйвер ACPI обрабатывает указанное прерывание GPIO и оценивает метод управления ребром, уровнем или событием для него. Метод Control куиесцес событие Hardware (при необходимости) и выполняет требуемый оператор NOTIFY в узле пространства имен устройства источника событий. затем Windows отправляет уведомление драйверу устройства. Если метод управления событиями может запросить оборудование для определения того, какое событие произошло, может быть получен сигнал о нескольких событиях в одном и том же ресурсе Гпиоинт. Затем метод должен уведомить правильное устройство с правильным кодом уведомления.
Объект сведений о событии ACPI (_AEI) Как упоминалось ранее, пространство имен контроллера GPIO должно содержать объект _AEI для поддержки событий ACPI. Объект _AEI (см. раздел 5.6.5.2 в спецификации ACPI 5,0) возвращает буфер шаблона ресурса, содержащий только дескрипторы Гпиоинт, которые сообщают о событиях ACPI через этот GPIO-контроллер. Каждый дескриптор соответствует одному устройству источника событий ACPI и выделяется для этого устройства (не совместно используется устройствами).
Регионы операций Женералпурпосеио (Опрегионс)
Контроллеры GPIO часто используются встроенным по платформы для поддержки любого ряда аппаратных функций платформы, таких как управление питанием и часами, или Установка режимов на устройствах. Для поддержки использования GPIO I/O из методов управления АСЛ, ACPI 5,0 определяет новый тип Опрегион, "Женералпурпосеио".
Женералпурпосеио Опрегионс (см. раздел 5.5.2.4.4 спецификации ACPI 5,0) объявляется в области пространства имен устройства с контроллером GPIO, драйвер которого обрабатывает операции ввода-вывода. Объявления полей Женералпурпосеио (см. раздел 5.5.2.4.4.1 спецификации ACPI 5,0) назначают имена контактам GPIO, доступ к которым осуществляется в Женералпурпосеио Опрегион. Ресурсы подключения Гпиоио (см. раздел 19.5.53 спецификации ACPI 5,0) используются в объявлении поля для указания PIN-номеров и конфигурации для конкретной ссылки на поле. Общее число битов именованных полей, следующих за дескриптором соединения, должно равняться числу ПИН-кодов в дескрипторе.
Поля в Опрегион могут быть объявлены в любом месте пространства имен и доступны из любого метода в пространстве имен. Направление доступа к Женералпурпосеио Опрегион определяется при первом доступе (чтение или запись) и не может быть изменено.
Так как доступ к Опрегион предоставляется драйвером устройства GPIO контроллера ("обработчик Опрегион"), методы должны не обращаться к Опрегион, пока драйвер не станет доступен. Код АСЛ может контролировать состояние обработчика Опрегион, включая метод региона (_REG) на устройстве контроллера GPIO (см. раздел 6.5.4 спецификации ACPI 5,0). Кроме того, объект зависимостей Опрегион (_DEP) (см. раздел 6.5.8 спецификации ACPI 5,0) можно использовать на любом устройстве с методом доступа к полям GPIO Опрегион, если это необходимо. Сведения о том, когда следует использовать _DEP, см. в разделе " зависимости устройств " в разделе " объекты пространства имен управления устройствами ". Важно, чтобы драйверы не назначили ресурсы ввода-вывода GPIO, которые также назначены Женералпурпосеио Опрегионс. Опрегионс предназначены для монопольного использования методов управления АСЛ.
В этом разделе описывается написание драйвера для устройства контроллера ввода-вывода общего назначения (GPIO). Контроллер GPIO настраивает ПИН-коды GPIO для выполнения операций ввода-вывода данных с низкими скоростями, которые служат для выбора устройства и получения запросов на прерывание. начиная с Windows 8, расширение платформы gpio (гпиоклкс) упрощает задачу записи драйвера для контроллера GPIO. Кроме того, Гпиоклкс предоставляет универсальный интерфейс ввода-вывода для драйверов периферийных устройств, которые взаимодействуют с устройствами, соединяющимися с контактами GPIO на контроллере.
В этом разделе
начиная с Windows 8, расширение платформы gpio (гпиоклкс) упрощает задачу записи драйвера для устройства контроллера GPIO. Кроме того, Гпиоклкс предоставляет поддержку драйверов для периферийных устройств, подключающихся к контактам GPIO. Гпиоклкс, который является системным расширением для платформы драйверов режима ядра (КМДФ), выполняет задачи обработки, которые являются общими для членов класса устройства GPIO.
Как правило, клиенты контроллера GPIO являются драйверами для периферийных устройств, подключающихся к контактам GPIO. Эти драйверы используют контакты GPIO в качестве каналов данных с низкой пропускной способностью, выходные данные выбора устройства и входные данные запроса на прерывание. Драйверы периферийных устройств открывают логические подключения к ПИН-контактам GPIO, настроенным в качестве входных или выходных данных. Они используют эти подключения для отправки запросов ввода-вывода на эти контакты. Кроме того, драйверы периферийных устройств могут логически подключать свои процедуры обслуживания прерываний к ПИН-контактам GPIO, настроенным в качестве входных данных запроса прерывания.
начиная с Windows 8, контакты общего назначения ввода-вывода (gpio), управляемые драйвером контроллера GPIO, доступны для других драйверов в виде аппаратных ресурсов, управляемых системой. контакты gpio ввода-вывода, которые настроены в качестве входных данных или выходных данных, доступны в качестве нового типа ресурса Windows, ресурсов GPIO. кроме того, пин-коды прерываний GPIO, которые настроены как входные данные запроса прерывания, доступны как обычные Windows ресурсы прерывания.
Некоторые устройства контроллера универсального ввода-вывода (GPIO) могут настроить свои контакты GPIO для работы в качестве входных данных запросов прерывания. Эти входные данные запроса на прерывание управляются периферийными устройствами, физически подключенными к контактам GPIO. Драйверы для этих устройств GPIO могут включать, отключать, маскировать, расмаскировать и очищать запросы на прерывание на отдельных контактах GPIO.
Драйвер контроллера универсального ввода-вывода (GPIO) взаимодействует с расширением GPIO Framework (Гпиоклкс) через интерфейс драйвера устройства Гпиоклкс (DDI). Эта DDI определена в файле заголовка Гпиоклкс. h и описана в справочнике по драйверам ввода-вывода общего назначения (GPIO). В рамках этой DDI Гпиоклкс реализует несколько методов поддержки драйверов, которые вызываются драйвером контроллера GPIO. Этот драйвер реализует набор функций обратного вызова событий, которые вызываются гпиоклкс. Гпиоклкс использует эти обратные вызовы для управления запросами прерываний от ПИН-кодов GPIO, настроенных в качестве входных прерываний, а также для обмена данными с контактами GPIO, которые настроены в качестве входных и выходных данных.
Начиная с Windows 8 расширение платформы GPIO (GpioClx) упрощает создание драйвера для устройства контроллера GPIO. Кроме того, GpioClx обеспечивает поддержку драйверов для периферийных устройств, подключающихся к контактам GPIO. GpioClx, являющееся системным расширением платформы драйверов в режиме ядра (KMDF), выполняет задачи обработки, общие для членов класса устройства GPIO.
В этом обзоре рассматриваются следующие темы:
Драйверы контроллера GPIO
Поставщики оборудования предоставляют драйверы для управления контроллерами GPIO. Драйвер контроллера GPIO — это драйвер KMDF, который управляет всеми аппаратными операциями для контроллера GPIO. Драйвер контроллера GPIO сотрудничает с GpioClx для обработки запросов ввода-вывода для групп контактов GPIO, настроенных в качестве входных и выходных данных данных. Кроме того, этот драйвер взаимодействует с GpioClx для обработки запросов прерываний от контактов GPIO, настроенных как входные данные прерывания.
Устройство контроллера GPIO имеет некоторое количество контактов GPIO. Эти контакты могут быть физически подключены к периферийным устройствам. Контакты GPIO можно настроить как входные данные, выходные данные или входные данные прерывания запросов. Как правило, пин-код GPIO предназначен для периферийного устройства, а не совместно используется двумя или более устройствами. Подключения между контактами GPIO и периферийными устройствами фиксируются и не могут быть изменены пользователем (например, путем удаления периферийного устройства и замены его другим устройством). Таким образом, назначение контактов GPIO периферийным устройствам можно описать в встроенном ПО платформы.
На следующей схеме показан драйвер контроллера GPIO и GpioClx.
Драйвер контроллера GPIO и GpioClx взаимодействуют друг с другом через интерфейс драйвера устройства GpioClx (DDI). Драйвер контроллера GPIO вызывает методы поддержки драйверов , реализованные GpioClx. GpioClx вызывает функции обратного вызова событий , реализованные драйвером контроллера GPIO.
Драйвер контроллера GPIO напрямую обращается к аппаратным регистрам устройства контроллера GPIO.
GpioClx обрабатывает запросы ввода-вывода от драйверов для периферийных устройств, физически подключающихся к контактам GPIO. GpioClx преобразует эти запросы ввода-вывода в простые аппаратные операции, которые он выполняет путем вызова функций обратного вызова событий, реализованных драйвером контроллера GPIO. Например, для чтения или записи данных в набор контактов GPIO GpioClx вызывает функции обратного вызова событий, такие как CLIENT_ReadGpioPins и CLIENT_WriteGpioPins. GpioClx управляет очередями ввода-вывода для контроллера GPIO и тем самым освобождает драйвер контроллера GPIO этой задачи.
Кроме того, GpioClx обрабатывает основные прерывания с устройства контроллера GPIO и сопоставляет эти прерывания с дополнительными прерываниями, которые обрабатываются драйверами периферийных устройств. Основные прерывания — это прерывания, создаваемые аппаратными устройствами. Вторичные прерывания создаются операционной системой в ответ на определенные основные прерывания. Как первичные, так и вторичные прерывания определяются прерываниями глобальной системы (GSIS). Встроенное ПО ACPI для аппаратной платформы назначает GSIs основным прерываниям, а во время выполнения операционная система назначает GSIs вторичным прерываниям.
Например, встроенное ПО назначает GSI аппаратному прерыванию с контроллера GPIO, а операционная система назначает GSI пин-коду GPIO, настроенной как входные данные прерывания.
Дополнительные сведения о первичных и вторичных прерываниях см. в разделе "Прерывания GPIO".
Драйверы для периферийных устройств, использующих пины GPIO
При запуске диспетчер Plug and Play (PnP) перечисляет как устройства PnP, так и устройства, отличные от PnP. Для устройств, отличных от PnP, имеющих фиксированные подключения к контактам GPIO, диспетчер PnP запрашивает встроенное ПО платформы, чтобы определить, какие контакты GPIO назначаются как аппаратные ресурсы, управляемые системой, этим устройствам.
Драйвер KMDF для периферийного устройства получает назначенные аппаратные ресурсы во время обратного вызова EvtDevicePrepareHardware . Эти ресурсы могут включать контакты GPIO, настроенные как выходные данные, входные данные или входные данные прерывания.
Ресурс ввода-вывода GPIO — это новый тип ресурса Windows в Windows 8. Этот ресурс состоит из набора из одного или нескольких контактов GPIO, которые можно использовать как входные данные, так и выходные данные. Если драйвер периферийного устройства открывает ресурс ввода-вывода GPIO для операций чтения, драйвер использует все контакты в ресурсе в качестве входных данных. Если драйвер открывает ресурс ввода-вывода GPIO для операций записи, драйвер использует все контакты в ресурсе в качестве выходных данных. Примеры кода, показывающие, как драйвер периферийных устройств открывает логическое подключение к набору контактов ввода-вывода GPIO, см. в следующих разделах:
Пин-код GPIO, настроенный в качестве входных данных прерывания, назначается драйверу в качестве обычного ресурса прерывания Windows. Абстракция ресурса прерывания скрывает тот факт, что прерывание может быть реализовано пин-кодом GPIO, а не программным контроллером прерываний. Таким образом, драйвер может обрабатывать ресурс прерывания на основе GPIO так же, как и любой другой ресурс прерывания.
Чтобы получить доступ к контактам GPIO в ресурсе ввода-вывода GPIO, драйвер периферийных устройств должен открыть логическое подключение к контактам. Драйвер KMDF вызывает метод WdfIoTargetOpen , чтобы открыть подключение. Через это подключение драйвер может отправлять запросы ввода-вывода на контакты GPIO. Драйвер отправляет IOCTL_GPIO_READ_PINS запросы на чтение данных из этих контактов (если они являются входными контактами) или IOCTL_GPIO_WRITE_PINS запросы на запись данных в них (если они являются выходными контактами).
Чтобы получать прерывания от пин-кода GPIO в ресурсе прерывания, драйвер периферийного устройства должен зарегистрировать свою процедуру обслуживания прерываний (ISR), чтобы получать прерывания от ресурса прерывания, реализованного этим контактом. Драйвер KMDF вызывает метод WdfInterruptCreate для подключения isR к прерыванию.
Драйвер интерфейса ввода/вывода (чипсет).
Простыми словами — нужен для корректной работы чипсета (набор логики) на материнской плате.
Без драйвера скорее всего тоже все будет работать, но функции будут только базовые, дополнительные — работать не будут. Всякие технологии, заложенные в чипсет, в том числе которые теоретически могут ускорить работу Windows — будут работать только после установки этого драйвера. Например регулировка частоты в Windows (в настройках Электропитания), автоматическое ее снижение в простое — не будет работать без этого драйвера. Также могут не работать порты USB 3.0/3.1 (точнее работать будут, но как версия 2.0) или некоторые технологии ускорения передачи данных по USB.
Также вы можете встретить драйвер с названием AMD GPIO Driver Promontory — это просто версия для чипсетов серии 300, 400 и X570.
Сам драйвер входит в состав пакета AMD Chipset Drivers. Поэтому можно сделать вывод, что он точно нужен для чипсета. Также в пакет входят и другие — AMD PCI driver, PSP driver, AMD SMbus, Promonotory GPIO Driver. И еще — после установки пакета можно перейти в эту папку (в нее распаковываются дрова):
И установить оттуда схему электропитания Ryzen balanced PowerPlan, которая тоже оптимизирует работу ПК.
После корректной установки драйверов у вас в диспетчере появится устройство AMD GPIO Controller:
Кстати, выше еще видим AMD PSP Device — это специальное устройство, которое участвует в защите софта AMD, а также используется в работе антивирусов, защищает некоторые компоненты Windows от вирусов. Аналог Intel Management Engine. PS: быстрый способ открыть диспетчер устройств: зажмите Win + R > введите команду devmgmt.msc > нажмите ОК.
Надеюсь информация оказалась полезной. Удачи и добра, до новых встреч друзья!
Драйвер контроллера PCI.
Драйвер входит в состав пакета AMD Chipset Drivers.
Скорее всего нужен для корректной работы шины PCI и для обеспечения максимальной скорости. Что такое шина PCI? Это разьем на материнской плате, часто не один, в который могут устанавливаться разные устройства — например сетевая плата, звуковая плата, внешний Wi-Fi модуль, дополнительные порты USB, и конечно же видеокарта. Последнее — пожалуй наиболее важное, поэтому ставить драйвер нужно. Тем более, что AMD добавила поддержку PCI Express 4.0, для корректной работы как раз возможно и нужен драйвер.
Windows 10 способна автоматически обновить данный драйвер. Это хорошо, но после установки, можно попробовать установить и драйвер с официального сайта AMD или с сайта вашей модели материнки. Редко, но иногда Windows ставит драйвер не очень старый, но стабильный, однако при этом не самой последней версии.
Вообще на самом деле шина называется не PCI, а PCI-E.
Вот как выглядит разьем PCI-E на материнке:
Кстати здесь первые три слева — это просто PCI, не Express, а обычные, и они существовали еще во времена Pentium 4. Сегодня их уже нет на современных платах, потому что они медленные. Три PCI, которые справа — уже современные разьемы, быстрее, скорости достаточно для современных видеокарт. PS: устройства просто PCI и PCI Express не совместимы, там элементарно физически нет совместимости.
Чтобы посмотреть установлены дрова или нет, то стоит открыть диспетчер устройств (Win + R > devmgmt.msc) и посмотреть нет ли устройства с восклицательным знаком. Второе — это открыть окно Программы и компоненты (Win + R > appwiz.cpl) и посмотреть в списке нет ли там установленных драйверов AMD PCI Device Driver, кроме этого, в этом же окне можно нажать Просмотр установленных обновлений — там тоже может быть нужная информация.
Собственно если драйвер не установлен, то может быть такая картина в диспетчере:
Надеюсь информация оказалась полезной. Удачи и добра, до новых встреч друзья!
Читайте также: