Радио-Губитель Канал на YouTube
Ну вот, разобрался вроде с USB.
Получается считать и передать на PC
в реальном времени дорожку в виде
8 битных значений времени, даже c HD диска.
Из микросхем только PIC. 3"5 дисководы работают
отлично питаясь от USB, а вот 5,25" иногда происходит
зависание, наверно придется для них буферные элементы ставить.
После некоторых экспериментов
научился вытаскивать из образа все заголовки
секторов и данные секторов с правильным CRC,
т.е. можно уже сделать USB читалку дисков.
Но не могу разобратся с маркером трека C2 C2 C2 FC,
если попасть в фазу, то определяется нормально, но если
в фазу не попасть, то 0xC2C2C2FC превращается в сдвинутый
0xA1A1A1FE. - 0x0A0A0A00 (или сдвинутый на бит 0x14141401)
Может кто знает алгоритм преобразования MFM?
Вобще там интересная картина, вроде межсекторные данные
представляют всякую ерунду, но стоит поменять фазу или сдвинуть
массив на несколько бит, то сразу становятся видны межсекторные
пробелы и поля синхронизации, с определенным алгоритмом я думаю
можно получить точную копию дорожки, за исключением потерянных бит.
Вот картинка распределения длительностей импульсов на HD треке:
1 столбик - 2 мкс
2 столбик - 4 мкс
3 столбик - 6 мкс
По этой функции наверно можно определять качество записи(чем тоньше всплески, тем качественнее запись) может и юстировку делать.
Скрытый текст
Profi v3.2 (SIMM 1024kB, Color CP/M, Turbo VG)
Profi v3.2 256kB + PAL coder
Плата ZXM Phoenix 1024kB + VGA converter
ZX Evolution 4096kB + SSD-1Gb
Плата Speccy 2010
Плата Sprinter Sp2000s
Плата Reverse U9 EP3C
Плата Reverse U10 EP3C
Плата Reverse U16 EP4CE22
Плата Mist v1.31
Terasic DE1
Terasic DE1-SoC
Terasic DE10-nano
iCore 3
[свернуть]
Вы даете мало информации о том, как и что вы читаете. Если вы читаете сырые данные, то есть до MFM преобразования, то это одно. Если уже после MFM, то другое. К слову замечу, что если вы читаете уже после MFM преобразования, и информация сдвинулась, то обратному восстановлению она уже не подлежит. Т.е. желательно считывать информацию именно до MFM преобразования, в сыром виде, а уже на компьютере ее преобразовывать на свой вкус.
Читаются 8-ми битные значения времени,
замеренные между импульсами.
Т.е. значения 2(4) мкс.
4(6) мкс.
6(8) мкс.
Эти значения преобразую
уже на PC в битовый поток.
Однако значение 2(4) мкс можно
трактовать как 0 или как 1, в зависимости, от того
что было перед ним 0 или 1, ну и другие значения так же.
Скрытый текст
Profi v3.2 (SIMM 1024kB, Color CP/M, Turbo VG)
Profi v3.2 256kB + PAL coder
Плата ZXM Phoenix 1024kB + VGA converter
ZX Evolution 4096kB + SSD-1Gb
Плата Speccy 2010
Плата Sprinter Sp2000s
Плата Reverse U9 EP3C
Плата Reverse U10 EP3C
Плата Reverse U16 EP4CE22
Плата Mist v1.31
Terasic DE1
Terasic DE1-SoC
Terasic DE10-nano
iCore 3
[свернуть]
Опять не понятно.
Импульсами чего? Откуда берутся импульсы? Для информации, на самой дискете имульсов нет, есть области, намагниченные по ходу вращения диска, и против. Т.е. '<--' и '-->'. Это считывается, потом проходит через дифференциатор, потом через компаратор, потом уже преобразуется через MFM, и получается поток бит со скоростью 300кбит для 5-дюймовой DD-дискеты, и 250кбит для 3.5-дюймовой. Поясните, на каком этапе вы берете импульсы и откуда. Учитываял, что одиночные импульсы есть до MFM, наверное вы их и берете.
Кстати, еще интересен вопрос, как вы гоните поток со скоростью 500*8=4мбита/сек через USB, и при этом его не буферизируете на своем устройстве? Или все же у вас есть буфер?
Последний раз редактировалось Titus; 17.11.2011 в 12:34.
На DD дорожке порядка 6250 байт х 8 бит = 50000 бит или временных интервалов между импульсами, на самом деле где-то 38000 - 44000 интервалов (т.к. период в 6мкс и 8мкс дают 1,5-2 бита) Т.е. от индексного импульса до индексного импульса (200 мс) надо передать
максимум 50 000 Кбайт или 200кбайт/сек для HD получается 400кбайт/сек. А скорость USB примерно 1200 кбайт/сек, что вполне хватает.
Буфера два по 64 байта, те что в PICe, пока один заполняется другой отправляется. Самое трудное было замерять интервалы и отправлять буфер одновременно. Сначала заказал последовательную память, но пока ждал, выкрутился без нее
Имульсы берутся с вывода /RDATA дисковода.
Примерно такие:
Скрытый текст
Profi v3.2 (SIMM 1024kB, Color CP/M, Turbo VG)
Profi v3.2 256kB + PAL coder
Плата ZXM Phoenix 1024kB + VGA converter
ZX Evolution 4096kB + SSD-1Gb
Плата Speccy 2010
Плата Sprinter Sp2000s
Плата Reverse U9 EP3C
Плата Reverse U10 EP3C
Плата Reverse U16 EP4CE22
Плата Mist v1.31
Terasic DE1
Terasic DE1-SoC
Terasic DE10-nano
iCore 3
[свернуть]
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я сначала проверял, отправлял пронумерованные пустые пакеты, определенное количество, и смотрел сколько приходит. При использовании JEDI HID действительно пакеты терялись, хотя USB монитор все пакеты видел и принимал (видимо в Jedi так буфер устроен что если его вовремя не считать, то он затирается следующим пакетом) Поэтому пересел на WinLIB USB. Там все четко сколько ушло, столько и получишь, к тому же дорожки читаются нормально, нет потерянных секторов и CRC у них нормальный.
Ну это я с MFM разбирался:
Если период 4мкс, то это или 0 или 1(зависит от того что было перед ним)
Если период 6мкс, то это или 00 или 1(зависит от того что было перед ним)
Если период 8мкс, то это 01 (но после 0 это 00 и период встречается только в маркерах 0xA1)
Если при начале декодирования выбрать не ту фазу (0 или 1), то получается совсем другая последовательность, так же и в межсекторных данных видимо происходит выпадание бит и в течении дорожки фаза меняется несколько раз.
Вобщем или как-то надо синхронизироваться по 8мкс периодам, или как я делаю ищу прямое значение маркера и сдвинутое, если найден сдвинутый, то меняю фазу и дальше до следующего маркера.
Вот мне интересно как ВГ это делает (ведь сепаратор я думаю тоже фазу не сдвигает, он ее только чуть подстраивает)
Скрытый текст
Profi v3.2 (SIMM 1024kB, Color CP/M, Turbo VG)
Profi v3.2 256kB + PAL coder
Плата ZXM Phoenix 1024kB + VGA converter
ZX Evolution 4096kB + SSD-1Gb
Плата Speccy 2010
Плата Sprinter Sp2000s
Плата Reverse U9 EP3C
Плата Reverse U10 EP3C
Плата Reverse U16 EP4CE22
Плата Mist v1.31
Terasic DE1
Terasic DE1-SoC
Terasic DE10-nano
iCore 3
[свернуть]
Вообще-то это делается по специальной синхропоследовательности. Наизусть ее не помню, но где-то тут в теме про ВГ точно писал.
---------- Post added at 16:13 ---------- Previous post was at 16:11 ----------
А каким методом отправляешь информацию по USB? Там, на сколько я помню, 4 протокола есть - поточный (bulk), управляющий (control), изохронный (isoch) и прерывание (interrupt).
Синхропоследовательность - 0х00,0х00,0xA1,0xA1,0xA1,FB(FE,F8),
по этой и определяю. ВГ как-то на первой A1 синхронизируется и
вместо нее там разные байты читаются, то 14, то С2, то другие,
а у меня только по A1A1A1FE (или сдвинуто по фазе 14141401)
Быстрая точка bulk, для команд interrupt
Скрытый текст
Profi v3.2 (SIMM 1024kB, Color CP/M, Turbo VG)
Profi v3.2 256kB + PAL coder
Плата ZXM Phoenix 1024kB + VGA converter
ZX Evolution 4096kB + SSD-1Gb
Плата Speccy 2010
Плата Sprinter Sp2000s
Плата Reverse U9 EP3C
Плата Reverse U10 EP3C
Плата Reverse U16 EP4CE22
Плата Mist v1.31
Terasic DE1
Terasic DE1-SoC
Terasic DE10-nano
iCore 3
[свернуть]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)