Смекни!
smekni.com

Интерфейя SATA (стр. 3 из 4)

На физическом уровне для передачи данных используется двухэтапное логическое кодирование 8b/10b.

При логическом кодировании 8b/10b каждые 8 бит исходной последовательности заменяются на 10 бит в соответствии с определенными правилами. В результате для 256 возможных комбинаций из 8 входных бит получаем 1024 возможные комбинации для 10 выходных бит. Но разрешенными из этих 1024 комбинаций являются только 256, а остальные — запрещенными. Как правило, такая избыточность используется для того, чтобы повысить помехоустойчивость кодирования (если при приеме обнаруживается запрещенная последовательность, то распознается ошибка передачи). Кроме того, незначительная избыточность улучшает спектральные характеристики сигнала, поскольку исключает возможность появления в цепочке передаваемых бит длинных последовательностей нулей и единиц. Также повышаются и самосинхронизирующие свойства кода. При приеме данных происходит декодирование 8b/10b, то есть каждой группе из 10 бит ставится в соответствие 8 бит, а лишние биты вырезаются.

Однако в случае протокола SATA разрешенных к использованию комбинаций значительно больше, чем 256. При этом каждой входной последовательности может соответствовать несколько выходных, а какая именно выходная комбинация будет использована, зависит от контрольного сигнала rd, формируемого в процессе передачи. Рассмотрим подробнее два этапа кодирования.

При кодировании 8 исходных бит разбиваются на две подгруппы: из 5 бит и из 3 бит. На первом этапе подгруппа 5 бит подвергается кодированию 5b/6b, то есть каждые 5 бит заменяются на 6. На втором этапе оставшиеся 3 бита подвергаются кодированию 3b/4b.

Целесообразность использования двухэтапного кодирования вызвана тем, что при кодировании каждой группы (сначала 5 бит, а потом оставшихся 3 бит) формируется специальный бинарный контрольный сигнал rd (Running Disparity), который может быть либо отрицательным (rd-), либо положительным (rd+).

При кодировании 5b/6b для 32 возможных 5-битных комбинаций на входе существует 46 6-битных возможных комбинаций на выходе (не 32 и не 64, а именно 46!). Получаются эти 46 возможных комбинаций следующим образом: каждой из 32 возможных 5-битных комбинаций на входе ставится в соответствие две 6-битные выходные последовательности: прямая и инверсная, за исключением тех 6-битных последовательностей, для которых количество «1» совпадает с количеством «0» — отсюда именно 46 возможных комбинаций на выходе.

При кодировании 3b/4b для 8 возможных 3-битных комбинаций на входе существует 14 возможных 4-битных комбинаций на выходе, которые формируются так же, как и прежде.

При кодировании 3b/4b, так же как и при 5b/6b, использование прямой или инверсной выходной последовательности определяется текущим значением контрольного сигнала rd. Если сигнал rd положителен, то используется прямая последовательность, а если отрицателен — то инверсная. При этом текущее значение сигнала rd определяется по предыдущей переданной последовательности из 6 или 4 бит.

Правило для формирования сигнала rd достаточно простое. Сигнал положителен, если количество единиц больше количества нулей в группе закодированных бит. Исключение составляют последовательности с равным количество нулей и единиц. Для последовательностей 000111 (подгруппа 6 бит) и 0011 (подгруппа 4 бит) сигнал считается положительным, а для последовательностей 111000 и 1100 — отрицательным. Во всех остальных случаях сигнал rd нейтрален и не меняет своего состояния.

К примеру, если входная последовательность 5 бит 00001 подвергается кодированию 5b/6b, то при положительном текущем сигнале rd+ последовательность 00001 будет заменена на последовательность 100010. Если текущее значение сигнала rd отрицательно (rd-), то будет сформирована инверсная последовательность 011101. Но в обоих случаях последующее состояние сигнала rd изменится на противоположное, так как при rd+ в последовательности 100010 нулей больше, чем единиц, и, следовательно, сигнал rd примет отрицательное значение, а при rd- в последовательности 011101 единиц больше, чем нулей, и сигнал rd станет положительным.

Аналогичному кодированию в зависимости от текущего значения сигнала rd подвергается и подгруппа из 3 бит (кодированию 3b/4b), причем с учетом того, что сперва происходит кодирование 5b/6b, а потом 3b/4b, текущее значение сигнала rd при кодировании 3b/4b определяется по результату кодирования 5b/6b.

Таким образом, в стандарте SATA предусмотрен довольно нетривиальный метод логического кодирования.

Кроме логического двухэтапного кодирования, при передаче данных используется метод циклического избыточного контроля CRC-32 (Cyclic Redundancy Check) с образующим 32-битным полиномом

и скрэмблирование с образующим полиномом

На физическом уровне используется потенциальный код NRZ (Non Return to Zero).

Другой особенностью стандарта SATA является организация взаимодействия между контроллером и диском по принципу «точка-точка» (peer-to-peer). Напомним, что стандарт Parallel ATA предусматривает подключение на один канал до двух устройств (Master и Slave); соответственно полоса пропускания для обоих устройств не превышает 133 Мбайт/с. В стандарте SATA к одному контроллеру можно подключить только один жесткий диск, поэтому каждому устройству стандарта SATA предоставляется вся полоса пропускания целиком.

Физическая среда. Ключевой момент, ради которого то все и было затеяно: используется не параллельная физическая шина, а последовательная, состоящая из 2-х пар проводов (одной передачи и одной на прием) и несколько нулевых. Всего семь. Провод которыми соединяются устройство последовательной ATA становится таким образом тонким и круглым, гибким и удобным в использовании, не препятствует воздухообмену. С другой стороны, изготовление провода функционирующего на столь высоких скоростях, как у Serial ATA, и при этом обладающего высокими механическими характеристиками, пусть и содержащего всего 7 проводов, обходится вряд ли дешевле, чем обычного 80-ти жильного. И если где-то и содержится возможность снижения стоимости пользования, как обещано разработчиками изначально, то вряд ли здесь. Зато безусловно задача согласования (терминирования) решается теперь намного дешевле. А длина кабелей может достигать 1 метра. SATA может быть не только интерфейсом внутренних устройств хранения, но и… внешниих…

К тому же в стандарте SATA предусмотрена поддержка технологии «hot swap» (использование дисков с горячей заменой), которая уже давно используется в дорогих серверных SCSI-дисках, а с появлением устройств Serial ATA станет стандартом для всех устройств хранения данных.

Канальный уровень.

Канальный уровень выполняет функции арбитража и результата выполнения операций передачи данных, скремблирование, а также реализует механизмы обнаружения и коррекции ошибок.

Арбитраж и контроль передачи. Сам по себе физический уровень может только передавать данные, поступившие на его вход. Для предотвращения конфликтов, когда одновременно и устройство, и хост контроллер хотят передать данные, на канальном уровне предусмотрен специальный механизм контроля, получивший название арбитража. Кроме того в обязанности канального уровня входит слежение за тем, были ли данные успешно переданы и сообщение об этом вышестоящему - транспортному уровню. Легко сообразить зачем это нужно.

Обнаружение и коррекция ошибок. В отличие от стандарта ATA, который различными механизмами обнаружения и коррекции ошибок обрастал по мере роста быстродействия, т.е. тогда, когда припирало и без них было не обойтись, в Serial ATA несколько механизмов заложены изначально. Во-первых, хорошей распознаваемостью обладает используемый на физическом уровне NRZ. Но это не главное, ряд ошибок может успешно его миновать. Как говорилось выше, применяется избыточное кодирование 8B/10B. Суть его проста: 8 бит исходных данных дополняются 2-мя дополнительными битами. Итого получается 10 бит - т.е. 1024 возможных битовых комбинаций может быть в получившемся коде, в то время как в исходном - только 256. Из результирующего кода отбирают 256 комбинаций, которые будут соответствовать 256-ти комбинациям исходного кода, а остальные считают запрещенными. Это позволяет распознавать искажение данных - если принята запрещенная последовательность, то при передаче произошла ошибка. Кроме того, в Serial ATA используется CRC код. Кстати то, что жесткие диски с SATA имеют максимальную скорость обмена по интерфейсу в 150 Мбайт в секунду, при том, что для SATA заявлена скорость передачи на физическом уровне в 1.5 Гбит/с, объясняется использованием избыточного 8B/10B кодирования, снижающего полезную пропускную способность интерфейса до 1.2 Гбит/с.

Скремблирование. Код NRZ, используемый на физическом уровне не обладает свойством самосинхронизации, так как при последовательности нулей или единиц сигнал в линии просто превращается в постоянный сигнал определенного уровня. Скремблирование помогает бороться с этим явлением, перемешивая данные, подлежащие передаче определенным образом так, чтобы вероятность появления единиц и нулей на выходе была приблизительно одинаковой. Работает канальный уровень так: получает информационный кадр от транспортного, выполняя логическое кодирование и вычисление CRC, и спускает вниз - к физическому уровню. При получении данных от физического порядок действия обратный.

Транспортный и прикладной уровни.

Задачей транспортного уровня является обеспечение вышележащим протоколам передачи с той степенью надежности, которая им требуется. Он упаковывает поступившие от прикладного уровня ATA команды в кадры и предает их следующему, или распаковывает поступившие снизу данные и передает на прикладной уровень.