реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> USB клавиатура, s3c2410 (ARM9) и USB клавиатура
TrueCyrix
сообщение May 22 2014, 03:13
Сообщение #1


Участник
*

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



Здравствуйте! Помогите пожалуйста разобраться.
Есть устройство на базе s3c2410 из семейства ARM-ов, есть у этого устройства USB порт, есть USB клавиатура, обычная компьютерная 102 клавиши или сколько там у неё... не суть, каким образом можно получить данные из такой клавиатуры? Пишу и отлаживаю в CodeWarrior 1.2
Может быть есть какие нибудь примеры? Выводить буду в uart по событию, сам uart проинициализирован и работает. Очень надеюсь на помощь, потому как в интернете нужной информации найти не смог.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 04:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну надо поднять USB - host, тот какой в этом контроллере возможен. Добавить программный USB стэк который будет обрабатывать данные от клавиатуры, клавиатура это HID, как то так...
Go to the top of the page
 
+Quote Post
TrueCyrix
сообщение May 22 2014, 04:58
Сообщение #3


Участник
*

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



Значит надо понять на каких портах сидит USB и работать с этими портами... вот бы простой примерчик, я так то представляю (приблизительно), как это должно работать, только пока не на что опереться. Само устройство USB (клавиатура) имеет некий контроллер, который передаёт данные, которые нужно обработать по событию (наверное прерывание) считать эти данные, передаваемые контроллером из клавиатуры... ой какой тёмный лес. Без примеров очень не просто.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 05:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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, без этого вы не поймете ваще что делаете...
Go to the top of the page
 
+Quote Post
TrueCyrix
сообщение May 22 2014, 06:05
Сообщение #5


Участник
*

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



Ого!
Спасибо за столь ёмкое объяснение! Пойду изучать стандарт USB и постараюсь выяснить есть ли в моём устройстве этот самый USB-host.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение May 22 2014, 06:46
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 08:20
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а блин, чертовы операционкиsm.gif... Все время про них забываю))) Да, если есть операционка то все на порядок проще в отношении обслуживания клавиатуры... надо найти просто реализацию HID драйвера, в винду встроенная dll-ка, в юниксах наверняка тоже что-то подобное должно быть, а через библиотеку работу с клавиатурой дело пары дней наладить...
Go to the top of the page
 
+Quote Post
TrueCyrix
сообщение May 22 2014, 12:51
Сообщение #8


Участник
*

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



Дело в том, что операционки нет, там просто голое ядро. Я в нулевой блок гружу программу инициализации экрана, uart-а, nand-flash, затем из flash копирую в ОЗУ основную программу и передаю ей управление. В основной программе я вывожу картинку в экран из той-же flash по средствам буфера и затем хочу выводить символы с мигающим курсором в зависимости от нажатия кнопки на клавиатуре. Короче говоря ничего нет. Когда на этой плате стоял WinCE 4.2 net, то выносная (внешняя) usb-клавиатура прекрасно работала и usb-флешки тоже читались.
Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся.
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 22 2014, 13:10
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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 - это отдельная история, под него еще надо уметь (и учиться) программировать ...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 13:46
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Голое ядро - наш человек)!

не ps/2 утопия, если в проце есть USB Host, то лучше USB подымать, PS/2 - точно ногодрыг неприятный, а с USB Hostом хорошая железная поддержка будет в бонусе. Надо описалово читать, если ли хост, если есть то какой?

Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 22 2014, 14:05
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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) - это да, это я смог. Интересная, захватывающая, творческая работа. Хоть и очень сложная. А писать под Линукс - не получается, да и не интересно мне это, я железячник до мозга костей. Купил книжку по разработке драйверов, сижу и читаю. Что-то простое вполне освоил, а вот с более сложными вещами так и не разобрался. Смотрю в книжку, как баран, и ничего (почти) не понимаю. Не мое это ...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 14:29
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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, так что если поправить имена, и немного подработать напильником, должен и к вашему процу прикрутиться, ну или ищите подходящий вам стэк
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 22 2014, 14:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Golikov A. @ May 22 2014, 21:39) *
в нем есть глава
OHCI Registers for USB Host Controller
Complies with OHCI Rev. 1.0

"Сильно" по сравнению с программным манипулированием ножками GPIO с целью реализации хоста ? Согласен. Но не все так радужно. В моем случае тоже был OHCI. И аппаратная поддержка, конечно же, была. Я не гений, а обычный инженер, посему лично из своего опыта еще раз делаю вывод, что задача сложная, очень. Рассчитывать на быстрое завершение пректа с нуля нереально. Реально разве что искать в Сети и использовать у себя чужую реализацию ...
Go to the top of the page
 
+Quote Post
undefined
сообщение May 22 2014, 16:56
Сообщение #14





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



Цитата(kovigor @ May 22 2014, 23:03) *
Но не все так радужно. В моем случае тоже был OHCI. И аппаратная поддержка, конечно же, была. Я не гений, а обычный инженер, посему лично из своего опыта еще раз делаю вывод, что задача сложная, очень. Рассчитывать на быстрое завершение пректа с нуля нереально. Реально разве что искать в Сети и использовать у себя чужую реализацию ...


Не забываем что окромя USB Host придется поднять USB HID class, что тоже не сахар, он весьма гибок и довольно геморроен для хоста. Конечно же, поднять PS/2 намного, намного проще. Вопрос лишь в перспективах доступности таких клавиатур.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 17:00
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Думаю да, надо подтянуть чужую реализацию. Я делал в свое время USB ручками, в проце была минимальная поддержка USB, даже разбор токенов пришлось делать. Наверное потому мне задача не кажется неподъемной, но когда я ковырял тот же чужой BlueUSB, там все настолько понятно и прозрачно. Практически все на себя берет железо, надо только обрабатывать флаги. Естественно разбор сообщения, деления на дескрипторы и прочее никто не отменял, но это все равно придется делать...

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

Цитата
Не забываем что окромя USB Host придется поднять USB HID class, что тоже не сахар, он весьма гибок и довольно геморроен для хоста. Конечно же, поднять PS/2 намного, намного проще. Вопрос лишь в перспективах доступности таких клавиатур.


ну всегда можно упростить, и поднять под одну конкретную клавиатуру... Но я не настаиваю, пусть будет ps/2 sm.gif, кстати клавиатуры по этому интерфейсу универсальны?
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016