User Tag List

Показано с 1 по 10 из 37

Тема: Arduino Floppy Dump utility

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Arduino Floppy Dump utility

    В соседнем треде была презентация моей мини-разработки.
    Тут - отдельная тема, с продолжением самостоятельной жизни.

    Arduino Floppy DUMP utility - консольное приложение, написанное на python, предназначено для дампования флопиков (главным образом 5.25", но и 3.5" даже PC-шные HD диски по идее должен без проблем захватываться), и для сохранения образов в разных форматах. Работает в связке с микроконтроллером ATMega328(16MHz).

    Ссылка на предка - http://amiga.robsmithdev.co.uk/instructions

    Вводные данные:
    При MFM кодировании один байт информации конвертируется в 4-8 импульсов. Импульс генерируется при развороте направления намагниченности.
    В MFM всего возможно 3 разных длительности (4, 6, 8мкс для DD и 2, 3, 4мкс для HD дисков).
    Скорость вращения диска - 300об/мин, или 5об/с (бывает 360об/мин, но это не наш случай). Таким образом длительность трека - 200мс, или 200000мкс. То есть для DD диска один трек вмещает 25000-50000 импульсов, а HD диска - 50000-100000 импульсов.
    При загрузке данных из Arduino одна длительность кодируется 2 битами (используются комбинации b01 b10 и b11, а b00 - служебный, завершение потока - 0x00). Таким образом мы имеем в одном переданном байте 4 MFM длительности (импульса). То есть каждый байт исходной информации - это 1-2 байта, переданных из устройства.
    То есть, длина дорожки при загрузке данных из устройства - это от 6250 до 12500 байт для DD диска. Для HD диска, соответственно, от 12500 до 25000 байт.
    DD диски (основная масса 5.25" включая ZX, а также старые 3.5") имеют длину дорожки в исходных данных 6250 байт, HD диски - 12500 байт.
    За одну секунду трек загружается 5 раз (поскольку совершается 5 оборотов). Таким образом, плотность информации, загружаемой с устройства в MFM формате - это до 62500 байт в секунду (cps) для DD диска, и до 125000 cps для HD диска.

    То есть минимально возможная скорость, при которой HD дорожка будет успевать передаваться через USB-Serial - это 125000*(8+2) = 1250000Кбит/с. Для DD дисков, соответственно, 625000 Кбит/с.

    Таким образом для работы с HD дисками скорость работы UART должна быть 2Мбита/с, а для DD дисков достаточно 1Мбита/с. Это необходимо учитывать.

    Что нужно:
    1. Arduino (варианты)
    - а) Устройство на ATMega328 (16mhz), типа того как на рисунке (Arduino Pro Mini) + USB-Uart контроллер - FTDI-совместимый (т.к. без труда 2Мбита прокачивает). CP2102 не подходит (макс 1Мбит).
    - б) Вероятно будут работать и Arduino Uno (на AtMega328-16), и другие платы с интегрированными USB-Uart адаптерами на FTDI/FT232RL, обеспечивающие скорость 2Мбит/с. Это надо проверять.
    - в) Дешевый Arduino Nano, со встроенным CH340 (без кристаллов) - фирмварь прошивается в режиме Old bootloader. На скорости 2МБита работает с ошибками (~0.02% ошибок), на 1Мбита - ошибок нет, т.е. пойдёт только для DD дисков.
    2. Обвязка ардуины
    - бредборд (монтажная доска).
    - соединительные провода (возможно и без бредборды, если цеплять к самим ножкам ардуины).
    - 1кОм сопротивление (для подтягивания линии данных до 5в).
    - блок питания и шлейф для FDD.
    3. На хостовом ПК
    - Windows>=7, вроде и Linux и MacOS (но это не проверялось).
    - python>=v3.6. Библиотека pySerial
    - Arduino SDK.

    Запись дисков не предусмотрена (и, вероятно, не будет), поэтому ардуиновые ножки A0/A1/A2, и 3 не задействованы. Кроме того, поменяны местами ножки 4 и 8 (это все в сравнении с проектом Роба Смита).

    Если используется Arduino с UART, не дающим безглючные 2Мбита, то HD диски читать не получится. Однако, с DD дисками возможно будет работать. Для этого необходимо сообразно поправить скетч (.ino файл строка вначале "#define BAUDRATE 2000000"), и сам .py файл (строка "ser.baudrate=2000000"), на, соответственно 1000000.

    Схема:


    Мой сетап:


    Питание для дисковода отдельное. Шлейф - родной спектрумовский. Ножки 10-12-14-16 разъема соединены между собой на монтажной платке (чтобы было пофигу - перевернут кабель или нет). Шлейф насажен на обычные недорогие контактные штырьки (причём впаяно не всей гребенкой, а по-отдельности штырьки, а для земли всего 1 линия) - покупкой 34-пинового разъема не заморачивался. Шлейф воткнут с обратной стороны (на фото не видно).

    --------
    Зачем вообще? Материнки перестали делать с FDD контроллерами, raw driver никак не подцепишь. Да даже если подцепишь — этот raw driver весьма ограничен в своих возможностях «подкрутить» параметры чтения, что мешает нормально читать некоторые не очень качественные диски.
    Ардуино — дёшево, и сердито (это попытка выжать максимум из 8мибитного 16мгц микроконтроллера с 2кб ОЗУ), прекрасно работает с 5в устройствами, и есть почти в каждой российской семье. Люди относятся к Ардуине, как платформы для захвата, весьма скептически. Вот и посмотрим.


    Альтернативы:
    - greaseweazle - неплохой проект, работает на недорогой STM32 "blue pill", захватывает поток по таймингам не хуже kryoflux, но плохо дружит с 5.25" дисководами (вроде этот аспект недавно поправили - дребезг оптического датчика индекса теперь _вроде_ фильтруется). Но хостовая часть пока мало что позволяет. Плюс он появился позднее, чем я начал свой проект, так что пусть.
    - Arduino floppy disk reader/writer - проект-предок сабжа. Умеет даже писать, но не всеядный - ориентирован на Амиги, и вообще, достаточно плохо оптимизирован с точки зрения firmware, не умеет HD диски, тайминги захардкодены. То есть очень узкозаточенный.
    - FluxEngine - неплохой вариант. Построен на достаточно экзотичной плате CY8CKIT-059, которая дороже Arduino раз в 10 (но с учетом необходимого FTDI - всего раз в 5), умеет писать некоторые форматы, но спектрумских вообще не знает.
    - всякие дорогие устройства (сами знаете).

    --------
    Текущая версия скрипт + фирмварь:
    0.01b http://volutar.eu5.org/afd001b.7z


    --------
    История изменений:
    2020-08-07 v0.01b - подстройка под тайминги для каждой дороги, дорожки за 80й обрезаются (если пустые), вывод красивой статистики
    2020-08-05 v0.01a - первый релиз, сохраняет UDI, настроена на стандартные тайминги DD дисков 32/48/64 (4/6/8мкс)
    Последний раз редактировалось Dexus; 20.09.2020 в 10:28.

    Эти 4 пользователя(ей) поблагодарили Dexus за это полезное сообщение:

    Black Cat / Era CG(05.08.2020), Eltaron(07.08.2020), newart(11.08.2020), ^m00h^(05.08.2020)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Arduino Floppy Disk Reader
    от SoftLight в разделе Внешние накопители
    Ответов: 44
    Последнее: 05.08.2020, 01:06
  2. HCDisk 2.0 - PC disk utility.
    от Djoni в разделе Утилиты
    Ответов: 3
    Последнее: 17.09.2016, 00:37
  3. TZX/TAP utility for iPhone: Speccy Tape
    от Poopi в разделе Утилиты
    Ответов: 13
    Последнее: 02.07.2015, 08:13
  4. Data Glue Utility
    от dM_GBG в разделе Софт
    Ответов: 8
    Последнее: 22.11.2011, 12:40

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •