Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » USB to COM mouse converter v.3 |
<<Назад Вперед>> | Печать |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 марта 2019 23:21 Сообщение отредактировано: 21 марта 2019 18:54
Настало время продолжить тему прикручивания современной периферии к устаревшим машинам. Прошло уже почти 5 лет с тех пор, как мне впервые удалось адаптировать более современную PS/2 мышь к старому доброму COM-порту. Но и сам PS/2 практически ушёл в прошлое. Так что логично, что следующим шагом должно было быть освоение USB интерфейса со всем изобилием устройств ввода под него. И...вот с этим начались проблемы. Была попытка номер один на основе стека LUFA, но результат меня не полностью устроил. В конце концов, после длительных поисков, мой выбор реализации USB-хоста остановился на модуле на основе очень китайского чипа CH375. В частности, такие модули часто попадаются на Алиэкспресс. CH375 - это, фактически, контроллер (как я понимаю, что-то на x51-ядре) с USB-хостом на борту. Работает под управлением внешней системы в командном режиме, для чего имеет параллельный и последовательный (немного извратная версия UART) интерфейс. Изначальное предназначение данных модулей - прикрутить к какой-нибудь ардуине поддержку USB-дисков, для чего в прошивке чипа предусмотрена масса специальных команд. Однако на самом деле он способен на большее, поскольку набор его команд охватывает самые разные аспекты USB. Мне данный чип приглянулся тем, что берёт на себя большую часть низкоуровневых задач, но не ограничивает пользователя высокоуровневыми командами а-ля "прочитать сектор накопителя", давая возможность работать на уровне отдельных USB-пакетов. При этом в режиме параллельного интерфейса чип поддерживает весьма высокое быстродействие и стоит не слишком дорого. То что нужно для любительского конвертера интерфейсов! Есть, конечно, и минусы, главный из которых - языковой барьер. На английский переведено не более половины перечня поддерживаемых команд, библиотек и примеров работы с ним - вообще нисколько. Впрочем, Google Translate отчасти смягчает эту проблему. Для нового переходника была сделана плата на основе контроллера Atmega8515. Такой выбор был сделан потому что данный чип имеет параллельный интерфейс внешнего ОЗУ, через который очень удобно подвешивать всякие подобные устройства (вспомнить, например, тот же дисплей на HD44780), да и в целом с AVR мне привычно работать. Аппаратная часть Схема переходника выложена здесь: аппаратная версия v.3 Пара слов о схемотехнике: Несложно увидеть, что схема в части COM-порта повторяет PS/2 переходник. Остальное - по сути простенький дешифратор адреса (поскольку мы пихаем модуль в адресное пространство ОЗУ) и схема согласования уровней сигналов 5В - 3,3В, поскольку китайцы решили применить для питания чипа 3,3В. Соответственно, такими же становятся его логические уровни интерфейса. Для шины данных используется специальный двунаправленный буфер. Остальные сигналы имеют упрощённое согласование: поставлены буферы с открытым коллектором, а лог. единицы формируют встроенные подтяжки чипа. Я оставил питание контроллера 5В, но если кто-либо захочет повторить переходник, можете попробовать запитать контроллер 3,3В, схема упростится. Также имейте ввиду, что китайские модули попадаются, как минимум, в двух вариантах распиновки! Какая именно попадётся вам - внимательно смотрите на фото продавца. Как и в прошлом переходнике USB-порт используется лишь для подачи питания. "Настоящий" USB, само собой, находится на китайском модуле. Программная часть Во-первых, конечно, бутлоадер, адаптированный с предыдущего переходника, чтобы легче было перепрошивать контроллер. В частности, при помощи программы Avrdude. Выложен он здесь: bootloader. В папке EXE уже лежит готовый HEX-файл, который придётся прошить программатором. "Фьюзы" контроллера в моём варианте выставлены так. Их тоже нужно прошить. После чего, если зажать кнопку SB2 в момент подачи питания - запускается "AVR109-совместимый" бутлоадер на COM-порте на скорости 115200 бит/с. При этом оба светодиода загораются, сигнализируя о переходе в режим прошивки. Текущая версия прошивки: v.0.0.5 В текущей прошивке реализован примерно такой же функционал, который ранее был достигнут на PS/2 мышах. Однако следует иметь ввиду, что пока что переходник работает с мышью в режиме "boot-протокола", о котором я рассказывал в предыдущем посте. Это значит, что поддерживаются 3 кнопки, но колёсико мыши - нет. Могут также не работать различные "крутые" и "геймерские" мыши, если их производитель не реализовал поддержку boot-режима. При подключении девайса производится упрощённый анализ стандартных дескрипторов, что позволяет, по крайней мере, определить, действительно ли подключен девайс, содержащий логическое устройство - мышь с boot-протоколом, и какой номер лог. устройства использовать. Благодаря этому должны поддерживаться многие беспроводные мыши и комплекты клава+мышь. USB-хабы не поддерживаются (не уверен пока, возможно ли при помощи данного чипа отсылать т.н. "pre-пакеты", нужные для работы хабов). Впрочем, для переходника на один физический девайс их поддержка не очень-то и требуется. Реализовано три режима масштабирования скорости перемещения на выбор - замедление в 2 раза, без обработки, ускорение примерно в 2 раза. Переключение между режимами производится кнопкой SB1. При нажатии SB2 выбранный режим сохраняется в EEPROM контроллера и будет восстановлен при следующем включении питания. Об индикации светодиодами:
Кстати, hot-plug поддерживается! Можно менять девайсы без выключения питания. На всякий случай предыдущая версия прошивки, которая умеет меньше: v.0.0.2 alpha Об отличиях CH375 и CH376 В последнее время в китайских магазинах модули на основе чипа CH376 стали попадаться значительно чаще, чем на CH375. Это чип более свежей разработки. Основное отличие от предыдущего поколения заключается в поддержке USB-дисков, которая у CH376 осуществляется уже не на уровне посекторной записи/чтения, а на уровне файловых операций. Поддерживаются FAT16 и FAT32 с английским и, само собой, китайским набором символов. Отличия также заключаются в работе UART-интерфейса, и, кроме того, был добавлен SPI-интерфейс. Параллельный порт изменениям не подвергался. В части же работы с пакетами USB данный модуль практически идентичен CH375. Единственное найденное отличие - разработчики непонятно для чего заменили команду WR_USB_DATA7 (код 0x2B) на абсолютно идентичную команду команду WR_USB_DATA (код 0x2C). При этом команда 0x2B на CH376 фактически не работает! И там и там выполняемая функция - заполнение внутреннего буфера чипа данными, подлежащими отправке, в переходнике она сейчас используется для передачи команды активации boot-протокола. Поэтому если вы хотите поставить в переходник модуль на CH376, в текущей версии прошивки найдите файл CH375.H и раскомментируйте в нём строку #define CH376 Дополнительная информация USB in a NutShell - обычно то, что рекомендуют читать в первую очередь. Как мне показалось, лучше это читать параллельно с официальной документацией. USB Made Simple - очень краткий и хороший туториал от разработчиков аппаратного USB-сниффера. Возможно, лучше всего будет в первую очередь пробежаться именно по нему, потом перейти ко всему остальному, а потом...снова возвращаться к нему - он очень удобен в качестве шпаргалки по таким моментам, как "в какой последовательности идут запросы", "стандартные заголовки пакетов" и т.д., чего в полной документации искать весьма муторно. Полный архив официальной документации - ищите на странице ссылку на zip-архив (Сейчас это https://www.usb.org/sites/default/files/usb_20_20181221.zip), а в архве внимательно читать usb_20.pdf, это основа стандарта! Остальное не обязательно. Официальная спецификация HID - читать не менее внимательно, это основной стандарт на все эти клавы и мышки. Очень полезная статья от хакеров из Shinra Team, в которой коротко и доступно показано, как работать с HID-устройствами с помощью чипа CH376. Перевод дополнительного даташита CH376 от тех же людей. USB Device Tree Viewer - бесплатная программа для просмотра "стандартных" USB-дескрипторов установленных в компе устройств. К сожалению, другие, в частности, "hid report дескрипторы", она не читает. Примечательно также то, что на слишком замудрёных и криво составленных дескрипторах программа иногда сама начинает путаться. И помечает неадекватные поля ошибками. Thesycon USB Descriptor Dumper - ещё одна программа для просмотра "стандартных" USB-дескрипторов. По сравнению с предыдущей путается реже, но менее удобна в пользовании - для чтения дескрипторов приходится перетыкать девайс. |
-MiS-
Advanced Member
Откуда: Москва Всего сообщений: 682 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 9 мар. 2016 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 марта 2019 15:48 Сообщение отредактировано: 17 марта 2019 15:52
Хорошая работа! Я познакомился с этой микросхемой во время отладки-запуска платы Lo-tech_ISA_USB_Adapter Сделана плата по китайским наброскам для пром. применения. Они написали биос и опциональный драйвер для дос. В их схемах был еще вариант подключения через последовательный порт, что давало бы интересный вариант USB-SERIAL диска под дос. Пробовал соединять но не взлетело. Описание очень убогое и большей частью на китайском. Недавно прикупил четырехканальный осциллограф и лог. анализатор. Теперь можно вернутся к этому вопросу. В данный момент решил переступить через вдумчивое изучение AVR семейства и пробую сразу STM32. Там есть аппаратный USB-HOST у старших контроллеров, например STM32F107. Надо будет посмотреть что там да как. Демоборда уже лет 6 пылится... Разработка нужная. Т.к. все меньше USB мышей и клавиатур совместимы с PS/2 протоколом через простой переходник. UP. Вспомнил, что видел USB-PS/2 на STM32 https://zx-pk.ru/threads/24966...atury.html |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 марта 2019 18:19 Сообщение отредактировано: 17 марта 2019 18:20
-MiS- написал: Действительно, в данном проекте CH375 используется "по прямому назначению", т.е. пользует те самые команды работы с USB-диском. Я эти функции пробовал, в т.ч. через UART. И по большей части всё действительно работает, за исключением пары флеш-свистков, которые чип в упор не распознал как накопители. Возможно у вас не получилось потому, что, обратите внимание, чип работает в режиме 9-битового UART-а! Старшим битом там передаётся признак, команда это идёт или данные. В контроллерах, по большей части, активировать такой режим возможно, но в обычном пека - кажется нет. В CH376 китайцы всё-таки решили, что это дичь, и перешли на обычный 8-битовый UART...правда при этом каждую команду или байт данных приходится передавать уже за 2 посылки UART-а. Приём байта там правда осуществляется хотя бы одной посылкой. Я познакомился с этой микросхемой во время отладки-запуска платы Lo-tech_ISA_USB_Adapter -MiS- написал: Есть, и в "STM-кубике" он поддерживается. Правда тем, кто опыта работы непосредственно с протоколом USB ранее не имел, разобраться в его функциях будет ой как непросто! Возможно, я сужу по себе, но предложил бы начать всё-таки с данного китай-модуля, прикрутив его к какой-нибудь дешманской STM-ине. (на самом деле я с этого и начинал, причём прикручивал как раз через UART. А изначально трёхвольтовая логика STM данный процесс облегчает.). Там есть аппаратный USB-HOST у старших контроллеров, например STM32F107. О планах на данный переходник.
|
-MiS-
Advanced Member
Откуда: Москва Всего сообщений: 682 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 9 мар. 2016 |
-MiS- написал: Я не писал программную часть. Только воспроизвел схему подключения к последовательному порту и долго подбирал параметры запуска драйвера. Возможно у вас не получилось потомуhttp://www.wch.cn/downloads/CH375X86_ZIP.html EJSanYo написал: Надеюсь найти примеры работы с HID. Правда тем, кто опыта работы непосредственно с протоколом USB ранее не имел, разобраться в его функциях будет ой как непросто! |
Jccwu
Advanced Member
Злой и Нечуткий Откуда: Екатеринбург Всего сообщений: 3579 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 апр. 2013 |
Эх, отличная получилось бы статья для конкурса. Надо было подумать вам об этом. За тему + |
Mx_Serg
Junior Member
Всего сообщений: 581 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 4 июня 2018 |
У меня по роду службы, бывает, скапливается кучка всякого старого списанного промышленного железа. Вот и сейчас в столе валяется маленькая платка PC/104 контроллера с 5V питанием. У него как раз есть COM, USB и загрузочный флеш-диск с DOS. USB-стек под DOS загрузить можно, мышь она видит, дальше относительно простая программа может это все транслировать в RS-232. Получается своеобразный переходник, который можно за пару дней сваять. Но пока что лень - есть запас шариковых мышей для RS232 )) |
Tronix
Advanced Member
Откуда: Москва Всего сообщений: 1749 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 янв. 2008 |
Круто! Я пытался как-то давно Lo-tech_ISA_USB_Adapter заставить работать с USB мышкой, но у меня не взлетело. Не долго думая взял первый попавшийся под руку андруино-код, который называется MeUSBhost.c. Перепилил код под Borland C, собрал. Ну, дескриптор у мышки читает, какие-то там ендпоинты устанавливает, дальше чет не идет. То есть потенциально - работает, но нужно было вникать немного в сам USB, а интерес пропал. А, с другой стороны - ну допустим получил я данные от USB мышки или клавиатуры. А дальше что? Писать мышиный драйвер? Ну можно, сорцы вроде каких-то драйверов видел. Но в винде мышь не будет работать 99%. То есть это писать еще и драйвер для венды, причем как для 9x, так и для 2k. Короче, действительно, лучше через переходник USB мышь использовать, как и предлагает автор. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Jccwu написал: Мне кажется, на полноценную статью это всё же не тянет. Скорее назвал бы "веткой обсуждения проекта", которую я буду обновлять и дополнять по возможности. Вот когда руки дойдут до полноценного исследования реализаций PS/2 на материнках (а я надеюсь, однажды дойдут), вот там, чую, отличная получилось бы статья для конкурсазагадок наберётся столько, что на целую статью хватит! Mx_Serg написал: Да, мне уже предлагали взять какую-нибудь однокристалку под линуксом. Может, конечно, у меня устаревшее восприятие, но как-то рука не подымается брать настолько более мощную систему, чем основная, чтобы сделать тупенький конвертер... Вот и сейчас в столе валяется маленькая платка PC/104 Tronix написал: Со временем пришло понимание, что вот с этого как раз надо было начинать, не надеясь на возможности готовых USB-стеков. Причём изучать надо всё-таки официальную документацию, только там подробно расписано что да как (в шапке топика привёл). Весьма поморочено, да, но в целом читать можно. То есть потенциально - работает, но нужно было вникать немного в сам USB |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Неплохое обновление прошивки! v.0.0.3 beta. Сделал упрощённый анализ дескрипторов, так что теперь переходник способен задействовать комбинированные устройства, а значит, и большее количество различных моделей мышей. В частности - беспроводных, поскольку, как оказалось, для них производители очень часто не загоняются разработкой приёмника только лишь для мыши, а берут чипы, изначально предназначенные для комплектов клава+мышь ("клавиатура" такого приёмника видится в компе, но, само собой, никаких функций не выполняет). Код получился весьма неказистым, но тем не менее, вроде работает - протестировано на ~десятке различных устройств. По прежнему используется boot-протокол, "нормальный режим работы" aka report-протокол пока что не осилил. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 21 марта 2019 19:11 Сообщение отредактировано: 21 марта 2019 19:12
Небольшое обновление. v.0.0.5 по результатам продолжительного тестирования. Заметил, что одна китайская мышь после подачи питания не всегда определяется адекватно. После увеличения временных промежутков между этапами опроса всё стало работать нормально. Возможно, это несёт некий смысл - ведь и комп, судя по всему, запрашивает у USB девайсов дескрипторы не сразу всей кучей. Хотел также сделать проверку, активируется ли на самом деле boot-протокол (через команду GET PROTOCOL). Но увы, Ritmix RMW-110, "отличившаяся" в прошлый раз, бодро рапортует, что активировала boot-протокол, хотя по факту - ни разу нет. Что-то мне это напоминает....ну да, конечно, затычки на месте полноценных функций, появившиеся ещё во времена PS/2! "Зачем делать то, что никому не нужно? Лучше сэкономим..." и всё в этом духе. |
<<Назад Вперед>> | Печать |
Полигон-2 » Технический флейм » USB to COM mouse converter v.3 |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |