Pci configuration begin как исправить
Не так давно я спрашивал о механизме опроса PCI-устройств. После я устроился на работу, доделал тестовое задание, а спрашивал я именно о нем, и благополучно забыл о нем. Но недавно выдали новый проект и пришлось все вспомнить, заодно и решил написать сюда.
- Конфигурационные транзакции
- Транзакции ввода/вывода
- Транзакции обращения к памяти
- Когда ведущим устройством является южный мост
- Когда ведущим устройством является устройство, подключенное к шине PCI
И так, для работы с шиной, нам понадобятся следующие сигналы:
clk (Clock) — обеспечивает синхронизацию всех транзакций на PCI, а также является входным для каждого PCI — устройства.
AD (Address and Data) — мультиплексирования шина адреса и данных.
IDSEL (Initialization Device Select) — выбор устройства инициализации, используется для выбора кристалла при транзакциях чтения конфигурации и записи.
CBE (Bus Command and Byte Enables) — команды шины и разрешение байта.
FRAME (Frame) — сигнал выдаётся мастером в начале транзакции и определяет её длительность. Для однофазных транзакций FRAME всегда длится один такт. При многофазных транзакциях FRAME снимается за один такт до завершения транзакции.
IRDY (Initiator Ready) — сигнал готовности мастера. Он свидетельствует о готовности мастера завершить текущую фазу данных.
TRDY (Target Ready) — сигнал готовности таргета, свидетельствующий о готовности таргета завершить текущую фазу данных.
STOP (Stop) — этот сигнал выдаётся таргетом, если он хочет остановить текущую транзакцию.
PAR (Parity) — контроль четности по линиям AD и CBE.
RST(Reset) — cигнал сброса. Является асинхронным.
DEVSEL (Device Select) — сигнал выбора устройства.
Перед началом работы с любым устройством его нужно инициализировать. Поэтому рассмотрим особенности выполнения конфигурационных транзакций.
Конфигурационные транзакции. Общие сведения.
Вид на конфигурационные транзакции со стороны ОСДля генерации конфигурационных транзакций PCI на ПК используются обращения к двум портам ввода-вывода, носящим имена CONFIG_ADDRESS и CONFIG_DATA, имеющим адреса 0CF8h и 0CFCh соответственно и входящим в состав моста Host–PCI, через который шина PCI прямо или косвенно соединяется с процессором.
Порт CONFIG_ADDRESS имеет размер двойное слово и доступен только как единое целое. Обращения меньшего размера по принадлежащим ему адресам передаются на шину PCI как обычные транзакции ввода-вывода. Этот порт доступен для чтения и записи и имеет следующий формат:
Когда необходимо выполнить конфигурационную транзакцию, в этот порт записывается адрес регистра конфигурационного пространства PCI, состоящий из номеров шины (разряды 23–16), устройства (15–11), функции (10–8) и собственно регистра (7–2). Биты 1 и 0 должны всегда содержать нули, а старший бит должен содержать единицу, разрешая тем самым выполнение конфигурационной транзакции. Разряды 30–24 зарезервированы и должны содержать нули.
Собственно генерация конфигурационной транзакции происходит при чтении или записи порта CONFIG_DATA, когда в CONFIG_ADDRESS был записан адрес с установленным старшим битом и номером шины, соответствующим шине, подключенной к мосту Host–PCI, или любой шине PCI, лежащей ниже этой шины и соединённой с ней через один или несколько мостов PCI–PCI (допустимый диапазон номеров шин задаётся мосту Host–PCI в процессе его настройки). Доступ к порту CONFIG_DATA должен иметь размер, равный размеру считываемого или записываемого конфигурационного регистра, адрес которого находится в CONFIG_ADDRESS.
Если номер шины, заданный в CONFIG_ADDRESS, совпадает с номером шины, подключённой непосредственно к мосту Host–PCI, генерируется конфигурационная транзакция с адресом типа 0, причём номер устройства, находящийхся в разрядах 15–11 порта CONFIG_ADDRESS, используется для выдачи одного из сигналов IDSEL, которые и служат для выбора конкретного устройства. Кроме того, декодированный номер устройства (один единичный и остальные нулевые биты) в фазе адреса конфигурационной транзакции передаётся в разрядах 31–11 адреса.
Если адрес в CONFIG_ADDRESS указывает не ту шину, которая непосредственно подключена к мосту Host–PCI, последний генерирует конфигурационную транзакцию с адресом типа 1. Она будет обработана мостом PCI–PCI, который опознает содержащийся в адресе номер шины. Этот мост либо выполнит конфигурационную транзакцию с адресом типа 0 (если адресуемое устройство подключено к шине, прямо подсоединённой к этому мосту), либо сгенерирует транзакцию с адресом типа 1, обеспечив тем самым её прохождение через следующий мост. Длина этой цепочки теоретически ограничена только разрядностью поля, отведённого под номер шины (8 бит).
Если при выполнении транзакции выяснится, что адресуемого конфигурационного регистра не существует (указан номер несуществующей шины, устройства, функции или регистра), то операция записи не возымеет никаких действий, а операция чтения вернёт процессору значение, содержащее единицы в каждом разряде
Формат адреса для транзакции типа 1.
Формат адреса для транзакции типа 0.
- Vendor ID — поле идентифицирует изготовителя устройства. Запрещено использовать значение 0xFFFF.
- Device ID — поле идентифицирует конкретный вид устройства. Запрещено использовать значение 0xFFFF.
- Revision ID — дополнение к идентификатору устройства. Может быть равно нулю.
- Header Type — Для многофункциональных устройств. Если 7ой бит равен 0, то устройство является однофункциональным, иначе — многофункциональное.
- Class Code — доступен только для чтения. Используется для идентификации общего функционального назначения устройства. Старший байт (адрес 0Bh) определяет базовый класс, средний — подкласс, младший — программный интерфейс (если он стандартизован).
- Subsystem ID, Subsystem Vendor ID — задаются производителем. Только для чтения. Хранят идентификаторы, позволяющие точно идентифицировать карты и устройства (в системе могут быть установлены
несколько карт с совпадающими идентификаторами устройства и производителя (Device ID и Vendor ID). - BAR0 — BAR5 — описывают области памяти и портов ввода-вывода.
- Бит 0 = 0 — признак памяти. Размером не более 2 Гбайт
- Бит 0 = 1 — признак области портов. Размером до 256 байт.
Общий алгоритм выполнения транзакций
Мастер выставляет на шине AD адрес устройства, на шине CBE выполняемую команду, устанавливает сигнал FRAME в 0 и сигнал IRDY в 0. Далее, мастер ждет от таргета — выставления им сигналов TRDY и DEVSEL. Так же, таргет выставляет на шину AD запрашиваемые данные. Данные считаются валидными, когда IRDY, TRDY и DEVSEL равны уровню логического нуля.
Реализация
Для обращения к выводам ПЛИС потребуются специальные компоненты: буферы ввода/вывода для работы с Z — состоянием.
Так, для шины AD подключение будет выглядеть следующим образом:
- O — выход буфера.
- IO — вход/выход буфера, непосредственно подключается к выводу ПЛИС.
- I — выход буфера.
- T — управление входом, уровень единицы — вход, уровень нуля — выход.
Как я уже писал выше, при начале транзакции, когда на шине AD выставлен адрес, всегда сигнал FRAME равен нулю. Ниже приведен код, который формирует сигнал AdrPhASE, во время действия которого нужно защелкнуть шину адреса и шину команд для последующей работы. Фактически сигнал AdrPhASE есть ни что иное, как выделение спадающего фронта сигнала FRAME, что однозначно идентифицирует начало транзакции.
Далее, работу всего устройства можно описать с помощью автомата.
- 0010 I/O Read
- 0011 I/O Write
- 0110 Memory Read
- 0111 Memory Write
- 1010 Configuration Read
- 1011 Configuration Write
Чтение конфигурации
Как было описано выше, для обработки устройством используются транзакции типа 0. Так как устройство однофункциональное, то номер функции — 000, который проверятся в управляющем автомате. В зависимости от номера регистра (биты 7..0 шины AD) на шину AD выдается нужный регистра, согласно рисунку выше.
Так выглядит чтение конфигурации в симуляторе:
Запись конфигурации
На шине AD мастер выставляет адрес регистра для записи, а в следующем такте выставляются данные, которые нужно записать. В BAR0 биты 7..0 являются read-only, в BAR1 биты 15..0 являются read-only. Поэтому адресов ввода/вывода 256, адресов памяти 4 294 967 296.
Запись в порт
На шине AD мастером выставляется номер регистра для записи, в следующем такте выставляются данные, которые нужно записать.
Приведем пример только для записи одного регистра, остальные записываются аналогично.
Чтение порта
На шине AD мастером выставляется номер регистра, который нужно прочитать. Затем устройство выдает на шину AD запрашиваемые данные.
Так выглядит запись и чтение порта ввода-вывода:
Запись и чтение памяти
На шине AD мастер выставляется адрес, по которому нужно записать данные, а в следующем такте сами данные. При чтении на шину AD мастер выставляет адрес для чтения, затем на шину AD таргет выставляет сами данные.
Данные пишутся в RAM в порт А, читаются из порта B.
Так выглядит запись и чтение памяти в симуляторе:
Данные на шину AD выводятся следующим образом. В зависимости от состояния автомата, к выходному буферу подключается соответствующий регистр.
Сигнал разрешения выдачи данных на шину AD формируется следующим образом:
Отдельно хотелось бы добавить про компонент STS на примере выработки сигнала DEVSEL
Так как, активные уровни управляющих сигналов равны нулю, то для перехода в Z — состояние и отпускания линии нужно предварительно выдать уровень логической единицы и только потом перевести в Z — состояние.
Заключение
В заключение хочу сказать, что выполнение транзакций на шине PCI не так сложно как кажется. Разработанная прошивка была залита в ПЛИС. Плата с ПЛИС вставлена в PCI слот и был включен компьютер. Система нашла плату и запросила драйвера на нее.
Работает! :)
Главный минус Hackintosh - вы не сможете обновлять операционную систему. Каждое обновление может не запуститься (а может запуститься) на вашем компьютере, и тогда вам придется все делать с нуля. Это огромный минус, но многие готовы мириться с этим.
У вас может не загрузиться установка, после установки может не работать звук, интернет, могут быть проблемы с графикой. Установка Hackintosh всегда подразумевает изначальный выбор нужного железа, поэтому, если у вас какой-нибудь Phenom с видеокартой от Nvidia, я бы даже не пытался. К тому же еще больше проблем может быть у владельцев ноутбуков, потому что, как правило, не работает Wi-Fi, могут быть проблемы с экраном и так далее.
Установка Mac OS
Дальнейшие действия очень похожи на стандартную установку Windows:
- Включите ПК и загрузитесь с USB (рекомендуется использовать USB 2.0).
- В открывшемся интерфейсе Clover запустите установку Mac OS с загрузочной флешки.
Готово. Теперь вы обладатель PC с Mac OS. Осталось только провести настройку оборудования.
Видео
Запуск и установка macOS
Желательно при первой установке установить аргументы -v debug=0x100 keepsyms=1
Создание загрузочной флешки
Самый долгий этап, так как вам придется изрядно повозится, чтобы создать загрузочную флешку macOS для Hackintosh!
Необходимо: флешка на 8GB или большего размера!
Так как сделать загрузочную флешку для Хакинтош можно с помощью разных утилит, расскажем о самых популярных!
Запись образа macOS на флешку для Хакинтош с помощью BDU в Windows
Если не хочется возиться или у вас нет знакомых с Mac, тогда воспользуйтесь утилитой BDU, которая работает в Windows и установит загрузчик, запишет образ на флешку!
Создание загрузочной флешке Хакинтош через терминал Mac
Если есть доступ к Mac или вы можете установить виртуальную машину, то можно создать загрузочную флешку с помощью терминала, но необходимо будет записать еще и загрузчик Clover.
Флешка Хакнитош с помощью UniBeast
Если есть доступ к Mac, то можно создать загрузочную флешку с помощью UniBeast.
Мой личный выбор это записать флешку из терминала (записывал из виртуальной машины) и потом установить загрузчик Clover!
Работой загрузчика Chameleon или его аналогов управляет файл com.apple.boot.plist в папке /Extra. Его можно модифицировать вручную, но есть и специальная утилита с графическим интерфейсом — Lizard, которую можно скачать со страницы . В конфигурацию желательно внести разрешение экрана, аргументы для загрузки (например, вышеупомянутый «UseKernelCache=Yes»), а владельцам «нестандартных» процессоров — название файла модифицированного ядра. В iATKOS это файл custom (посмотрите, он лежит в корневом разделе диска). Также отметьте Graphics Injection, если эта опция помогла вам включить 3D-ускорение.
Опция 32bit Compatibility Mode заставит ядро загружаться в 32-битном режиме, что может быть необходимо для некоторых кекстов. При этом сохраняется поддержка больших объемов RAM, и приложения могут работать в режиме 64 бит независимо от ядра. Аналогичный аргумент командной строки — «-x32».
В списке аргументов также могут присутствовать специальные опции для отдельных кекстов.
Программа автоматически открывает файл /Extra/com.apple.boot.plist, а в случае отсутствия создаст его при попытке сохранить изменения. Именно это произойдет с iATKOS, т.к. эта сборка по умолчанию хранит конфигурацию загрузчика в одноименном системном файле /Library/Preferences/SystemConfiguration/com.apple.boot.plist. Это не есть правильно, поэтому лучше всего после создания файла в /Extra очистить системный файл, оставив только те строки, которые показаны на скриншоте.
Другая функция Lizard — правка файла /Extra/SMBIOS.plist. Он содержит информацию о модели компьютера и установленном железе и помогает представить компьютер как какой-нибудь «Макинтош» в программе System Information.
Могу я сделать «Хакинтош» из своего ноутбука?
Кто не рискует, тот не пользуется «Хакинтошем». Всегда есть риск, что вы потеряете все важные данные при неудачной установке MacOS, или установите ее «криво», заработав кучу багов. Самый лучший подход – это вначале собрать кастомный билд для ПК или ноутбука из «железа», максимально имитирующего архитектуру оригинального устройства от Apple. Но вы можете попробовать и просто установить Mac OS на ваш ПК или ноутбук, если уверены, что он достаточно мощный для этой операционной системы.
Подготовка образа Mac OS Mojave
Как уже говорилось ранее, чтобы скачать образ Mojave, вам нужно воспользоваться виртуальной машиной:
- Откройте VMWare и запустите виртуальную Mac OS Mojave.
- Перейдите в App Store, найдите там образ нужной ОС и скачайте его. Файл должен будет «весить» не меньше 5 Гб.
У вас есть образ Mac OS Mojave, теперь займемся созданием загрузочной флешки:
- Вставьте флешку в компьютер.
- В виртуальной Mac OS откройте «Finder», далее перейдите в «Программы», следом в «Утилиты» и выберите «Дисковая утилита». Кликните на вашу флешку, которая будет расположена в левой колонке окошка.
- Кликните «Стереть».
- Дайте название загрузочной флешке. Имя может быть любым, но важно, чтобы оно состояло исключительно из латинских букв.
- Во второй строчке выберите «OS X Extended».
- В третьей — GUID Partition Map.
- Кликните «Erase» и нажмите «Готово». и запустите UniBeast.
- Жмите Continue, пока не дойдете до пункта «Destination Select».
- Выберите флешку и снова нажмите «Continue».
- Добравшись до этапа «Select OS Installation» выберите Mojave и кликните «Continue».
- В «Bootloader Options» выберите либо «UEFI Boot Mode», либо «Legacy Boot Mode». «UEFI Boot Mode» рекомендуется к использованию для 7, 8, 9, 100, 200 и 300 серии процессоров Intel и всех чипсетов, имеющих поддержку UEFI. «Legacy Boot Mode» подходит для чипов 5 и 6 серии, а также для других систем на базе традиционного BIOS.
- Нажмите «Continue».
- Переместите архив с UniBeast на созданный накопитель.
Все. Загрузочная флешка готова. Теперь приступим к настройке BIOS на компьютере.
Краткая инструкция по установке Hackintosh на AMD Ryzen
Вставляем флешку. Открываем BDUtility. В меню нажимаем на Option->Configuration. В открывшемся окне нажимаем на кнопку Check Now. Программа проверит актуальность версии Clover (необходимо подключение к Интернету). После этого проверяем, чтобы в области Format Options был выбран формат FAT32 (первый выпадающий список в столбце). Жмём OK.
Интерфейс BD Utility
Открываем Мой компьютер, выбираем диск Clover. Далее EFI->CLOVER и удаляем папку DRIVER64UEFI и DRIVER32UEFI (какой-то из них может не быть), удаляем config.plist. Открываем ранее скачанные файлы CLOVER и копируем их в ранее открытую папку флешки EFI->CLOVER. Подтверждаем замену. В скопированных файлах находятся необходимые драйвера для нормальной работы.
Открываем TransMac. Выбираем Tools->Settings->Disk Drivers/Images. Нажимаем на селектор Access non-removable drivers read/write. Жмём OK. В левом окне TransMac выбираем на флешке macOS Base System->Install MacOS Mojave.app->Contents. Далее в правом поле нажимаем на правую кнопку мыши и выбираем Copy Here. В открывшемся окне находим скачанную ранее папку MacOS Mojave. В ней находим папку SharedSupport, жмём по ней 1 раз, чтобы просто выбрать, и далее кликаем на Copy. Ждём.
Когда открылось меню установки, в верхнем меню выбираем Utilities->Terminal. Теперь отсоединяем Интернет-кабель от компьютера, вводим в консоль date 102523382016 и жмем Enter. Закрываем терминал (в верхнем меню жмем на Terminal->Close Terminal). В основном окне выбираем дисковую утилиту, далее жмем на View->Show all devices. В левом меню выбираем диск, на который будет установлена система и жмем на кнопку Erase в верхней области окна (важно выбрать сам диск, а не его внутренние ветки!). В открывшемся окне можно изменить название диска, далее жмем на Erase. После форматирования дисковую утилиту можно закрыть.
Не так давно я спрашивал о механизме опроса PCI-устройств. После я устроился на работу, доделал тестовое задание, а спрашивал я именно о нем, и благополучно забыл о нем. Но недавно выдали новый проект и пришлось все вспомнить, заодно и решил написать сюда.
- Конфигурационные транзакции
- Транзакции ввода/вывода
- Транзакции обращения к памяти
- Когда ведущим устройством является южный мост
- Когда ведущим устройством является устройство, подключенное к шине PCI
И так, для работы с шиной, нам понадобятся следующие сигналы:
clk (Clock) — обеспечивает синхронизацию всех транзакций на PCI, а также является входным для каждого PCI — устройства.
AD (Address and Data) — мультиплексирования шина адреса и данных.
IDSEL (Initialization Device Select) — выбор устройства инициализации, используется для выбора кристалла при транзакциях чтения конфигурации и записи.
CBE (Bus Command and Byte Enables) — команды шины и разрешение байта.
FRAME (Frame) — сигнал выдаётся мастером в начале транзакции и определяет её длительность. Для однофазных транзакций FRAME всегда длится один такт. При многофазных транзакциях FRAME снимается за один такт до завершения транзакции.
IRDY (Initiator Ready) — сигнал готовности мастера. Он свидетельствует о готовности мастера завершить текущую фазу данных.
TRDY (Target Ready) — сигнал готовности таргета, свидетельствующий о готовности таргета завершить текущую фазу данных.
STOP (Stop) — этот сигнал выдаётся таргетом, если он хочет остановить текущую транзакцию.
PAR (Parity) — контроль четности по линиям AD и CBE.
RST(Reset) — cигнал сброса. Является асинхронным.
DEVSEL (Device Select) — сигнал выбора устройства.
Перед началом работы с любым устройством его нужно инициализировать. Поэтому рассмотрим особенности выполнения конфигурационных транзакций.
Конфигурационные транзакции. Общие сведения.
Вид на конфигурационные транзакции со стороны ОСДля генерации конфигурационных транзакций PCI на ПК используются обращения к двум портам ввода-вывода, носящим имена CONFIG_ADDRESS и CONFIG_DATA, имеющим адреса 0CF8h и 0CFCh соответственно и входящим в состав моста Host–PCI, через который шина PCI прямо или косвенно соединяется с процессором.
Порт CONFIG_ADDRESS имеет размер двойное слово и доступен только как единое целое. Обращения меньшего размера по принадлежащим ему адресам передаются на шину PCI как обычные транзакции ввода-вывода. Этот порт доступен для чтения и записи и имеет следующий формат:
Когда необходимо выполнить конфигурационную транзакцию, в этот порт записывается адрес регистра конфигурационного пространства PCI, состоящий из номеров шины (разряды 23–16), устройства (15–11), функции (10–8) и собственно регистра (7–2). Биты 1 и 0 должны всегда содержать нули, а старший бит должен содержать единицу, разрешая тем самым выполнение конфигурационной транзакции. Разряды 30–24 зарезервированы и должны содержать нули.
Собственно генерация конфигурационной транзакции происходит при чтении или записи порта CONFIG_DATA, когда в CONFIG_ADDRESS был записан адрес с установленным старшим битом и номером шины, соответствующим шине, подключенной к мосту Host–PCI, или любой шине PCI, лежащей ниже этой шины и соединённой с ней через один или несколько мостов PCI–PCI (допустимый диапазон номеров шин задаётся мосту Host–PCI в процессе его настройки). Доступ к порту CONFIG_DATA должен иметь размер, равный размеру считываемого или записываемого конфигурационного регистра, адрес которого находится в CONFIG_ADDRESS.
Если номер шины, заданный в CONFIG_ADDRESS, совпадает с номером шины, подключённой непосредственно к мосту Host–PCI, генерируется конфигурационная транзакция с адресом типа 0, причём номер устройства, находящийхся в разрядах 15–11 порта CONFIG_ADDRESS, используется для выдачи одного из сигналов IDSEL, которые и служат для выбора конкретного устройства. Кроме того, декодированный номер устройства (один единичный и остальные нулевые биты) в фазе адреса конфигурационной транзакции передаётся в разрядах 31–11 адреса.
Если адрес в CONFIG_ADDRESS указывает не ту шину, которая непосредственно подключена к мосту Host–PCI, последний генерирует конфигурационную транзакцию с адресом типа 1. Она будет обработана мостом PCI–PCI, который опознает содержащийся в адресе номер шины. Этот мост либо выполнит конфигурационную транзакцию с адресом типа 0 (если адресуемое устройство подключено к шине, прямо подсоединённой к этому мосту), либо сгенерирует транзакцию с адресом типа 1, обеспечив тем самым её прохождение через следующий мост. Длина этой цепочки теоретически ограничена только разрядностью поля, отведённого под номер шины (8 бит).
Если при выполнении транзакции выяснится, что адресуемого конфигурационного регистра не существует (указан номер несуществующей шины, устройства, функции или регистра), то операция записи не возымеет никаких действий, а операция чтения вернёт процессору значение, содержащее единицы в каждом разряде
Формат адреса для транзакции типа 1.
Формат адреса для транзакции типа 0.
- Vendor ID — поле идентифицирует изготовителя устройства. Запрещено использовать значение 0xFFFF.
- Device ID — поле идентифицирует конкретный вид устройства. Запрещено использовать значение 0xFFFF.
- Revision ID — дополнение к идентификатору устройства. Может быть равно нулю.
- Header Type — Для многофункциональных устройств. Если 7ой бит равен 0, то устройство является однофункциональным, иначе — многофункциональное.
- Class Code — доступен только для чтения. Используется для идентификации общего функционального назначения устройства. Старший байт (адрес 0Bh) определяет базовый класс, средний — подкласс, младший — программный интерфейс (если он стандартизован).
- Subsystem ID, Subsystem Vendor ID — задаются производителем. Только для чтения. Хранят идентификаторы, позволяющие точно идентифицировать карты и устройства (в системе могут быть установлены
несколько карт с совпадающими идентификаторами устройства и производителя (Device ID и Vendor ID). - BAR0 — BAR5 — описывают области памяти и портов ввода-вывода.
- Бит 0 = 0 — признак памяти. Размером не более 2 Гбайт
- Бит 0 = 1 — признак области портов. Размером до 256 байт.
Общий алгоритм выполнения транзакций
Мастер выставляет на шине AD адрес устройства, на шине CBE выполняемую команду, устанавливает сигнал FRAME в 0 и сигнал IRDY в 0. Далее, мастер ждет от таргета — выставления им сигналов TRDY и DEVSEL. Так же, таргет выставляет на шину AD запрашиваемые данные. Данные считаются валидными, когда IRDY, TRDY и DEVSEL равны уровню логического нуля.
Реализация
Для обращения к выводам ПЛИС потребуются специальные компоненты: буферы ввода/вывода для работы с Z — состоянием.
Так, для шины AD подключение будет выглядеть следующим образом:
- O — выход буфера.
- IO — вход/выход буфера, непосредственно подключается к выводу ПЛИС.
- I — выход буфера.
- T — управление входом, уровень единицы — вход, уровень нуля — выход.
Как я уже писал выше, при начале транзакции, когда на шине AD выставлен адрес, всегда сигнал FRAME равен нулю. Ниже приведен код, который формирует сигнал AdrPhASE, во время действия которого нужно защелкнуть шину адреса и шину команд для последующей работы. Фактически сигнал AdrPhASE есть ни что иное, как выделение спадающего фронта сигнала FRAME, что однозначно идентифицирует начало транзакции.
Далее, работу всего устройства можно описать с помощью автомата.
- 0010 I/O Read
- 0011 I/O Write
- 0110 Memory Read
- 0111 Memory Write
- 1010 Configuration Read
- 1011 Configuration Write
Чтение конфигурации
Как было описано выше, для обработки устройством используются транзакции типа 0. Так как устройство однофункциональное, то номер функции — 000, который проверятся в управляющем автомате. В зависимости от номера регистра (биты 7..0 шины AD) на шину AD выдается нужный регистра, согласно рисунку выше.
Так выглядит чтение конфигурации в симуляторе:
Запись конфигурации
На шине AD мастер выставляет адрес регистра для записи, а в следующем такте выставляются данные, которые нужно записать. В BAR0 биты 7..0 являются read-only, в BAR1 биты 15..0 являются read-only. Поэтому адресов ввода/вывода 256, адресов памяти 4 294 967 296.
Запись в порт
На шине AD мастером выставляется номер регистра для записи, в следующем такте выставляются данные, которые нужно записать.
Приведем пример только для записи одного регистра, остальные записываются аналогично.
Чтение порта
На шине AD мастером выставляется номер регистра, который нужно прочитать. Затем устройство выдает на шину AD запрашиваемые данные.
Так выглядит запись и чтение порта ввода-вывода:
Запись и чтение памяти
На шине AD мастер выставляется адрес, по которому нужно записать данные, а в следующем такте сами данные. При чтении на шину AD мастер выставляет адрес для чтения, затем на шину AD таргет выставляет сами данные.
Данные пишутся в RAM в порт А, читаются из порта B.
Так выглядит запись и чтение памяти в симуляторе:
Данные на шину AD выводятся следующим образом. В зависимости от состояния автомата, к выходному буферу подключается соответствующий регистр.
Сигнал разрешения выдачи данных на шину AD формируется следующим образом:
Отдельно хотелось бы добавить про компонент STS на примере выработки сигнала DEVSEL
Так как, активные уровни управляющих сигналов равны нулю, то для перехода в Z — состояние и отпускания линии нужно предварительно выдать уровень логической единицы и только потом перевести в Z — состояние.
Заключение
В заключение хочу сказать, что выполнение транзакций на шине PCI не так сложно как кажется. Разработанная прошивка была залита в ПЛИС. Плата с ПЛИС вставлена в PCI слот и был включен компьютер. Система нашла плату и запросила драйвера на нее.
Работает! :)
Три варианта установки драйвера Management Engine для устранения ошибки контроллера PCI Simple Communications Controller.
Рядом с «Простым коммуникационным контроллером PCI» в Диспетчере устройств Microsoft отображается желтый стук. Это часто происходит после переустойки операционной системы.
Желтый сбой контроллера PCI Simple Communications Controller вызван отсутствием или искажением драйвера Management Engine.
Убедитесь, что компьютер подключен к Интернету.
Вариант 1:
- Откройте Диспетчерустройств
- НажмитеДействие в панели инструментов
- НажмитеСканирование изменений аппаратного обеспечения (это может занять несколько минут)
- Это может заставить операционную систему устанавливать драйверы, включенные в состав вашей операционной системы.
Вариант 2:
- Загрузить и запустить Teh Intel® Driver & Support Assistant
- Эта программа просканирует вашу систему и рекомендует драйверы для устройств, которые она идентифицирует в системе.
Вариант 3:
- Если вы используете Microsoft Windows 10* (64-битная), загрузите и установите драйверIntel® Management Engine Consumer Driver для 64-® Windows® 64-битнойверсии для Intel® NUC .
Если ни один из этих вариантов не разрешит проблему, обратитесь к производителю вашего компьютера для выбора необходимого драйвера, разработанного для вашего аппаратного обеспечения.
Другие статьи по этой теме
Вам нужна дополнительная помощь?
Оставьте отзыв
Отказ от ответственности
Содержание данной страницы представляет собой сочетание выполненного человеком и компьютерного перевода оригинального содержания на английском языке. Данная информация предоставляется для вашего удобства и в ознакомительных целях и не должна расцениваться как исключительная, либо безошибочная. При обнаружении каких-либо противоречий между версией данной страницы на английском языке и переводом, версия на английском языке будет иметь приоритет и контроль. Посмотреть английскую версию этой страницы.
Для работы технологий Intel может потребоваться специальное оборудование, ПО или активация услуг. // Ни один продукт или компонент не может обеспечить абсолютную защиту. // Ваши расходы и результаты могут отличаться. // Производительность зависит от вида использования, конфигурации и других факторов. // См. наши юридические уведомления и отказ от ответственности. // Корпорация Intel выступает за соблюдение прав человека и избегает причастности к их нарушению. См. Глобальные принципы защиты прав человека в корпорации Intel. Продукция и программное обеспечение Intel предназначены только для использования в приложениях, которые не приводят или не способствуют нарушению всемирно признанных прав человека.
Читайте также: