реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SATA2.0 в Virtex5
Eugenius
сообщение Apr 7 2011, 15:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 13-03-07
Из: Ленинград
Пользователь №: 26 139



Отлаживаем SATA контроллер в кристалле Virtex5. Режим работы - SATA2.0 (3Гбита).

При коротких пересылках по 1-2 сектора всё работает хорошо. А вот при передачи больших объёмов данных, при блоках больше 4 секторов возникают проблемы:

1. Высокий уровень ошибок CRC на шине. На приёме от дисковода - ~2 ошибки на 15Гб, на передаче те же 2, но на 100Мб.

2. Зависания шины. Причём на двух разных дисководах это проявляется по разному.
Один в какой-то момент не подтверждает приём данных и далее не реагирует ни на какие команды.
Второй подтверждает приём, но далее также ни на что не реагирует.

Выяснили, что всегда (по крайней мере в большинстве случаев) зависанию предшествует передача символа Align во время фазы данных. В спецификации нет никаких запретов на выдачу Align'а. Хотя опытным путём выяснили, что если выравнивание происходит во время старта кадра - шина также виснет. Хорошо, эту ситуацию зарубили. Но что делать с выравниванием во время прохождения обычного тела кадра?

Возможно, проблема в линии - вероятно, сбой происходит именно в момент выравнивания и это вешает шину.

Подключение по стандартной схеме: на всех линиях стоят конденсаторы 10nF. Все питания в норме. Во всех каналах ситуация одна и та же. Регулировка амплитуды сигнала не даёт толком ничего. PCI-E в этом же кристалле работает без проблем.

Сообщение отредактировал Eugenius - Apr 7 2011, 15:21
Go to the top of the page
 
+Quote Post
Eugenius
сообщение Apr 8 2011, 11:14
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 13-03-07
Из: Ленинград
Пользователь №: 26 139



Так, с зависаниями шины разобрались - своя глупость. Но по какой причине высокий уровень ошибок CRC, не понятно.
Go to the top of the page
 
+Quote Post
zomg
сообщение Apr 25 2011, 15:02
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



Я тоже пытаюсь построить контроллер SATA2.0 на отладочной плате ML505 с Virtex5. Жесткий диск Western Digital Caviar Black WD5002AALX.
Запись одного сектора проходит без проблем. Но если попробовать хотя бы 16 секторов одним кадром, то контроллер виснет. Но это по моей вине из-за неправильной обработки прихода примитивов.

Тут целая головоломка с ALIGN: нужно отследить когда его отправляет HDD и сделать также.
Сначала я думал, что ALIGN отправляется только после CONT, поэтому так построил алгоритм передачи ALIGN со своей стороны. Оказывается, как удалось отследить в чипскопе, винт может отправить ALIGN и без всякого CONT.

Надо еще посмотреть, каким образом жесткий диск отправляет ALIGN во время передачи данных со своей стороны.
Со своей стороны я делаю так: ... данные, HOLD, HOLD, CONT, ALIGN, ALIGN, HOLD, данные ... .
Go to the top of the page
 
+Quote Post
Eugenius
сообщение May 8 2011, 09:43
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 13-03-07
Из: Ленинград
Пользователь №: 26 139



Спасибо. Нашли ошибку: строб спецсимвола выскакивал когда этого не надо. Всё сразу зажило-закрутилось без проблем во всех каналах.

Собственно, 8-канальный RAID уже практически готов. )
Go to the top of the page
 
+Quote Post
zomg
сообщение May 8 2011, 12:13
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



Очень интересно, а какая у Вас получилась средняя скорость записи в одном канале? У Вас реализован режим FPDMA?

Связываться с реализацией FPDMA я не стал. Пробовал несколько раз записать на HDD блок данных (счетчик) размером 10 ГБ командами DMA по 40 КБ. В процессе записи считал команды, на которые был получен ответ от устройства с ошибкой CRC. Команда с ошибкой CRC повторялась еще раз. Получил в результате, что скорость варьировалась от 60 до 75 МБ/сек, причем чем больше ошибок CRC, тем меньше скорость. Получилось в лучшем случае на каждые 3 МБ приходится одна команда с ошибкой CRC, то есть еще чаще, чем у Вас biggrin.gif Чтение с устройства еще не проверял. Ну а причиной ошибок CRC является шум.

По ALIGN: устройство может отправить его в любое время, даже может попасть в информационное поле кадра. Значит также можно поступать и с HDD. Последовательность HOLD, CONT, ALIGN в теле кадра я придумал.

Не могу понять причину такого поведения: иногда после того, как соединение с устройством установлено, в ответ на все команды записи устройство отвечает ошибками CRC. Потом вообще зависнет все. Делаю сброс, после переподключения команды проходят нормально, связь стабильная по крайней мере несколько часов, больше не проверял. Удачное или неудачное соединение происходит случайно.
Go to the top of the page
 
+Quote Post
vicg
сообщение May 23 2011, 14:26
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 31
Регистрация: 8-12-04
Из: беларусь, россия
Пользователь №: 1 410



Тоже делаю SATA на Xilinx V5. Столкнулся с проблемой. Есть три HDD разных производителей (Sumsung,Seagete,Western Digital), так вот соединение + получение сигнатуры от HDD могу получить только от Sumsung. С другими HDD соединение устанавливается (принимаю примитивы SYNC) а вот сигнатуру HDD не присылает.
Может кто сталкивался с такой ситуацией, а то уже голову сломал
Go to the top of the page
 
+Quote Post
zomg
сообщение May 24 2011, 07:04
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



vicg
Вы проверяете на прошивке XAPP870? В этой прошивке все время на устройство передается R_RDY.
Если устройство не отвечает кадром после установки соединения, значит, возможно, этот кадр не предусмотрен в данном HDD. laughing.gif

Мой HDD отвечает этой сигнатурой (правильнее сказать кадром), причем первое dword C38276B9, а в XAPP870 схитрили и написали C28276B9. Если проверить контрольную сумму CRC, то должно быть 3. То есть значение регистра ER = 0x01. После сброса или выполнения команды EXECUTE DEVICE DIAGNOSTIC регистр ER содержит диагностический код. В данном случае 0x01 говорит: Device 0 passed, Device 1 passed or not present.
Go to the top of the page
 
+Quote Post
zomg
сообщение Jun 18 2011, 15:50
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



Наконец-то разобрался с ошибками CRC.
Оказывается причиной этих ошибок был не шум, а мои косяки в контроллере. Спасибо Eugenius за помощь! biggrin.gif
Скорость записи винта HDD выросла до 129 МБ/сек, скорость чтения такая же. Режим последовательной записи/чтения, команды DMA, 40 КБ на одну команду.
SSD Crucial C300 CTFDDAC256MAG-1G1 в тех же условиях выдал 200 МБ/сек на запись и, странно, 170 МБ/сек на чтение.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2017 - 17:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016