С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ну, я делал как, поставил Write Gate на прерывание INT1, по Fallen Edge он выключал TX, включал RX (одновременно), в векторе USART_RX_vect принимал данные, по кейсам смотрел, фигня какая-то получалась, потом сделал получение 512 байт в буфер и вывод их при чтении секторов, в итоге там оказалась фигня какая-то, местами похожая на правду, местами нет. Я так понял, там шлется дорожка целиком после прихода сигнала на WG? Насколько точно получится синхронизироваться в Master SPI по битам? Получится ли считать данные так, чтобы было удобно из мини-таблицы раскодировать?
Мне кажется проще за другое устройство зацепиться, по WG включать обработчик прерывания на WData, обработчик должен реагировать на фрон к примеру, в обработчике перезапускать таймер, в общем получится поток замеров между импулсами, его уже вторым потоок анализировать или к примеру кидать быстро во временный файл на SD, и при смене дорожки анализировать, вытягивать mfm разметку итд и писать в образ
- - - Добавлено - - -
После того как был отправлен маркер, если появился WG передачу прерывать и запускать второй обработчик, который замеряет растояние между импулсями
- - - Добавлено - - -
Можно конечно извратиться и попробовать зацепиться за синхронизацию, но возможность подстраивать не будет, замерять расстояние между импульсами, более надежный способ, чем читать как SPI, нагрузка больше конечно, но временный файл может решить проблему, но есть еще момент, форматирование диска, это самый плотный поток, но думаю на него можно забить
- - - Добавлено - - -
О! самый четки вариант как мне кажется такой
Работаем в обычном режиме, посамтривая на WG, если он активируется, то программно синхронизируемся, подстраивая фазу таймера под источник, после этого таймер заставляем генерировать клок для SPI, который переключаем в slave
получается и прерывания не часто и словить фазу правильную можно, можно даже таймер подстраивать в теории
Спасибо, завтра попробую, но не уверен что получится, хотя, в примере на http://firmware.altervista.org/Data%...20Decoding.htm вроде получилось по таймеру
- - - Добавлено - - -
Расчехлил я лог анализатор и решил посмотреть, что же там за сигнал идет с WRITE DATA и WRITE GATE, увиденное меня несколько озадачило... я надеялся увидеть что-то похожее на READ DATA, а там....
Это запись дорожки в которой во всех секторах нули в Real Commander
Это подробности сигнала при записи дорожки
Это запись с помощью команды SAVE "k" в тырдосе
Как видите... сигнал существенно отличается... Что там передается - непонятно, есть ли там заголовки и поля не пойму, может там данные в чистом виде?
Судя по внешнему виду сигнал кодируется так
Пульс (HIGH) на 42нс, потом LOW на 4, 6, 8 мкс, но есть местами и 101 (все по 42 нс), а есть большие промежутки, больше чем 8 мкс.
В самом начале дорожки вообще какие-то непонятные сигналы.
PS: почитал еще информацию по контроллеру http://www.defence-force.org/computi...-datasheet.pdf
там есть 2 вида команд записи, запись дорожки и запись сектора.
------------------------
UPD: кажется разобрался
Вот запись 1 дорожки в Real Commander
В предыдущем случае писалась 0 дорожка, а для нее RC использует 9 секторов, поэтому 9 записей было, а тут 16, всё норм.
Т.е. запись происходит записью секторов (Команда Write Sector контролера).
Сектора пишутся прям в область данных сектора.
Команда Write Track используется только при форматировании.
Т.е. схема такая
После отправки заголовка сектора проверяем Write Gate, если он LOW, то
1) отключаем передачу, запускаем чтение
2) ждем пока принимаемый байт равен нулю
3) пропускаем 8 принятых байт
4) получаем данные сектора (256 байт сектора = 512 байт MFM)
5) получаем CRC (2 байта = 4 байта MFM)
6) проверяем CRC
7) записываем 2 сектора старый и новый на SD, если CRC совпали
шаги 5,6 можно опустить для простоты
------------------------
UPD3: Снял диаграму на 1MHz, вроде похоже на правду
т.е. пропускаем 12 байт, пропускаем маркер и читаем данные с CRC
Последний раз редактировалось EvgenRU; 10.04.2016 в 12:46.
Всё-таки решил я окончательно, что не буду делать запись, очень сложно и почти нереально на ардуине. Чтения более чем достаточно, чтобы закинуть кучу образов на флешку и играться с ними :-D
В последнем обновлении поменял пины местами, чтобы удобно было подключаться к кабелю дисковода, использую теперь PCINT2 вместо INT0.
Картинка, как всё это дело подключать так же закинута на гитхаб, но и тут приложу на всякий.
![]()
А дисплей куда подключать?
Дисплей пока что никуда, я еще думаю над нимпока что на карту кидается default.trd и с ним идет работа. Но, в целом, пинов еще достаточно и для дисплея и для кнопок.
PS: пока что свободные пины - PB1, PC0-PC5, итого 7 штук.
PS2: всё еще есть некоторые проблемы, связанные с переключением сторон в процессе чтения дорожки, надеюсь удастся окончательно побороть с новым подходом к чтению сектора.
Последний раз редактировалось EvgenRU; 12.04.2016 в 20:20.
Итак, товарищи, есть проблема с переключением сторон, как я уже говорил, сторона может измениться для любого сектора дорожки, и это факт!
Таким образом, нужно хранить в памяти сектор одновременно для двух сторон, т.е. под это дело придется использовать целый 1К памяти!!! + грузить 1К с флешки после отправки двух секторов. Буду пытаться провернуть эту операцию, так что ожидайте. Тот вариант, что есть сейчас, работает, но не для всех файлов, т.е. попадаются такие, которые расположены в середине дорожки и они могут не грузиться.
Что если в момент смены стороны, заставить подождать контроллер дисковода (как будто не читается или более культурно),
а в это время подготовить данные для дугой стороны, такие ситуации видимо не часто происходят и не сильно замедлят в реале.
К сожалению, это именно текущий вариант, практика показала, что смена стороны может происходить довольно часто, видимо турбоформат сказывается или еще что.
Так что секторы обеих сторон должны быть в памяти на случай смены стороны. Я уже, в принципе, этот вариант сделал, он работает, осталось допилить и дооптимизировать, надеюсь завтра-послезавтра выложу на гитхаб. Но памяти осталось примерно 200 байт )
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)