Проекты GitHub SourceForge |
Проекты /
UMSEUMSE - USB Mass Storage Emulator- эмулятор USB флэшки. Проект-фантазия. СсылкиПричины созданияПриобрел я себе однажны простенький медиаплеер, который подключается к телевизору и позволяет смотреть на нем всякие видеофайлы. В качестве источника этих самых файлов в плеере был предусмотрен USB порт. Записывай себе фильмец на флешку и смотри его на телевизоре - красота! Однако, через какое-то время этап с копированием фильма на промежуточный носитель стала напрягать. "А не получится ли подключить медиаплеер непосредственно к домашнему серверу с фильмами?" - спросил я себя однажды. Так и родилась идея создать некий провод, который бы смог связать каталог на компьютере с USB портом плеера. ЦелиЦели были сформулированны следующим образом:
Как это работаетВ итоге получилось нечто, отображенное на картинке: В качестве железки был взят фабричный девайс под названием 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. Один разъем подключается к серверу с файлами, а другой - к медиаплееру. Устройство оснащено двумя светодиодами: красный - который показывает, что оно включено и готово к работе, и зеленый - который загорается в момент передачи данных. Также, имеется кнопка, нажатие которой заставляет сервер перечитать содержимое каталога и сгенерировать новый образ файловой системы. |