И снова здравствуте.
Опять натолкнулся на некоторые трудности. Очень специфический момемент, литературу перерыл, по инету полазил - что-то не нашёл ответа.
Собственно проблема такого плана - есть модуль с машинкой - чтение/запись (объём - 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...