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

 
 
> 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
 
Start new topic
Ответов
zomg
сообщение Apr 25 2011, 15:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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



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

 


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


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