Recent Changes - Search:

Проекты

Брошенные проекты

SourceForge

edit SideBar

UMSE - USB Mass Storage Emulator

- эмулятор USB флэшки. Проект-фантазия.

Ссылки

Причины создания

Приобрел я себе однажны простенький медиаплеер, который подключается к телевизору и позволяет смотреть на нем всякие видеофайлы. В качестве источника этих самых файлов в плеере был предусмотрен USB порт. Записывай себе фильмец на флешку и смотри его на телевизоре - красота! Однако, через какое-то время этап с копированием фильма на промежуточный носитель стала напрягать. "А не получится ли подключить медиаплеер непосредственно к домашнему серверу с фильмами?" - спросил я себя однажды. Так и родилась идея создать некий провод, который бы смог связать каталог на компьютере с USB портом плеера.

Цели

Цели были сформулированны следующим образом:

  • создать некую железку, которая связывала бы между собой два USB Host порта;
    • с одной стороны железка выглядит как USB Mass Storage и обрабатывает все необходимые запросы;
    • с другой стороны жезка выглядит как некое особое USB устройсво со специфическим протоколом управления;
    • cо стороны Mass Storage на другую явным или неявным образом передатся команды на чтение блоков данных, а в обратную сторону передаются эти самые блоки данных;
    • устройсто поддерживает только чтение;
  • написать демон, который будет эмулировать какую-нибудь файловую систему, добавлять в нее файлы из сужествующих каталогов и соответствующим образом обрабатывать запросы на чтение блоков данных от устройства.

Как это работает

В итоге получилось нечто, отображенное на картинке:

В качестве железки был взят фабричный девайс под названием SyncBox. Изначально, устройство работало на батарейках и предназначалось для копирования фалов с фотоаппаратов на USB флешку или жесткий диск в походных условиях. Однако, благодаря тому, что использующийся в нем микроконтроллер произведен фирмой Cypress и входит в семейство OTG-Host, появилась возможность поменять прошивку и изменить его функциональность. Подробней об устройстве можно прочитать в соответствующем разделе. Здесь же можно упомянуть о том, что реализация USB Mass Storage осуществлена в прошивке и, фактически, устройство занимается трансляцией сложной последовательности команд SCSI MMC-3 в более простой нативный протокол UMSE.

На стороне компьютера с железкой работает драйвер ядра. Он дает возможность приложениям не вникать в тонкости USB транспорта и аппаратного протокола, и использовать только стандартные системные функции: open(), close(), write() и ioctl().

Обработкой запросов на чтение отдельных блоков, и, собственно, эмуляцией файловой системы занимается специальный демон. Он сканирует специальный каталог, в котором лежат файлы, которые нам хотелось бы сделать видимыми на медиаплеере, создает в памяти образ файловой системы, и в зависимости от запроса выдает: таблицу FAT, содержимое каталога или часть файла.

На данный момент все части протестированы, и хотя, по производительности это все использовать пока нельзя, результаты дают повод для оптимизма. Во первых, показано, что данная схема работоспособна, а во вторых, отлажена и почти закончена программная часть: драйвер и демон. Вся загвоздка только в аппаратной части: чип OTG-Host поддерживает только USB2.0 Full Speed, что в теории дает нам скорость примерно в мегабит, а реально выше 700 Кб/с получить не удалось. Впрочем, и этой скорости вполне хватало для просмотра некоторых фильмов. Сейчас идет разработка более совершенного устройства с поддержной HighSpeed на базе двух микроконтроллеров Cypress серии EZ-USB FX2.

Настало время поговорить об каждой части системы более подробно.

Аппаратная часть

Аппаратная часть представлена двумя моделями железок:

Несмотря на то, что их внутреннее устройство и прошивки кардинально различаются, принцип функционирования и программный интерфейс у них одинаковый.

Конструктивно, устройство представляет собой коробочку с двумя проводами, заканчивающиеся разъемами USB-A. Один разъем подключается к серверу с файлами, а другой - к медиаплееру. Устройство оснащено двумя светодиодами: красный - который показывает, что оно включено и готово к работе, и зеленый - который загорается в момент передачи данных. Также, имеется кнопка, нажатие которой заставляет сервер перечитать содержимое каталога и сгенерировать новый образ файловой системы.

Edit - History - Print - Recent Changes - Search
Page last modified on November 13, 2012, at 11:26 PM