Регистры устройств Serial ATA.
Каждое устройство, подключенное к адаптеру SATA, представляется тремя блоками регистров, два из которых соответствуют традиционным регистрам (см. табл. 1) АТА и называются «теневыми», третий блок регистров - новый. Привязка адресов блоков к адресному пространству хоста стандартом не регламентируется (для PCI-контроллера блоки задаются регистрами конфигурационного пространства и «теневые» регистры могут располагаться по стандартным адресам АТА).
Любая программа, в конечном счете, осуществляет управление накопителями на жестких дисках на физическом уровне через программно-доступные регистры их контроллеров, используя для этого команды процессора IN и OUT (чтение порта, запись в порт). Стандартный набор регистров контроллера ATA-дисков состоит из двух блоков регистров, выбираемых сигналами СS0# и СS1#, из которых активным может быть только один. В табл. 1 приведены адреса регистров для первого и второго каналов контроллеров АТА-дисков. Блок командных регистров служит для приема команд, управляющей информации и чтения информации о состоянии и ошибках. На действительность содержимого регистров командного блока и альтернативного регистра состояния указывает нулевое значение бита BSY – 7 разряд регистра состояния (SR). Запись в регистры должна производиться лишь при BSY= 0 и DRQ = 0 (3 разряд регистра SR), кроме особо оговоренных случаев. Если устройство поддерживает управление энергопотреблением, в «спящем» режиме содержимое этих регистров недействительно и запись игнорируется, кроме особых случаев.
Таблица 1. Адреса и функциональное назначение регистров контроллеров устройств АТА
Адрес для канала |
Сигналы адресации (0 - низкий уровень, 1 – высокий) |
Назначение (R - чтение, W - запись) |
|||||
1 |
2 |
СS0# |
СS1# |
DА2 |
DА1 |
DА0 |
|
|
|
1 |
1 |
X |
X |
X |
Нет обращения (шина данных в третьем состоянии) |
|
|
0 |
0 |
X |
X |
X |
Недопустимый адрес (шина данных в третьем состоянии) |
ЗFХ |
37Х |
Control Block Registers – блок управляющих регистров |
|||||
|
|
1 |
0 |
0 |
X |
X |
Не используется (шина данных в третьем состоянии) |
|
|
1 |
0 |
1 |
0 |
X |
Не используется (шина данных в третьем состоянии) |
ЗF6 |
376 |
1 |
0 |
1 |
1 |
0 |
R: Alternate Status (AS) - альтернативный регистр состояния |
ЗF6 |
376 |
1 |
0 |
1 |
1 |
0 |
W: Device Control (DС) - регистр управления устройством |
ЗF7 |
377 |
1 |
0 |
1 |
1 |
1 |
R: Device Address (DА) - регистр адреса (не используется)1 |
1FХ |
17Х |
Command Block Registers - блок командных регистров |
|||||
1F0 |
170 |
0 |
1 |
0 |
0 |
0 |
R/W: Data (DR) - регистр данных |
1F1 |
171 |
0 |
1 |
0 |
0 |
1 |
R: Errоr (ER) - регистр ошибок |
1F1 |
171 |
0 |
1 |
0 |
0 |
1 |
W: Features (FR) - регистр свойств |
1F2 |
172 |
0 |
1 |
0 |
1 |
0 |
R/W: Sector Count (SС) - регистр счетчика секторов |
1FЗ |
173 |
0 |
1 |
0 |
1 |
1 |
R/W: Sector Number (SN) - регистр номера сектора/LВА [7:0]2 |
1F4 |
174 |
0 |
1 |
1 |
0 |
0 |
R/W: Cylinder Low (СL) - регистр младшего байта номера цилиндра/LВА[ 15:8]2 |
1F5 |
175 |
0 |
1 |
1 |
0 |
1 |
R/W: Cylinder High (СН) - регистр старшего байта номера цилиндра/LВА[23:16]2 |
1F6 |
176 |
0 |
1 |
1 |
1 |
0 |
R/W: Device/Head (D/Н) - регистр номера устройства и головки/LВА[27:24]2 |
1F7 |
177 |
0 |
1 |
1 |
1 |
1 |
R: Status (SR) - регистр состояния |
1F7 |
177 |
0 |
1 |
1 |
1 |
1 |
W: Command (СR) - регистр команд |
Примечания: 1 Рекомендуется, чтобы на сигнал чтения по этому адресу устройство не отвечало. 2 Регистры сектора, цилиндра, головки в режиме LBA содержат указанные разряды логического адреса. |
Альтернативный регистр состояния АS (для первого канала его адрес ЗF6h, для второго канала - 376h) имеет те же биты, что и основной SR, но его чтение не приводит ни к каким изменениям состояния устройства.
Регистр управления устройством DС (ЗF6h, 376h) служит для программного сброса обоих устройств одновременно и управления разрешением прерывания выбранного устройства. Запись в этот регистр возможна в любой момент. Программный сброс через регистр DC должен отрабатываться и в состоянии Sleep.
Назначение битов регистра DC:
- биты [7:3] зарезервированы;
- бит 2 - SRST(Software Reset) - программный сброс, действует все время, пока бит не будет снят. Оба устройства на шине воспринимают программный сброс одновременно;
- бит 1 - n/IEN (Interrup Еnаble) - бит запрещения прерывания (при нулевом значении бита выбранное устройство может вырабатывать сигнал INTRQ через тристабильный выход);
- бит 0 равен нулю.
Регистр адреса устройства DA (3F7h, 377h) использовался только в первой версии АТА для совместимости со старыми контроллерами, чтением этого регистра можно было определить адресованный привод и головку. Адрес регистра совпадает с адресом диагностического регистра состояния контроллера НГМД, и рекомендуется, чтобы устройство АТА не отвечало на чтение этого регистра, а если устройство отвечает на чтение, то оно не должно управлять битом 7 во избежание конфликта с контроллером НГМД, у которого по в этом бите хранится признак смены носителя.
Назначение битов регистра DA:
- бит 7 - (HiZ) - высокоимпедансный, при считывании не выдается на шину;
- бит 6 - nWTG - инверсный признак записи (во время физического выполнения записи на носитель бит нулевой);
- биты [5:2] - пНS[3:0] - номер головки (инверсные биты);
- биты [1:0] - пDS[1:0] - выбор устройства (инверсные биты): 10 - выбрано устройство 0, а 01 - выбрано устройство 1.
Регистр данных DR (1F0h, 170h) может использоваться как 8-битный или 16-битный в зависимости от типа данных, передаваемых в текущей команде (обращение к этому регистру происходит в режиме обмена РIO (когда DМАСК# неактивен), при выполнении передач протокола РО (РIO Оut) хост производит запись в этот регистр, при РI (РIO In) – чтение, а в режиме DMA обмен данными происходит через порт данных, при этом активны DМАRQ и DМАСК#, а СS0# и СS1# неактивны).
Регистр ошибок ER (1F1h, 171h) хранит состояние контроллера после выполнения последней операции или диагностический код ошибки. После завершения операции на наличие ошибки указывает бит ERR регистра состояния.
Назначение битов регистра ER:
- бит 7 зарезервирован;
- бит 6 - UNC (Uncorrectable Data Еггог) - неисправимая ошибка данных;
- бит 5 - MC(Меdiа Сhanged) - смена носителя (после смены носителя первая команда обращения отвергается и устанавливается данный бит, а после сброса бита следующие команды будут выполняться нормальным образом);
- бит 4 - IDNF (ID Not Found) - указывает на ненайденный идентификатор сектора;
- бит 3 - ABRT (Аbort Соmmand) - устанавливается, если команда отвергнута как недействительная или в случае возникновения иной ошибки;
- бит 2 - MCR (Меdia Сhange Requested) - индикатор запроса смены носителя (после обнаружения запроса смены носителя команды Dоог Lock будут возвращать бит ошибки ЕRR и бит MCR, а бит MCR сбрасывается командами Door Unlock, Media Eject или аппаратным сбросом);
- бит 1 - TK0NF (Тгаск 0 Nоt Found) указывает на то, что по команде Recalibrate не удалось найти нулевой трек;
- бит 0 - AMNF (Аddress Mark Not Found) - не найден адресный маркер данных в заголовке сектора.
После выполнения любого сброса или команды Execute Device Diagnostic регистр ошибок содержит диагностический код. Трактовка битов, за исключением бита 3 (ABRT), может меняться в зависимости от исполненной команды.
Регистр свойств FR (1F1h, 171h) используется в зависимости от команды. В команде Set Features, через регистр свойств, задается код подкоманды (некоторые старые устройства могут игнорировать запись в этот регистр, до принятия стандарта АТА-2 в этот регистр помещали значение рекомендуемого номера цилиндра для предкомпенсации записи.
Регистр счетчика секторов SC (1F2h, 172h) содержит число секторов, участвующих в обмене (хост инициализирует этот регистр до подачи команды (нулевое значение соответствует 256 секторам). По успешному завершению операции доступа к данным регистр должен обнулиться. Если команда завершилась с ошибкой, в регистре будет число секторов, которые должны быть переданы для успешного завершения предыдущего запроса. Команды Initialize Device Parameters или Write Same могут переопределить значение этого регистра, а в некоторых командах регистр используется для передачи иных параметров.
Регистры номера сектора SN (1FЗh, 173h) и номера цилиндра - младшего CL (1F4h, 174h) и старшего байта CH (1F5h, 175h) - имеют двоякое назначение в зависимости от выбранной системы адресации (СНS или LВА), они инициализируются хост-адаптером, а в случае возникновения ошибки при выполнении операции, устройство поместит в них адрес, по которому встретилась ошибка.
Регистр номера устройства и головки D/H (1F6h, 176h) кроме хранения части адресной информации служит для выбора ведущего или ведомого устройства и метода адресации регистра D/H:
Назначение битов номера устройства и головки D/H:
- биты 7 и 5 вплоть до АТА-3 должны были быть единичными, в АТА/АТАРI-4 их объявили устаревшими.
- бит 6 - L - единичным значением указывает на применение режима адресации LВА, а при нулевом значении бита используется режим СНS;
- бит 4 - DEV (Device) - выбор устройства, при DEV= 0 выбрано ведущее, при DEV = 1 - ведомое; - биты [3:0] имеют двоякое назначение в зависимости от выбранной системы адресации, в режиме СНS они содержат номер головки, в режиме LВА - старшие биты логического адреса.
Как и предыдущие (SN, CH, CL) этот адресный регистр инициализируется хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка (до принятия АТА-2 считалось, что адресные регистры должны модифицироваться и после успешного выполнения операции, отражая текущее значение адреса в носителе).
Регистр состояния SR (1F7h, 177h) отражает текущее состояние устройства в процессе выполнения команд. Чтение регистра состояния разрешает дальнейшее изменение его битов и сбрасывает запрос аппаратного прерывания (IRQ). Назначение битов регистра SR:
- бит 7 - BSY (Busy) указывает на занятость устройства, значение этого бита действительно всегда, при
BSY = 1, устройство игнорирует попытки записи в командный блок регистров, а чтение этих регистров дает неопределенный результат, а при BSY = 0 регистры командного блока доступны, в это время устройство не может устанавливать бит DRQ, изменять значение битов ERR и содержимое остальных командных регистров (могут меняться только значения битов IDX, DRDY, DF, DSC, CORR); бит BSY может устанавливаться на кратковременный интервал, так что хост может этого не заметить; бит BSY устанавливается: при сбросе устройства; по получении команды, если не устанавливается DRQ; между передачами блоков данных в режиме РIO и после них, пока не обнулился DRQ; во время передач данных в режиме DМА;
- бит 6 - DRDY(Device Ready) указывает на готовность устройства к восприятию любых кодов команд, если состояние бита изменилось, оно не может измениться обратно до чтения регистра состояния (при DRDY = 0 устройство воспринимает только команды Ехесиte Dеvice Diagnosnic и Initialize Device Раrameters, прекращая выполнение текущей команды и сообщая об этом флагом ABRT в регистре ошибок и ERR в регистре состояния. Другие команды приводят к непредсказуемым результатам. Бит устанавливается устройством АТА, когда оно готово к выполнению всех команд;
- бит 5 - DF(Device Fault) - индикатор отказа устройства;
- бит 4 - DSC (Device Seek Complete) - индикатор завершения поиска трека, а в командах, допускающих перекрытие, бит называется SERV(Service Required) - устройство требует обслуживания;
- бит 3 - DRQ (Data Request) - индикатор готовности к обмену словом или байтом данных;
- бит 2 - CORR (Соггеcted Datа) - индикатор исправленной ошибки данных;
- бит 1 - IDX (Index) - индекс, трактуется особо каждым производителем;
- бит 0 - ERR (Еггог) - индикатор ошибки выполнения предыдущей операции. Дополнительная информация содержится в регистре ошибок. Если установлен бит ЕRR, до приема следующей команды, программного или аппаратного сброса устройство не изменит состояние этого бита, а также регистра ошибок, регистра количества секторов и регистров цилиндра, головки и номера сектора. Для команд Packet и Service бит называется CHK и служит признаком исключительной ситуации. В стандарте АТА/АТАРI-4 для некоторых команд биты 4 и 5 могут иметь иное назначение, а биты 1 и 2 объявлены устаревшими.
Регистр команд СR (1F7h, 177h) – его назначение очевидно из названия. Устройство начинает исполнять команду сразу, после записи кода команды в регистр CR.
После включения электропитания, по окончании сигнала начального сброса (power on reset), или после аппаратного сброса (hardware reset) по сигналу RESET, или после программного сброса (software reset) по установке бита SRST регистра DC — выполняется самотестирование, запускается двигатель, проверяется механика, устанавливаются параметры умолчания, интерфейс и регистры сбрасываются в исходное состояние.
После любого «сброса» или выполнения команды диагностики устройство АТА в блоке командных регистров содержит сигнатуру, определяющую его тип: SC=01h, SN=01h, CL=00h, CH=00h, DH=00h. Основной функцией контроллера жесткого диска является отработка определенного для него разработчиком набора команд. В системе команд контроллера жесткого диска имеются служебные команды для идентификации и управления свойствами устройств, включая возможность обновления встроенного программного обеспечения (микрокода). Эти команды позволяют получить подробнейшую информацию об устройстве, в том числе и по средствам защиты от несанкционированного доступа к накопителю.
В блоке управляющих регистров дисков SATA, как и в АТА, используется лишь один (AS для чтения, DC для записи). В блоке командных регистров разрядность регистров SC, SN, CL и СН расширена до 16 бит (назначение их младших байтов сохранилось). В режиме LBA старшие байты регистров SN, CL и СН несут биты логического адреса [24: 31], [32: 39] и [40: 47] соответственно. В регистре D/H бит DEV игнорируется (при эмуляции пар устройств на одном канале бит DEV используется для выбора устройства).
Новый блок регистров SCR (Serial ATA Status and Control registers) состоит из 16 смежных 32-разрядных регистров SCR0-SCR15, из которых пока были определены лишь 3 (остальные были зарезервированы).
Регистр SStatus (SCR0) - регистр текущего состояния интерфейса хост адаптера (только чтение).
Биты [3: 0] - поле DET, подключение устройств:
- 0000 - устройство не обнаружено, физической связи нет;
- 0001 - устройство обнаружено, но физическая связь не установлена;
- 0011 - устройство обнаружено, физическая связь установлена;
- 0100 - устройство отключено (запретом интерфейса или запуском внутреннего теста).
Биты [7: 4] - SPD, скорость:
- 0000 - нет согласованной скорости (устройство не подключено или связь не установлена);
- 0001 - согласована скорость 1-го поколения.
Биты [11: 8] - поле IPM, состояние энергопотребления интерфейса:
- 0000 - устройство не обнаружено, физической связи нет;
- 0001 - интерфейс в активном состоянии;
- 0010 - интерфейс в состоянии PARTIAL;
- 0110 - интерфейс в состоянии SLUMBER.
Остальные биты и значения полей зарезервированы.
Регистр SError (SCR1) - регистр диагностической информации, относящейся к интерфейсу. В регистре представлены ошибки, накапливающиеся с момента последней очистки регистра. Регистр очищается операцией сброса, отдельные биты можно сбрасывать операцией записи в регистр (единицы в позициях сбрасываемых бит).
Биты [15: 0] - поле ERR, ошибки, обрабатываемые обычным программным
обеспечением:
- бит 0 - I - исправленное нарушение целостности данных (не требует действий со стороны ПО, но может учитываться, например, для принятия решения о снижении скорости);
- бит 1 - М - исправленная ошибка связи (может возникать при временном отключении устройства, потере синхронизации, не требует действий со стороны ПО);
- бит 8 - Т - не исправленное нарушение целостности данных, требует повтора операции
- бит 9 - С - устойчивая неисправимая ошибка связи или нарушение целостности данных (может возникать при неправильном подключении, отказе или отключении устройства);
- бит 10 - Р - протокольная ошибка, требует сброса интерфейса и повтора операции (в случае устойчивости может быть признаком несовместимости устройства и адаптера);
- бит 11 - Е - внутренняя ошибка, обнаруженная хост-адаптером (если ошибка повторяется после сброса, она может быть признаком несовместимости адаптера и устройства).
Биты [31: 16] - поле DIAG, используемое диагностическим ПО:
- бит 16 - N - сигнал физического уровня менял состояние,
- бит 17 - I - внутренняя ошибка физического уровня интерфейса;
- бит 18 - W - обнаружен пробуждающий сигнал Сотт Wake;
- бит 19 - В - ошибка декодирования 10В/8В;
- бит 20 - D - ошибка паритета блоков данных (Disparity);
- бит 21 - С - ошибка CRC на канальном уровне;
- бит 22 - Н - ошибка подтверждения кадров (может возникать как следствие ошибок В, С, D);
- бит 23 - 5 - ошибка последовательности состояний канального уровня;
- бит 24 - Т - ошибка на транспортном уровне;
- бит 26 - F - неопознанный тип FIS (ошибка, обнаруженная на транспорт-
ном уровне при корректном CRC-коде).
Остальные биты зарезервированы.
Регистр SControl (SCR2) - регистр управления интерфейсом (запись и чтение).
Биты [3: 0] - поле DET, управление обнаружением и инициализацией устройств:
- 0000 - нет действий;
- 0001 - инициализация и установление соединения (эквивалентно аппаратному сбросу);
- 0100 - запрет интерфейса и перевод физического уровня в режим Offline.
Биты [7: 4] - поле SPD, задает ограничение на скорость при согласовании соединений:
- 0000 - нет ограничений;
- 0001 - скорость не выше 1-го поколения.
Биты [11: 8] - поле IPM, управление энергорежимом интерфейса:
- 0000 - нет ограничений;
- 0001 - запрет перехода в состояние PARTIAL;
- 0010 - запрет перехода в состояние SLUMBER;
- 0011 - запрет перехода в состояние PARTIAL и SLUMBER.