|
4 / 4 / 1
Регистрация: 27.04.2019
Сообщений: 4
|
|
Соответствие между ATA Signals и адресами портов I/O27.04.2019, 20:09. Показов 3976. Ответов 9
Метки нет (Все метки)
Поискал в гугле, как ОС работают с HDD, нашел ATA PIO интерфейс. Почитал про него на сайте osdev, потом еще несколько записей в блогах - там подробно описано, как и через какие порты работать с HDD.
Потом смотрел разные версии спецификаций ATA. Везде описаны только имена сигналов (CS1FX-, CS3FX-, DA2, DA1, DA0) - которые соответствуют "лапам"(drive pins) на микросхеме, которая встраивается в хостовую машину и реализует взаимодействие с HDD. Однако, ни в одной спецификации не описаны номера портов I/O для работы с HDD. Посмотрел Intel Chipset Specification. Там сказано лишь, что primary ATA harddisk controller соответствует диапазон адресов 0x01F0-0x01F7. И снова конкретные порты и их функции не описаны. Где же описано соответствие между сигналами и портами I/O?
0
|
|
| 27.04.2019, 20:09 | |
|
Ответы с готовыми решениями:
9
Соответствие портов и много подключений
Различие между адресами |
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|||
| 28.04.2019, 02:25 | |||
Сообщение было отмечено guesswho18 как решение
РешениеНа старых компах с шиной ISA, насколько понимаю, интерфейс IDE тупо подключался прямо к этой шине. Был только добавлен дешифратор адреса, который выставлял сигнал Chip Select 1P если номер порта с которым исполняется инструкция процессора in или out был в двоичном виде равен 01 1111 0xxx , т.е 1F0h..1F7h и сигнал Chip Select 3P если номер порта с которым исполняется инструкция процессора in или out был в двоичном виде равен 11 1111 011x , т.е 3F6h..3F7h Добавлено через 14 минут http://www.t13.org/documents/U... -ATA-1.pdf таблица 6. А вот в какой конкретный диапазон портов эти три бита будут засунуты это вопрос. Когда-то было типично в 1F0..1F7 и 3F6..3F7, но я встречал два AT на которых диапазоны были другими. Правда, когда на этих компах работали под MS-DOS и через BIOS, то конкретные номера портов были не важны. Встречал на двух одноплатных компьютерах с 386-м процессором для станков с ЧПУ. Так вот можно ли было на эти компы поставить какую-нибудь старую винду и по какому протоколу она определила бы, что номера портов IDE не те и какие они именно мне не известно. Я говорил выше про ATA (IDE, PATA), поскольку ты именно про них и спрашивал. А сейчас компы клепают с SATA. И похоже у тебя присутствует убежденность, что под жесткий диск выделены какие-то конкретные порты. А вот ни фига. Ткни на своем компе в Диспетчере устройств и посмотри какие порты занимает жеский диск. Да похоже какие попало. 1F0..1F7 и 3F6..3F7 это было на старых AT-совместимых компах, да и то как я выше сказал не всегда. Короче, как определять на каких портах сидит жесткий диск на конкретном компе, это надо в исходники какого-нибудь BIOS-а глянуть. Вот как там делается так и делать.
3
|
|||
|
Эксперт Hardware
|
||
| 28.04.2019, 07:36 | ||
|
Твоя задача - циклическим опросом найти порт (на котором висит диск), и просто посылать в его регистры нужные команды. Порт - это шлюз к регистрам, которых в legacy-IDE всего 8. Например, если говорят "порты 1F0-1F7", значит тебе нужно найти в пространстве порт 1F0h, который откроет доступ к 8-ми последующим/его регистрам. Соответственно 3F0 является базовым портом второго канала ATA/IDE. Контроллёры SATA могут работать в двух режимах - NativeIDE (в/в через IO) и DPA (в/в через MMIO). Описание всех регистров и команд управления для АТА-CHS/LBA можно найти в книжке "В.Несвижский: Программирование аппаратных средств", а современный интерфейс SATA внятно рассматривает "М.Гук: Интерфейсы АТА".
3
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 28.04.2019, 18:58 | ||
|
2
|
||
|
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
|
|
| 30.04.2019, 16:37 | |
|
Книга по теме:
ISBN: 5-94157-252-2 Всеволод Несвижский Программирование устройств SCSI и IDE. - СПб.: БХВ - Петербург, 2003. - 592 с.
1
|
|
|
Эксперт Hardware
|
|||||||||||||||||
| 30.04.2019, 18:08 | |||||||||||||||||
|
Добавлено через 12 минут guesswho18, нюансов в IDE-режиме не так-уж и много - вот некоторые из них.. Все регистры базового порта - однобайтные. Про разметку CHS можно забыть и использовать только LBA. Под макс.LBA выделяется всего 28-бит, тогда получаем ёмкость диска в режиме IDE = 128 Gb. В трёх/однобайтых регистрах 1F3,4,5 находятся 24-младших битов LBA-адреса, а четыре/старших бита отправили в младшую тетраду следующего регистра - 1F6h. Таким образом старшая тетрада [7:4] регистра 1F6h осталась свободной, и используется для выбора M/S. Поскольку АТА-каналов всего 2, а устройств может быть 4 (мастер/слейв), то слейвы выбираются битом(4) выше/упомянутого регистра 1F6h (для первого канала) - он так и называется "Регистр выбора устройства". Код мастера в режиме LBA выглядит как F0h:
Поэтому перед тем-как посылать команду в порт диска, нужно проверить регистр 1F7h, который выполняет сразу 2-функции: при чтении это "регистр-состояния", а при записи - "шлюз-команд":
3
|
|||||||||||||||||
|
Эксперт Hardware
|
|||||||||||
| 02.05.2019, 11:29 | |||||||||||
|
В большинстве случаях, для ламерских задач с диском хватает и расширенного сервиса биос
int-13h. Однако в этот сервис зашит не весь набор нативных команд, макс кол-во которых лежит в пределах 255 штук (кодируются одним байтом). В полной мере АТА-команды поддерживают только порты ввода-вывода. Но и это не всё.. Есть ещё и набор сервисных т.н. "терминальных команд" - это вообще бомба, только документированы они исключительно для Seagate_Barracuda (архитектуры "классическая" и "F3"). Сервисные команды передаются не по АТА, а по специальному Com-интерфейсу, где приём-передача осуществляется по линиями Tx - Transmit (передача) и Rx - Receiver (приём). В этом режиме с накопителем можно проделывать всё/мыслимое и немыслимое. Но вернёмся к портам..В.Несвижский как-всегда допустил ляп (видимо не тестирует свои мысли) и на весь мир заявил, что мастер выбирается взведённым битом(4) в регистре 1F6h. Оказывается наоборот - для мастера он должен быть сброшеным, т.е. код "Master/LBA" кодируется как E0h, а не F0h. И это не единичный случай в его практике, поэтому лучше проверять его утверждения.. Попробуем в режиме PIO считать с накопителя его "Stuff" - в простонародье "паспорт диска". Функции биос сделать этого не в состоянии. Команда называется Identify_Device и имеет код ECh. При успешной операции, буфер будет содержать 512 байт различной инфы о накопителе. Не буду описывать все/512 (см.доки), а остановлюсь только на некоторых полях (смешение указывается в словах):
xchg. Вот пример:
2
|
|||||||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||
| 02.05.2019, 18:17 | |||||||
![]()
3
|
|||||||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||
| 08.05.2019, 13:13 | ||
|
Ты пишешь ПО для музея вычислительной техники? Уже давно используется AHCI для доступа к HDD.
Если в регистрах PCI у контроллера IDE не будет назначенных портов, то значит используются стандартные 1F0h-1F7h и 3F6h-3F7h, 170h-177h, 376h-377h (т.к. называемых режим Legacy IDE и последний мой комп, который это поддерживает - это ноут 2008 года выпуска). https://osdev.fandom.com/ru/wiki/HDD
1
|
||
| 08.05.2019, 13:13 | |
|
Помогаю со студенческими работами здесь
10
Разница байт между адресами переменных
На W7 пропали оба DVD дисковода (ASUS DRW-1608P3S ATA и Sony NEC Optiarc DVD RW AD-7170A ATA
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|