Как стать автором
Обновить

Комментарии 47

Настоящая крутотень у tnt23. :) У него всё на одном контроллере — мне такое недостижимо (шаг ножек у таких контроллеров мал, нужно у китайцев платы заказывать, но я до этого ещё не дошёл).
А если на STM32?
Можно даже немного упростить себе жизнь, сделав из неё Arduino (проект stm32duino).
По цене не шибко дороже получится.
Можно и на STM32. Главное, продумать, как. Дисковод только кажется простой и медленной игрушкой, но по факту тайминги там очень маленькие и для их отработки в машинах использовались чисто аппаратные средства.
Как я понял, память используется для хранения всех данных дискеты. Не совсем понятно, зачем это сделано. В дисководах же применяется механика, а значит есть приличные задержки при переходах между дорожками, и можно подгружать данные напрямую с карты в эти моменты.
Да вот есть и такие устройства. Непонятно, только, как работающие:

1) SD-карта пишет и читает блоками по 512 байт. После выдачи ей 512 байт на запись происходит пауза, пока контроллер карты запишет данные и ответит.
2) Импульсы перемагничивания имеют длительность 0.1-1.1 мкс. На частоте 40 МГц это будет от 4 до 40 тактов. Внешнее прерывание такое отловит, но всё равно, время мало…
3) Между импульсами перемагничивания 2 мкс.

Выходит следующее. Запускаем SD-карту на выдачу блока 512 байт, считываем его побайтно и выдаём данные. Одновременно ловим прерывание перемагничивание и заполняем буфер на 512 байт. По окончании (если была запись) забрасываем этот блок на SD-карту. При этом нужно постоянно анализировать смену дорожек и поверхности диска (если смена будет когда SD-карта ещё не дочитала блок, нам придётся завершать чтение и дозаписывать карту). Запись блока на SD-карту займёт 512 байт*8 бит в байте/20 000 000 бит в секунду по spi *1000000 микросекунд в секунде= 205 мкс без учёта задержки на ответ контроллера. Это значит, что мы гарантированно пропустим импульс перемагничивания на стыках блоков.
Я конечно уже нефига не помню, но не для этих-ли целей была 34 нога, что бы её поднимать на это время?
Да, есть такая штука — Disk Change. Но Amiga всё равно недовольна. :)
А если взять такой алгоритм:
при команде считать сектор по определенной дорожке — считывать всю дорожку в определенное место в DRAM.
при следующей комманде считывания сектора другой дорожки — аналогично

так постепенно весь диск будет в памяти и минимальные задержки, только необходимые.

Как мнение, не нужно сразу выплевывать данные при команде чтения сектора, в реальности же головка пока синхрометку найдет, пока спозиционируется->счет на миллисекунды. Поэтому можно не весь образ в память загонять, а только необходимую часть.
>> комманде считывания сектора
AFAIR с флопа Amiga читает дорожку целиком и декодирует MFM «ручками».
У меня была первая версия, где я считывал и хранил одну дорожку во внешнем ОЗУ. Но не успевает atmega на 16 МГц такой фокус проделать — при всей механике дисковода, он всё-таки довольно быстр. Amiga не хотела долго ждать, и периодически выбрасывала ошибку чтения. Поэтому от этого варианта я ушёл. Тут нужен контроллер побыстрее.

две стороны одной дорожки тогда надо читать.

Atmega… ребята, 21 век на дворе! Платка в Китае на STM32103C8T6(гуглить по маркировке) стоит меньше 2-х баксов! Гонится до 128Mhz(вместо штатных 72-х) легко! Прошиваются все 128Kb ROM(вместо гарантированных 64Kb), RAM 20Kb. Дисплей можно взять на ILI9341 и подключить по SPI. При желании можно взять с тачскрином и подключить все на один SPI. Всего их два, так что и на SD-шку хватит. А уж про DMA даже не говорю — запихал в буфер, скомандовал "Шли!" и сам делаешь что хочешь.
Ну а если без внешней памяти уж совсем никак — смотреть в сторону Nucleo с большими чипами с кучей выводов и Flexible Memory Controller.
Ну, это понятно. Только не было у меня STM32 на момент разработки этого эмулятора. А был ЛУТ и микросхемы в dip и soic.
Ну и ещё atmega очень простая в программировании и очень предсказуемая по работе (дёрнуть ножку порта — 2 такта и так будет всегда) — почти как мой любимый Z80. У stm32 всё-таки повозиться придётся много с настройками регистров. Вот к примеру, я не уверен, может ли DMA дёргать ножками с длительностью 0.5 мкс и периодом 2 мкс и выдавать развёртку байта последовательно? Тут, наверное, spi надо к DMA подключать — он как раз последовательно биты выбрасывает. А подключается он так? Не знаю. Надо смотреть документацию.
Вот, если лень поборю, напишу следующую статью про копирование RFID-меток стандарта em-marin. Там тоже у меня atmega8 использована, как очень простая и удобная. А плату с stm32 я приберегу для подключения по USB тепловизора Flir One. Правда, я ещё не читал, умеет ли режим хоста stm32.

Дергать ножками (модифицируя все 16 значений ножек) частота 72/4=18 MHz через dma.
Время редактирования истекло :(

Не, я заказал STM32F103VET6 для модуля Lepton, но решил сам модуль из тепловизора не вытаскивать, а подключить по USB. Но пока не смотрел, что там на борту кроме большого ОЗУ.

Дергать ножками (модифицируя все 16 значений ножек) частота 72/4=18 MHz через dma.


Побитно? Просто выдавать надо побитно. Иначе 12800 байт дорожки превратятся в 102400 байта (12800*8).

Ножками можно дергать процессором. Все остальное через DMA (screen, sd). Я себе FPGA купил. Его ресурсов хватит на такую задачу. FMC (fmc != fsmc прочитайте разницу в гугле) можно для доступа к памяти.

В вашей плате есть: SDIO, LCD Controller, fsmc (контроллер статической памяти (sram, nand, nor)). А как вы смотрите на FPGA для таких задач?

Ножками может и не получится. А FPGA штука замечательная. :)

AMiGA RULEZZ FOREVER!!!!

тот :)
Как думаете, стоит сюда разместить статью про эмулятор магнитофона для спектрума? Ему, конечно, много лет и все его давно видели, но вдруг кто-то не видел? Этот эмулятор, конечно, не такой навороченный, как у Trol73, но главное там ведь не сам эмулятор, а разбор кодирования сигнала для тех, кто не знает формат сигнала спектрума.
Однозначно стоит!
А чего у меня спрашиваете то? :) Конечно стоит!
Да есть подозрение, что здесь эта тема почти никому не будет интересна. По крайней мере, статей по работе со столь старыми компьютерами тут мало.
Вот про эмулятор магнитофона. Особо, правда, там нечего и писать. Но вдруг кому интересно будет.
Две линейки SIMM общим объёмом 2 мегабайта? Довольно странный выбор в наше время. Не проще было поставить одну статическую озушку? Например, вот такую: IS61WV20488BLL.
Это, конечно, гораздо удобнее было бы. Но в ЧиД, например, такие микросхемы строго под заказ и стоят 1890 р. штука и то BGA-корпус. Ну и корпус TSOP у неё с маленьким шагом между ножками.
Ну на алиэкспрессе такую озуху в TSOP-корпусе можно было бы раза в два дешевле найти — в районе 12-15 баксов вместе с доставкой. У TSOP шаг — 0.8 мм. Если печатку вручную рисовать, то конечно будет трудновато. Если же воспользоваться лазерно-утюжным методом, то нормально.
Хозяйке на заметку — на али полно плат-переходников с soic/tssop/tqfp на пины 2.54. Очень удобно, например, распаять ОУ в SO8 и воткнуть в макетку.
Так можно всё что угодно сделать! :) Главное — фантазия. Я для того и привёл формат дискеты, чтобы нашлись энтузиасты и сделали что-то офигенное. :)
Статья супер!
Однако хотелось бы увеличивающуюся схему по клику.
Спасибо.
Да я бы с радостью, но не знаю, как.
1. Если уж память (DRAM) с параллельной шиной — то мог оказаться более приемлемым ATmega162 с полноценной внешней шиной (PortA/PortC). Не учерен, правда, насчёт достаточного совпадения с временной диаграммой EDO-памяти — с ней давно не сталкивался и никогда не использовал сам. Но, например, NAND-Flash прицепилась на внешнюю шину (ATmega162 и AT90USB128x) как родная.
2. Какое-то странное согласование уровней между D2 (5 В) и SD-картой (3.3 В). Высокое свободно лупит с выходов контроллера в карту. Или что это такое, на VD1-VD6? (Смотрю по схеме в шапке статьи).
1. О, я такой вариант не смотрел. :) Я с 162 дел просто не имел, поэтому не знаю, что она умеет.
2. На диодах падает разница между 5 и 3.3 В.
2. На диодах падает разница между 5 и 3.3 В.

Тогда их надо взять штуки три-четыре последовательно. На одном — 0.7 Вольта (1N4148, КД522 и т.п.).
Так а не нужно больше двух. Там около 3.5 В получается, и это в пределах допустимого.
Да, про 3..4 погорячился. rounddown([5-3.3]/0.7) ~ 2.
«Там» — это на входе карты? Это значит, скорее всего, что уже приоткрывается защитный/паразитный диод в карте и сливает излишки входного тока в цепь 3.3 В.
Да, на входе карты. Конечно, защита гасит оставшиеся 0.2 В. Но карта тянет, насколько я помню, до 3.6 В, так что никаких проблем с ней не возникает. Можно, кстати, сделать её питание 3.6 В, заменив стабилизатор.
Можно, кстати, сделать её питание 3.6 В, заменив стабилизатор.

Нельзя. Тогда напряжение на входах ещё подрастёт.
Почему? Оно наоборот будет в полном балансе с напряжением после диодов.
Отнюдь. Вот картинка.
image
В любом случае — напряжение на линии ввода-вывода карты превысит её напряжение питания (насколько — зависит от кремниевой технологии, как правило — плюс 0.6-0.7 В).
И учитывайте, что стабилизатор питания карты может только выдавать ток на свой выход. Если через диод в карте будет натекать ток больше тока потребления карты, то стабилизатор её питания закроется и напряжение на её выводе питания станет расти.
Так ведь это другая ситуация. Тут же будет вот что: если карту запитать от 3.6 В, то на входах напряжение 3.6 В останется (оно задаётся двумя диодами и резистором подтяжки).) Следовательно, это никак не скажется на повышении уровня до 4.2 В (на 0.6 В) на входах карты.

Сейчас же сделано именно так, как у вас на рисунке. Карта питается 3.3 В. Следовательно, чтобы полностью открыть защитный диод нужно 4 В. А подаётся на вход 3.6, которое растекается дальше по внутренним входным элементам схемы карты. Кстати, там входе наверняка полевик стоит какой-нибудь и ему особо пофиг эти 0.3 лишних вольта.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории