TrueCyrix 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Здравствуйте! Помогите пожалуйста разобраться. Есть устройство на базе s3c2410 из семейства ARM-ов, есть у этого устройства USB порт, есть USB клавиатура, обычная компьютерная 102 клавиши или сколько там у неё... не суть, каким образом можно получить данные из такой клавиатуры? Пишу и отлаживаю в CodeWarrior 1.2 Может быть есть какие нибудь примеры? Выводить буду в uart по событию, сам uart проинициализирован и работает. Очень надеюсь на помощь, потому как в интернете нужной информации найти не смог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба ну надо поднять USB - host, тот какой в этом контроллере возможен. Добавить программный USB стэк который будет обрабатывать данные от клавиатуры, клавиатура это HID, как то так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TrueCyrix 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Значит надо понять на каких портах сидит USB и работать с этими портами... вот бы простой примерчик, я так то представляю (приблизительно), как это должно работать, только пока не на что опереться. Само устройство USB (клавиатура) имеет некий контроллер, который передаёт данные, которые нужно обработать по событию (наверное прерывание) считать эти данные, передаваемые контроллером из клавиатуры... ой какой тёмный лес. Без примеров очень не просто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Ох! Вам надо взят глубже, сильно, надо стандарт USB почитать... Если вы хотите реализовать USB опираясь на сигналы подключенные к ножкам - это с первого раза займет около года. Да и так уже не делает никто лет эдак 5-10. В большинстве контроллеров есть железный модуль USB который берет на себя большую часть обмена физического уровня. Если ваш модуль может быть только USB девайсом, и нет никакого стандартного USB Host внутри, то вы опять попали на год разработки, Если же ваш проц умеет быть USB хостом, то тут уже можно искать чужие реализации. Если так повезет то скорее всего практически все будет сделано на железном уровне. Весь обмен возьмет на себя проц, будет вам выставлять прерывания по событиям. События опять же не данные пришли, а другие, в USB определяют так называемые конечные точки по которым идет обмен - фактически это каналы. Весь обмен всегда инициализирует HOST, есть 4 вида обмена контрольный, изохронный, по прерыванием, потоковый. Клавиатура как HID будет иметь 2 или 3 канала, контрольный и 1-2 интерапт. Чтобы это все узнать вам надо будет запросить у клавиатуры описания, это делается по стандарту USB, там вы узнаете VID, PID, формат репортов клавиатуры, какие данные на входе на выходе, какие номера точек какие каналы. Дальше поддержать обмен получать данные и все, наверняка там будет валиться код нажатия кнопки. Если клавиатура поддерживает несколько сущностей, надо будет еще задать правильную сущность... Надо понимать стандарт USB, без этого вы не поймете ваще что делаете... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TrueCyrix 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Ого! Спасибо за столь ёмкое объяснение! Пойду изучать стандарт USB и постараюсь выяснить есть ли в моём устройстве этот самый USB-host. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Ого! Спасибо за столь ёмкое объяснение! Пойду изучать стандарт USB и постараюсь выяснить есть ли в моём устройстве этот самый USB-host. А может не углубляться в дебри? У Вас linux на этом камне запускается или голое приложение? Если linux, то в нем поддержка usb-host уже есть. Вот, например, выдержка из u-boot header /* S3C2410 device base addresses */ #define S3C24X0_MEMCTL_BASE 0x48000000 #define S3C24X0_USB_HOST_BASE 0x49000000 #define S3C24X0_INTERRUPT_BASE 0x4A000000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба а блин, чертовы операционки:)... Все время про них забываю))) Да, если есть операционка то все на порядок проще в отношении обслуживания клавиатуры... надо найти просто реализацию HID драйвера, в винду встроенная dll-ка, в юниксах наверняка тоже что-то подобное должно быть, а через библиотеку работу с клавиатурой дело пары дней наладить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TrueCyrix 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Дело в том, что операционки нет, там просто голое ядро. Я в нулевой блок гружу программу инициализации экрана, uart-а, nand-flash, затем из flash копирую в ОЗУ основную программу и передаю ей управление. В основной программе я вывожу картинку в экран из той-же flash по средствам буфера и затем хочу выводить символы с мигающим курсором в зависимости от нажатия кнопки на клавиатуре. Короче говоря ничего нет. Когда на этой плате стоял WinCE 4.2 net, то выносная (внешняя) usb-клавиатура прекрасно работала и usb-флешки тоже читались. Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся. Еще вариант - использовать PS/2 клавиатуру. Подключить ее к МК в 1000 раз проще, чем USB - клавиатуру. Современные клавиатуры, как правило, поддерживают как PS/2, так и USB (т.е., USB - клавиатуру можно через пассивный переходник включить в разъем PS/2, и она сама догадается, к какому интерфейсу (USB или PS/2) ее подключили). Linux - это отдельная история, под него еще надо уметь (и учиться) программировать ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Голое ядро - наш человек)! не ps/2 утопия, если в проце есть USB Host, то лучше USB подымать, PS/2 - точно ногодрыг неприятный, а с USB Hostом хорошая железная поддержка будет в бонусе. Надо описалово читать, если ли хост, если есть то какой? Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Голое ядро - наш человек)! не ps/2 утопия, если в проце есть USB Host, то лучше USB подымать, PS/2 - точно ногодрыг неприятный, а с USB Hostом хорошая железная поддержка будет в бонусе. Надо описалово читать, если ли хост, если есть то какой? Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут Насчет утопии - не согласен. Немного несовременно, но вполне приемлемо и очень просто. USB HOST - все гут, кроме одного. Этот хост надо писать самому. Для ARM9 я лично его писал, сам и с нуля, и знаю, что это задача, мягко говоря, непростая. Очень непростая. Если авторутемы нужно быстро закончить проект, то самописный хост отпадает - на его создание уйдут месяцы. Придется искать в Сети готовую чужую реализацию. А это почти всегда черны ящик со своими особенностями, глюками и проч. радостями, т.к. законченный коммерчески интересный проект в свободный доступ едва ли кто выложит. Линукс - да, все хорошо, если умеете писать под него. А если не умеете, то придется учиться. Я так толком и не могу это осилить. Ну не мое это, хоть тресни. Поднять с нуля дивайсы (на ARM7 и ARM9) и хост (на ARM9) - это да, это я смог. Интересная, захватывающая, творческая работа. Хоть и очень сложная. А писать под Линукс - не получается, да и не интересно мне это, я железячник до мозга костей. Купил книжку по разработке драйверов, сижу и читаю. Что-то простое вполне освоил, а вот с более сложными вещами так и не разобрался. Смотрю в книжку, как баран, и ничего (почти) не понимаю. Не мое это ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Полез в описание, нашел вот такое http://elinux.org/images/7/77/Um_s3c2410.pdf в нем есть глава OHCI Registers for USB Host Controller Complies with OHCI Rev. 1.0 Если кратко, то топикстартеру сильно повезло, у этого проца железная поддержка хоста. надо изучить вот такой документ http://grouper.ieee.org/groups/1394/b/misc/ohci_11.pdf и найти в сети какой нибудь открытый USB стэк, типа http://mbed.org/users/peterbarrett1967/not...troller-for-mb/ если на пальцах то этот хост надо правильно проинициализировать, а дальше он будет вам в регистре выставлять битики что за события произошли на USB, и вы будите на них реагировать. В этом стэке, что по ссылке, сделано это через callback функции, на сайте все для LPC1768, но в нем тоже OHCI, так что если поправить имена, и немного подработать напильником, должен и к вашему процу прикрутиться, ну или ищите подходящий вам стэк Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба в нем есть глава OHCI Registers for USB Host Controller Complies with OHCI Rev. 1.0 "Сильно" по сравнению с программным манипулированием ножками GPIO с целью реализации хоста ? Согласен. Но не все так радужно. В моем случае тоже был OHCI. И аппаратная поддержка, конечно же, была. Я не гений, а обычный инженер, посему лично из своего опыта еще раз делаю вывод, что задача сложная, очень. Рассчитывать на быстрое завершение пректа с нуля нереально. Реально разве что искать в Сети и использовать у себя чужую реализацию ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
undefined 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Но не все так радужно. В моем случае тоже был OHCI. И аппаратная поддержка, конечно же, была. Я не гений, а обычный инженер, посему лично из своего опыта еще раз делаю вывод, что задача сложная, очень. Рассчитывать на быстрое завершение пректа с нуля нереально. Реально разве что искать в Сети и использовать у себя чужую реализацию ... Не забываем что окромя USB Host придется поднять USB HID class, что тоже не сахар, он весьма гибок и довольно геморроен для хоста. Конечно же, поднять PS/2 намного, намного проще. Вопрос лишь в перспективах доступности таких клавиатур. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Думаю да, надо подтянуть чужую реализацию. Я делал в свое время USB ручками, в проце была минимальная поддержка USB, даже разбор токенов пришлось делать. Наверное потому мне задача не кажется неподъемной, но когда я ковырял тот же чужой BlueUSB, там все настолько понятно и прозрачно. Практически все на себя берет железо, надо только обрабатывать флаги. Естественно разбор сообщения, деления на дескрипторы и прочее никто не отменял, но это все равно придется делать... Это я к тому, что подтягивания чужого софта и тщательный его разбор и анализ для этой конкретной задачи не так уж и трудоемок... Не забываем что окромя USB Host придется поднять USB HID class, что тоже не сахар, он весьма гибок и довольно геморроен для хоста. Конечно же, поднять PS/2 намного, намного проще. Вопрос лишь в перспективах доступности таких клавиатур. ну всегда можно упростить, и поднять под одну конкретную клавиатуру... Но я не настаиваю, пусть будет ps/2 :), кстати клавиатуры по этому интерфейсу универсальны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться