|
|
  |
ATA контроллер & ПЛИС |
|
|
|
Sep 24 2009, 09:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Kuzmi4 @ Sep 24 2009, 12:18)  Код assign ch1_dd_pad_i = ch1_dd_pad; assign ch1_dd_pad = (ch1_dd_padoe_o)? ch1_dd_pad_o : 16'bz; Откуда мусор на ch1_dd_pad_i когда ch1_dd_padoe_o == 1 ??  Я конечно не гуру верилога и может быть скажу глупость, но написал бы Код assign ch1_dd_pad=(ch1_dd_padoe_o==1'b1) ? ch1_dd_pad_o : 16'bzzzz_zzzz_zzzz_zzzz;
|
|
|
|
|
Sep 24 2009, 12:41
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
Смотрю осцилом на лапах, и чипскопом сигналы - что осцил что чипскоп говорят одно и то же - времянка на запись и чтение согласно спецификации - вот это меня и ставит в тупик, на матери винт проверял - в биосе видится, значит IDENTIFY DEVICE проходит всё таки... Самое подозрительное - это мусор на лапах данных при записи (хотя отчётливо видно из assign-ов, что на них должны быть стабильные данные). Счас немного модифицировал дизайн для проверки (опустился на самый низ - примитивы прост опроверить) Код assign ch1_dd_pad_o = 16'hAAAA; assign ch1_dd_pad_i = ch1_dd_pad; assign ch1_dd_pad = (ch1_dd_padoe_o)? ch1_dd_pad_o : 16'bz;
assign LED1_n = ch1_dd_pad_i[0]; assign LED2_n = ch1_dd_pad_i[1]; assign LED3_n = ch1_dd_pad_i[2]; ch1_dd_padoe_o - беру с кнопки на ПП. Проверил в технолоджи-мапе как он конструирует это всё (работаю с Xilinx) - через IOBUF - как и должен. На вход IO этому IOBUF заводится шина dd_pad, сигналы на которую выводятся с pad_o через OBUFT. То есть вообсче не к чему придраться вроде бы со стороны плиски (всё как заказывал). В немодифицированном дизайне конструкция чесная, через IOBUF - как и должна быть, но откуда тогда берётся мусор на линии данных когда я пишу в шину, получается ата-девайс начинает гадить, но с какого это....
|
|
|
|
|
Sep 28 2009, 03:15
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Kuzmi4 @ Sep 26 2009, 03:31)  На будущее, может кому будет полезно - радиоэлектроника- наука про контакты, и с проектированием переходников уровней нужно внимательным быть  . Кстати , может кто посоветует грамотные переходники уровней с 2.5В на 5В, так чтоб 2направленные были (а то один тут уже выбрали  ) ? мне нравятся вот эти Dual Supply Translators http://focus.ti.com/paramsearch/docs/param...AliasId=1100707использовал SN74ALVC164245 http://focus.ti.com/docs/prod/folders/prin...alvc164245.htmlдоставал через чип дип
--------------------
|
|
|
|
|
Sep 28 2009, 08:42
|
Местный
  
Группа: Участник
Сообщений: 222
Регистрация: 27-01-09
Из: г.Жирновск
Пользователь №: 44 025

|
Цитата(des00 @ Sep 28 2009, 07:15)  мне нравятся вот эти Dual Supply Translators использовал SN74ALVC164245 А у меня так ничего и не вышло. Делал самопальный usb-hdd переходник для ATA винта, без UDMA. Удалось даже прочитать его каталог, и файлы киношек с винта вытащить. Но работало нестабильно. Использовал как раз похожие двухуровневые переходники от Ti. И хотя по диаграмме все было верно, никаких там всплесков, но похоже есть еще какие то подводные дела. В результате винт заткнулся причем надолго. Такое впечатление что у было где то наложение выходов друг на дружку во время переключения трансляторов SN74, и в итоге выходные буферы винта перегревались и переставали работать. Где это происходило, в каком месте так и не смог выловить. Общая конструкция была такая. Плата usb, разъем IDE40, шлейф 10см, разъем IDE40, плата трансляторов уровней, разъем IDE40 и шлейф 20см, собственно к винту. Возможно вот эта куча разъемов на пути сигналов сыграла свою роль. Может у автора такая же штука, сигналы двигаются от чипа к винту очень по разному.
--------------------
Еж - птица гордая. Не пнешь - не полетит.
|
|
|
|
|
Oct 19 2009, 09:56
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
И снова здравствуте. Опять натолкнулся на некоторые трудности. Очень специфический момемент, литературу перерыл, по инету полазил - что-то не нашёл ответа. Собственно проблема такого плана - есть модуль с машинкой - чтение/запись (объём - 1 сектор). Читать могу сколько угодно - всё завершается без ошибок. А вот с записью есть некая заковыка - использовал для проверки такую последовательность действий - читаю в блоковую память плиски сектор (512Б), модифицирую, записываю обратно в тот же сектор, читаю - сравниваю. Значит всё шло хорошо до момента 2-го чтения - когда нужно вычитать из сектора то, что модифицировал на предыдущих этапах. Возвращается DRDY == 1 - то есть девайс готов и BSY==0,DRQ==0 - то есть в девайсе произошла ошибка, такое происходит всегда после обрабатывания запроса записи (чтений штук 10 вставлял даже, а между ними запись, или записи 5 штук - именно после первой же записи на следующей любой транзакции получаю BSY==0,DRQ==0). И что самое интересное - если провести софтварный сброс - и начать заново вышеописанную последовательность действий - всё повторятся по кругу (всмысле ошибка на следующей транзакции после запииси сектора). Чтение же после софтварного ресета показывает немодифицированный блок - что тоже странно , потому как первая процедура записи возвращает статусовый регистр с нормальным завершением. Код машинки приложил
ide_rw_1sector00.txt ( 9.6 килобайт )
Кол-во скачиваний: 222Писал её по атапи-7 и сравнивал с найденными в инете исходниками для МК - вроде одно и тоже, но отчего то не работает . Пио0-тайминги делает другой процесс - для него управляющий сигнал - strobe_in/out, сигнал в главную машину что операция закончена - pio_cyc_ok
pio_timing_module.txt ( 2 килобайт )
Кол-во скачиваний: 176...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|