Доброго дня, дорогие читатели! В этой статье я начинаю новый цикл публикаций про интерфейс SATA. Цель данного цикла: реализовать на доступной отладочной плате с подходящей микросхемой ПЛИС host-контроллер SATA. Исходных кодов такого контроллера на просторах гитхаба наблюдается несколько, однако, они заточены под очень дорогие отладочные платы и являются только демонстраторами без какой-либо полезной специализации. Плюс к этому, вы не найдете в них простых объяснений, что там и для чего. Только сухие тексты спецификаций.
Итак, как работает SATA? Суть довольно простая — взять параллельный интерфейс из 26 проводов (данные+управление) и утрамбовать всего в 4 экранированных проводника. При этом еще и увеличив скорость передачи данных! Амбициозная заявка… Если такое возможно, то почему еще в прошлом веке так не сделали? Оказывается, не особо хотелось платить патентные отчисления корпорации IBM за кодировку 8b/10b. Патенты тормозят технический прогресс? Нет, не слышали.
Схематически выше сказанная мысль выглядит так:
Показана передающая схема. Приемная такая же, только в обратную сторону.
Когда данные передаются по множеству параллельных проводников, в одном из которых тактовый сигнал, то из-за физических отличий в качестве проводников относительно друг-друга получается, что данные приходят в разное время. Решить эту задачу можно только смешав каким-то образом тактовый сигнал в сами данные. Подобный вариант перемешивания известен давно — СОМ порт! Таким образом, наш воображаемый параллельный интерфейс — это набор 16 последовательных портов. Однако, на приемной стороне будет ситуация, когда по одному порту данные уже пришли, а по другому нет. Чтобы ее разрешить нужно сделать выравнивающий буфер. Но это еще не все. Возможна ситуация, что данные в одной из линий оказались битые. Для решения нужно иметь возможность проверить целостность прихода данных и, если они пропали, то запросить их снова. Именно по такой логике работает многоканальный PCI Express! Так как жесткие диски относительно медленные, то вполне хватает одного канала из такой «пачки». А вот для SSD накопителей уже не хватает. Там нужен параллельно-последовательный интерфейс. Собственно, M.2 это оно и есть.
Думаю, что пока хватит теории. Перейдем к практике. На просторах китайских рынков была обнаружена такая плата:
Найти ее можно во всем известном магазинчике по поиску фразы «Virtex6 XC6VLX365T». Цена новой микросхемы от производителя просто космическая, а тут и микросхема и плата за очень скромную сумму. Думаю, сам факт наличия таких плат, связан с появлением 5G сотовой связи, так как это привело к замене очень большого количества базовых станций в Китае. Старые, списанные на лом станции, как раз содержат довольно крутые ПЛИС-ы на борту. Продавать их не получается, так как не факт, что их удастся перепаять. А вот когда в составе проверенной отладочной демонстрационной платы — отличное бизнес предложение!
Итак, чем хорош Virtex6? А тем, что примеры на гитхабе заточены именно под эту линейку ПЛИС-ов!
Например, у автора есть еще плата «QMTECH Wukong» из того же магазинчика. Но в ней другая 7-ая удешевленная серия, для которой «объяснения для чайников» как конфигурировать под SATA пока не находится. Еще 6-ая серия позволяет реализовать 3-ю версию SATA со скоростью 6 гигабит/секунду. Так же, на борту есть специальный диагностический модуль качества работы мультигигабитного интерфейса (GTX), что для новичка в этой теме крайне желательно. Еще хотел бы обратить внимание, что решать задачу освоения SATA можно только при помощи ПЛИС-микросхем, так как имеющиеся микросхемы преобразователей последовательного SATA в параллельный PATA интерфейс имеют ограничение по максимальной скорости в 120 мегабайт в секунду и целый букет багов.
Не забывайте делать бэкап. До новых встреч!
PS. Все публикации этой серии доступны по метке «SATA».