|
|
  |
USB клавиатура, s3c2410 (ARM9) и USB клавиатура |
|
|
|
May 22 2014, 04:58
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 6-08-13
Пользователь №: 77 820

|
Значит надо понять на каких портах сидит USB и работать с этими портами... вот бы простой примерчик, я так то представляю (приблизительно), как это должно работать, только пока не на что опереться. Само устройство USB (клавиатура) имеет некий контроллер, который передаёт данные, которые нужно обработать по событию (наверное прерывание) считать эти данные, передаваемые контроллером из клавиатуры... ой какой тёмный лес. Без примеров очень не просто.
|
|
|
|
|
May 22 2014, 05:18
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Ох! Вам надо взят глубже, сильно, надо стандарт USB почитать...
Если вы хотите реализовать USB опираясь на сигналы подключенные к ножкам - это с первого раза займет около года. Да и так уже не делает никто лет эдак 5-10. В большинстве контроллеров есть железный модуль USB который берет на себя большую часть обмена физического уровня.
Если ваш модуль может быть только USB девайсом, и нет никакого стандартного USB Host внутри, то вы опять попали на год разработки,
Если же ваш проц умеет быть USB хостом, то тут уже можно искать чужие реализации. Если так повезет то скорее всего практически все будет сделано на железном уровне. Весь обмен возьмет на себя проц, будет вам выставлять прерывания по событиям.
События опять же не данные пришли, а другие, в USB определяют так называемые конечные точки по которым идет обмен - фактически это каналы. Весь обмен всегда инициализирует HOST, есть 4 вида обмена контрольный, изохронный, по прерыванием, потоковый. Клавиатура как HID будет иметь 2 или 3 канала, контрольный и 1-2 интерапт.
Чтобы это все узнать вам надо будет запросить у клавиатуры описания, это делается по стандарту USB, там вы узнаете VID, PID, формат репортов клавиатуры, какие данные на входе на выходе, какие номера точек какие каналы. Дальше поддержать обмен получать данные и все, наверняка там будет валиться код нажатия кнопки. Если клавиатура поддерживает несколько сущностей, надо будет еще задать правильную сущность...
Надо понимать стандарт USB, без этого вы не поймете ваще что делаете...
|
|
|
|
|
May 22 2014, 06:05
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 6-08-13
Пользователь №: 77 820

|
Ого! Спасибо за столь ёмкое объяснение! Пойду изучать стандарт USB и постараюсь выяснить есть ли в моём устройстве этот самый USB-host.
|
|
|
|
|
May 22 2014, 06:46
|
Знающий
   
Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840

|
Цитата(TrueCyrix @ May 22 2014, 13:15)  Ого! Спасибо за столь ёмкое объяснение! Пойду изучать стандарт 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
|
|
|
|
|
May 22 2014, 12:51
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 6-08-13
Пользователь №: 77 820

|
Дело в том, что операционки нет, там просто голое ядро. Я в нулевой блок гружу программу инициализации экрана, uart-а, nand-flash, затем из flash копирую в ОЗУ основную программу и передаю ей управление. В основной программе я вывожу картинку в экран из той-же flash по средствам буфера и затем хочу выводить символы с мигающим курсором в зависимости от нажатия кнопки на клавиатуре. Короче говоря ничего нет. Когда на этой плате стоял WinCE 4.2 net, то выносная (внешняя) usb-клавиатура прекрасно работала и usb-флешки тоже читались. Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся.
|
|
|
|
|
May 22 2014, 13:10
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(TrueCyrix @ May 22 2014, 20:01)  Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся. Еще вариант - использовать PS/2 клавиатуру. Подключить ее к МК в 1000 раз проще, чем USB - клавиатуру. Современные клавиатуры, как правило, поддерживают как PS/2, так и USB (т.е., USB - клавиатуру можно через пассивный переходник включить в разъем PS/2, и она сама догадается, к какому интерфейсу (USB или PS/2) ее подключили). Linux - это отдельная история, под него еще надо уметь (и учиться) программировать ...
|
|
|
|
|
May 22 2014, 13:46
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Голое ядро - наш человек)!
не ps/2 утопия, если в проце есть USB Host, то лучше USB подымать, PS/2 - точно ногодрыг неприятный, а с USB Hostом хорошая железная поддержка будет в бонусе. Надо описалово читать, если ли хост, если есть то какой?
Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут
|
|
|
|
|
May 22 2014, 14:05
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Golikov A. @ May 22 2014, 20:56)  Голое ядро - наш человек)!
не ps/2 утопия, если в проце есть USB Host, то лучше USB подымать, PS/2 - точно ногодрыг неприятный, а с USB Hostом хорошая железная поддержка будет в бонусе. Надо описалово читать, если ли хост, если есть то какой?
Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут Насчет утопии - не согласен. Немного несовременно, но вполне приемлемо и очень просто. USB HOST - все гут, кроме одного. Этот хост надо писать самому. Для ARM9 я лично его писал, сам и с нуля, и знаю, что это задача, мягко говоря, непростая. Очень непростая. Если авторутемы нужно быстро закончить проект, то самописный хост отпадает - на его создание уйдут месяцы. Придется искать в Сети готовую чужую реализацию. А это почти всегда черны ящик со своими особенностями, глюками и проч. радостями, т.к. законченный коммерчески интересный проект в свободный доступ едва ли кто выложит. Линукс - да, все хорошо, если умеете писать под него. А если не умеете, то придется учиться. Я так толком и не могу это осилить. Ну не мое это, хоть тресни. Поднять с нуля дивайсы (на ARM7 и ARM9) и хост (на ARM9) - это да, это я смог. Интересная, захватывающая, творческая работа. Хоть и очень сложная. А писать под Линукс - не получается, да и не интересно мне это, я железячник до мозга костей. Купил книжку по разработке драйверов, сижу и читаю. Что-то простое вполне освоил, а вот с более сложными вещами так и не разобрался. Смотрю в книжку, как баран, и ничего (почти) не понимаю. Не мое это ...
|
|
|
|
|
May 22 2014, 14:29
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Полез в описание, нашел вот такое 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, так что если поправить имена, и немного подработать напильником, должен и к вашему процу прикрутиться, ну или ищите подходящий вам стэк
|
|
|
|
|
May 22 2014, 16:56
|
Группа: Участник
Сообщений: 13
Регистрация: 6-07-05
Пользователь №: 6 577

|
Цитата(kovigor @ May 22 2014, 23:03)  Но не все так радужно. В моем случае тоже был OHCI. И аппаратная поддержка, конечно же, была. Я не гений, а обычный инженер, посему лично из своего опыта еще раз делаю вывод, что задача сложная, очень. Рассчитывать на быстрое завершение пректа с нуля нереально. Реально разве что искать в Сети и использовать у себя чужую реализацию ... Не забываем что окромя USB Host придется поднять USB HID class, что тоже не сахар, он весьма гибок и довольно геморроен для хоста. Конечно же, поднять PS/2 намного, намного проще. Вопрос лишь в перспективах доступности таких клавиатур.
|
|
|
|
|
May 22 2014, 17:00
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Думаю да, надо подтянуть чужую реализацию. Я делал в свое время USB ручками, в проце была минимальная поддержка USB, даже разбор токенов пришлось делать. Наверное потому мне задача не кажется неподъемной, но когда я ковырял тот же чужой BlueUSB, там все настолько понятно и прозрачно. Практически все на себя берет железо, надо только обрабатывать флаги. Естественно разбор сообщения, деления на дескрипторы и прочее никто не отменял, но это все равно придется делать... Это я к тому, что подтягивания чужого софта и тщательный его разбор и анализ для этой конкретной задачи не так уж и трудоемок... Цитата Не забываем что окромя USB Host придется поднять USB HID class, что тоже не сахар, он весьма гибок и довольно геморроен для хоста. Конечно же, поднять PS/2 намного, намного проще. Вопрос лишь в перспективах доступности таких клавиатур. ну всегда можно упростить, и поднять под одну конкретную клавиатуру... Но я не настаиваю, пусть будет ps/2  , кстати клавиатуры по этому интерфейсу универсальны?
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|