Блоки регистров контроллеров устройств SАТА.
Каждое устройство, подключенное к адаптеру Serial ATA, представляется тремя блоками регистров, два из которых соответствуют традиционным регистрам ATA и называются «теневыми», третий блок является новым. Привязка адресов блоков к адресному пространству хоста стандартом не регламентируется, «теневые» регистры могут располагаться по стандартным адресам ATA.
В дисковых системах на Serial ATA кроме двух традиционных блоков регистров (табл. 1) появился и новый блок регистров SCR. В блоке управляющих регистров (табл.1), как и в ATA, используется лишь один (AS для чтения, DC для записи). В блоке командных регистров разрядность регистров SC, SN, CL и СН расширена до 16 бит, назначение младших байтов сохранилось. В режиме LBA старшие байты регистров SN, СL и СН несут биты логического адреса [24:31], [32:39] и [40:47] соответственно. В регистре D/H бит DEV игнорируется (при эмуляции пар устройств на одном канале бит DEV используется для выбора устройства).
Таблица 1. Два блока регистров (теневых) контроллеров устройств SАТА (ATA)
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 (ЗF7h, 377h) использовался только в первой версии АТА для совместимости со старыми контроллерами, чтением этого регистра можно было определить адресованный привод и головку. Адрес регистра совпадает с адресом диагностического регистра состояния контроллера НГМД, и рекомендуется, чтобы устройство АТА не отвечало на чтение этого регистра, а если устройство отвечает на чтение, то оно не должно управлять битом 7 во избежание конфликта с контроллером НГМД, у которого по этой линии передается бит смены носителя.
Назначение битов регистра DA:
- бит 7 - (HiZ) - высокоимпедансный, при считывании не выдается на шину;
- бит 6 - nWTG - инверсный признак записи (во время физического выполнения записи на носитель бит нулевой);
- биты [5:2] - nНS[3:0] - номер головки (инверсные биты);
- биты [1:0] - nDS[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ооr 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) отражает текущее состояние устройства в процессе выполнения команд. Чтение регистра состояния разрешает дальнейшее изменение его битов и сбрасывает запрос аппаратного прерывания.
Назначение битов регистра 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 устройство воспринимает только команды Ехесute Dеvice Diagnostic и Initialize Device Раrameters, прекращая выполнение текущей команды и сообщая об этом флагом ABRT в регистре ошибок и ERR в регистре состояния. Другие команды приводят к непредсказуемым результатам. Устройства АТАРI сбрасывают бит по любому сбросу и команде Ехecute Device Diagnostic. Бит устанавливается устройством АТА, когда оно готово к выполнению всех команд, а устройство АТАРI устанавливает бит до завершения выполнения команд, за исключением Device Reset и Ехесute Device Diagnostic;
- бит 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. Команда Device Reset выполняется устройством АТАРI независимо от состояния битов BSY и DRQ, и даже в состоянии Sleep.
Новый блок регистров 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, ошибки, обрабатываемые обычным программным обеспечением:
бит 9 - С - устойчивая неисправимая ошибка связи или нарушение целостности данных (может возникать при неправильном подключении, отказе или отключении устройства);
бит 11 - Е - внутренняя ошибка, обнаруженная хост-адаптером (если ошибка повторяется после сброса, она может быть признаком несовместимости адаптера и устройства);
бит 0 - I - исправленное нарушение целостности данных (не требует действий со стороны программного обеспечения, но может учитываться, например, для принятия решения о снижении скорости);
бит 1 - М - исправленная ошибка связи (может возникать при временном отключении устройства, потере синхронизации, не требует действий со стороны программного обеспечения);
бит 10 - Р - протокольная ошибка, требует сброса интерфейса и повтора операции (в случае устойчивости может быть признаком несовместимости устройства и адаптера);
бит 8 - Т - не исправленное нарушение целостности данных, требует повтора операции.
Биты [31:16] - поле DIAG, используемое диагностическим программным обеспечением:
бит 19 - В - ошибка декодирования 10В/8В;
бит 21 - С - ошибка CRC на канальном уровне;
бит 20 - D - ошибка паритета блоков данных (Disparity);
бит 26 - F - неопознанный тип FIS (ошибка, обнаруженная на транспортном уровне при корректном CRC-коде);
бит 17 - I - внутренняя ошибка физического уровня интерфейса;
бит 16 - N - сигнал готовности физического уровня менял состояние;
бит 22 - Н - ошибка подтверждения кадров (может возникать как следствие ошибок В, С, D);
бит 23 - S - ошибка последовательности состояний канального уровня;
бит 24 - Т - ошибка на транспортном уровне;
бит 18 - W - обнаружен пробуждающий сигнал Соmm Wake.
Остальные биты зарезервированы.
Регистр 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.
Остальные биты и значения полей зарезервированы.