Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB клавиатура
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
TrueCyrix
Здравствуйте! Помогите пожалуйста разобраться.
Есть устройство на базе s3c2410 из семейства ARM-ов, есть у этого устройства USB порт, есть USB клавиатура, обычная компьютерная 102 клавиши или сколько там у неё... не суть, каким образом можно получить данные из такой клавиатуры? Пишу и отлаживаю в CodeWarrior 1.2
Может быть есть какие нибудь примеры? Выводить буду в uart по событию, сам uart проинициализирован и работает. Очень надеюсь на помощь, потому как в интернете нужной информации найти не смог.
Golikov A.
ну надо поднять USB - host, тот какой в этом контроллере возможен. Добавить программный USB стэк который будет обрабатывать данные от клавиатуры, клавиатура это HID, как то так...
TrueCyrix
Значит надо понять на каких портах сидит USB и работать с этими портами... вот бы простой примерчик, я так то представляю (приблизительно), как это должно работать, только пока не на что опереться. Само устройство USB (клавиатура) имеет некий контроллер, который передаёт данные, которые нужно обработать по событию (наверное прерывание) считать эти данные, передаваемые контроллером из клавиатуры... ой какой тёмный лес. Без примеров очень не просто.
Golikov A.
Ох!
Вам надо взят глубже, сильно, надо стандарт USB почитать...

Если вы хотите реализовать USB опираясь на сигналы подключенные к ножкам - это с первого раза займет около года. Да и так уже не делает никто лет эдак 5-10. В большинстве контроллеров есть железный модуль USB который берет на себя большую часть обмена физического уровня.

Если ваш модуль может быть только USB девайсом, и нет никакого стандартного USB Host внутри, то вы опять попали на год разработки,

Если же ваш проц умеет быть USB хостом, то тут уже можно искать чужие реализации. Если так повезет то скорее всего практически все будет сделано на железном уровне. Весь обмен возьмет на себя проц, будет вам выставлять прерывания по событиям.

События опять же не данные пришли, а другие, в USB определяют так называемые конечные точки по которым идет обмен - фактически это каналы. Весь обмен всегда инициализирует HOST, есть 4 вида обмена контрольный, изохронный, по прерыванием, потоковый. Клавиатура как HID будет иметь 2 или 3 канала, контрольный и 1-2 интерапт.

Чтобы это все узнать вам надо будет запросить у клавиатуры описания, это делается по стандарту USB, там вы узнаете VID, PID, формат репортов клавиатуры, какие данные на входе на выходе, какие номера точек какие каналы. Дальше поддержать обмен получать данные и все, наверняка там будет валиться код нажатия кнопки. Если клавиатура поддерживает несколько сущностей, надо будет еще задать правильную сущность...


Надо понимать стандарт USB, без этого вы не поймете ваще что делаете...
TrueCyrix
Ого!
Спасибо за столь ёмкое объяснение! Пойду изучать стандарт USB и постараюсь выяснить есть ли в моём устройстве этот самый USB-host.
DmitryM
Цитата(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
Golikov A.
а блин, чертовы операционкиsm.gif... Все время про них забываю))) Да, если есть операционка то все на порядок проще в отношении обслуживания клавиатуры... надо найти просто реализацию HID драйвера, в винду встроенная dll-ка, в юниксах наверняка тоже что-то подобное должно быть, а через библиотеку работу с клавиатурой дело пары дней наладить...
TrueCyrix
Дело в том, что операционки нет, там просто голое ядро. Я в нулевой блок гружу программу инициализации экрана, uart-а, nand-flash, затем из flash копирую в ОЗУ основную программу и передаю ей управление. В основной программе я вывожу картинку в экран из той-же flash по средствам буфера и затем хочу выводить символы с мигающим курсором в зависимости от нажатия кнопки на клавиатуре. Короче говоря ничего нет. Когда на этой плате стоял WinCE 4.2 net, то выносная (внешняя) usb-клавиатура прекрасно работала и usb-флешки тоже читались.
Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся.
kovigor
Цитата(TrueCyrix @ May 22 2014, 20:01) *
Не знаю... может быть попробовать linux поставить, но опять же я не представляю себе как это сделать, куда там и что грузить. u-boot у меня почему-то не завёлся.

Еще вариант - использовать PS/2 клавиатуру. Подключить ее к МК в 1000 раз проще, чем USB - клавиатуру. Современные клавиатуры, как правило, поддерживают как PS/2, так и USB (т.е., USB - клавиатуру можно через пассивный переходник включить в разъем PS/2, и она сама догадается, к какому интерфейсу (USB или PS/2) ее подключили).
Linux - это отдельная история, под него еще надо уметь (и учиться) программировать ...
Golikov A.
Голое ядро - наш человек)!

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

Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут
kovigor
Цитата(Golikov A. @ May 22 2014, 20:56) *
Голое ядро - наш человек)!

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

Юникс сложно, особенно если не делал ни разу, но зато если поставить нормально, то дальше будет все очень приятно. И масс сторадже нормальный и HID и прочие плюшки!!! Тот же езернет, если есть, ТСР стэк сразу полноценный дадут

Насчет утопии - не согласен. Немного несовременно, но вполне приемлемо и очень просто.

USB HOST - все гут, кроме одного. Этот хост надо писать самому. Для ARM9 я лично его писал, сам и с нуля, и знаю, что это задача, мягко говоря, непростая. Очень непростая. Если авторутемы нужно быстро закончить проект, то самописный хост отпадает - на его создание уйдут месяцы. Придется искать в Сети готовую чужую реализацию. А это почти всегда черны ящик со своими особенностями, глюками и проч. радостями, т.к. законченный коммерчески интересный проект в свободный доступ едва ли кто выложит.

Линукс - да, все хорошо, если умеете писать под него. А если не умеете, то придется учиться. Я так толком и не могу это осилить. Ну не мое это, хоть тресни. Поднять с нуля дивайсы (на ARM7 и ARM9) и хост (на ARM9) - это да, это я смог. Интересная, захватывающая, творческая работа. Хоть и очень сложная. А писать под Линукс - не получается, да и не интересно мне это, я железячник до мозга костей. Купил книжку по разработке драйверов, сижу и читаю. Что-то простое вполне освоил, а вот с более сложными вещами так и не разобрался. Смотрю в книжку, как баран, и ничего (почти) не понимаю. Не мое это ...
Golikov A.
Полез в описание, нашел вот такое
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
Цитата(Golikov A. @ May 22 2014, 21:39) *
в нем есть глава
OHCI Registers for USB Host Controller
Complies with OHCI Rev. 1.0

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


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

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

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


ну всегда можно упростить, и поднять под одну конкретную клавиатуру... Но я не настаиваю, пусть будет ps/2 sm.gif, кстати клавиатуры по этому интерфейсу универсальны?
kovigor
Цитата(Golikov A. @ May 23 2014, 00:10) *
Это я к тому, что подтягивания чужого софта и тщательный его разбор и анализ для этой конкретной задачи не так уж и трудоемок...

Для кого как. Для меня ковыряние в более-менее сложных исходниках Линукса - неподъемная задача. Даже отследить использование переменной по десятку хедеров и паре-тройке Си - файлов - уже большая проблема. У меня же в голове не ЭВМ, а обычные мозги.
Задача реализации хоста вполне подъемна, особенно если есть опыт реализации дивайсов. Еще крайне желательно наличие хоть самодельного сниффера, который бы подключался к линиям шины и позволял бы в режиме "магнитофона" записывать, что происходит на шине. Все это у меня было. И, тем не менее, запуск хоста вылился примерно в три месяца тяжелой, упорной работы ...

P.S. Не нужно ничего подстраивать. USB - клавиатуры универсальны, если вы не включаете в них всяких дополнительных плюшек, а используете только клавиши. Тогда разбор Report'ов сильно упрощается (тогда клавиатура выступает в качестве так называемого "Boot device"). Так, например, поступает BIOS, которому надо уметь работать с абсолютно любой USB - клавиатурой, и это при том, что его код сильно ограничен как по размерам, так и по сложности. Вот, см. стр. 59 ("Boot Interface Descriptors "):

http://www.usb.org/developers/devclass_docs/HID1_11.pdf

PS/2 - клавиатуры универсальны тем более.
undefined
Цитата(Golikov A. @ May 23 2014, 01:10) *
кстати клавиатуры по этому интерфейсу универсальны?


В стандартном наборе сканкодов клавиш - да.
Golikov A.
я пытаюсь сказать что код обслуживания OHCI очень просто, и его нетрудно разобрать чужой.
TrueCyrix
Ну товарищи - я в не большом шоке wacko.gif , я думал это будет несколько проще. Значит надо как-то проинициализировать USB, судя по документации для USB-host есть специальная таблица регистров с кучей адресов. Пока разбираюсь, но весьма трудно понимается. Как бы выяснить последовательность действий, что вот нужно для инициализации, как передать/получть данные? Я так понимаю, в клавиатуру надо послать некоторую команду, чтобы та выдала нужные данные. К примеру захотелось мне погасить или зажечь NumLock или CapsLock - надо дать соответствующую команду... может быть поискать какой-нибудь datasheet на клавиатуру? Для меня это очень тёмный лес. 05.gif
Golikov A.
Весь прикол в том что вы связались с USB - это самоописываемый интерфейс, в этом был смысл. Ведь те кто пишет виндус не читают даташиты на все клавиатурыsm.gif...
Принцип работы HID устройств такой: Они обмениваются репортами, формат репорта описан в дескрипторах. Когда происходит подключение устройства к хосту, хост инициализирует серию запросов по которым определяет что за устройство, подбирает к нему драйверы если надо, получает формат данных что оно выдает.

Для HID есть целая таблица с тем какие данные бывают, абсолютные, относительные, в репортах задаются диапазоны и так далее. Так что работая с USB клавиатурой, которая по сути HID (не берем супер навороченные), вам все равно как она устроена, у вас будет для всех все одинаково.

USB устройство надо отметить имеет несколько сущностей, то есть когда вы включаете его, в дескрипторах вам сообщается сколько ваще вариантов есть. Среди них будет обязательно один стандартный, если клава навороченная и нужен ей свой драйвер, то будет и такой вариант, и хост сможет выбрать по какому варианту работать.

Так вот возвращаясь к HID
в нем определены
IN репорт, OUT репорт, Feature репорт.
В USB все всегда со стороны хоста мериют, так что OUT репорт - это передача данных в HID, в клавиатуре его может не быть
IN репорт - это данные от устройства, через них вам будут из клавиатуры слать код нажатой кнопки.

Feature - это свойства, это штука двунаправленная, ее можно как задать, так и считать, состояние feature может менять как хост так и устройство, обычно через него на клавах зажигают диодики что нажат капс лок и так далее, или же там стоит флаг что он нажат.

Чтобы это точно узнать, надо опросить клавиатуру и считать дискрипторы ее репортов.


Отчеты могут поступать в 3 режимах, по изменению состояния или по таймеру с заданным интервалом или по запросу от хоста, но это только для фичей.. In репорт запросить вроде как нельзя, если я не ошибаюсь... Также как фича отчет не придет по инициативе устройства... но тут 100% гарантии не дам, давно я с этим ковырялся...

----------
обманул маленько

InReport идет через входную интерапт точку, или через контрольную

OutReport
FeatureReport
идут через контрольную точку, или через опциональную выходную интерапт точку, если ее нет, то только через контрольную по инициации хоста.

OutReport можно только послать
InReport можно только запросить
FeatureReport можно и послать и запросить

запрашивать OutReport или посылать InReport через контрольную точку по идее не запрещено, но устройство должно их отнакать, и в стандартном драйвере винды такой опции не дали...
kovigor
Цитата(TrueCyrix @ May 23 2014, 08:39) *
может быть поискать какой-нибудь datasheet на клавиатуру?

Опыт разработки устройств USB у вас есть ? Если нет, читайте спецификацию и книжки. Потом беритесь за описание OHCI и всего того, что написано по USB - подсистеме в документации на ваш МК.
Еще раз повторю. Есть серьезная, острая необходимость в использовании именно USB - клавиатуры и есть куча времени на проект ? Если да, разбирайтесь с USB. Если нет - ставьте PS/2. Это я вам говорю как человек, решивший (почти с нуля) аналогичную задачу ...
mantech
Цитата(kovigor @ May 23 2014, 11:30) *
Если нет - ставьте PS/2. Это я вам говорю как человек, решивший (почти с нуля) аналогичную задачу ...


Все правильно - если усб нужен только ради клавы - целесообразно работать в режиме ps2 и не парить себе мозг на пол-года разбирательством с усб и отлаживанием и исключением глюков, а их будет и немало.
Другое дело, если есть еще требования, например работа с флешками и т.п. - тогда да - вгрызайтесь в усб, благо хост совместим с ohci. Это большой плюс в сравнении с теми-же стмками.
Golikov A.
Ну и еще вопросы личного роста...
undefined
Цитата(TrueCyrix @ May 23 2014, 09:39) *
Я так понимаю, в клавиатуру надо послать некоторую команду, чтобы та выдала нужные данные. К примеру захотелось мне погасить или зажечь NumLock или CapsLock - надо дать соответствующую команду... может быть поискать какой-нибудь datasheet на клавиатуру? Для меня это очень тёмный лес. 05.gif


Даташит на USB клавиатуру называется The Device Class Definition for HID. Ищется на USB.org. Там же можно найти "некую команду" в документе USB Specification. В последнем вам надобно в основном 9-ю главу. Я уже запамятовал подробности, но примерная последовательность такая: установить клавиатуре адрес, запросить дескрипторы, установить конфигурацию. Вроде бы все, после этого она должна сканкоды слать.
TrueCyrix
Всем большое спасибо за ответы! Я понял, что раньше ничего не понимал. Конечно же меня интересует только клавиатура, а что Вы имеете ввиду под PS/2 ? Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB? А работать будет?
Ладно... я пока почитаю документ The Device Class Definition for HID который на USB.org, но весьма интересно... значит задаём адрес, запрашиваем дескрипторы, устанвливаем конфигурацию и читаем коды кнопок... - надо как-то всё это осознать. Уверен, у меня будет куча вопросов. sad.gif Только не бросайте меня.
undefined
Цитата(TrueCyrix @ May 23 2014, 15:36) *
Всем большое спасибо за ответы! Я понял, что раньше ничего не понимал. Конечно же меня интересует только клавиатура, а что Вы имеете ввиду под PS/2 ? Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB?


Для PS2 нужен другой аппаратный интерфейс. Реализуется ногодрыгом портами контроллера общего назначения. Гуглим что нить в духе PS/2 интерфейс.
kovigor
Цитата(TrueCyrix @ May 23 2014, 14:36) *
Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB?

Ладно... я пока почитаю документ The Device Class Definition for HID который на USB.org

1. Наоборот, берем клавиатуру USB и через переходник включаем ее в разъем PS/2.

2. Не нужен вам сейчас этот документ. Вам до HID как до неба. Сначала надо хост поднять. Читайте спецификацию USB, спецификацию OHCI и описания на ваш контроллер ...
jcxz
Цитата(kovigor @ May 23 2014, 18:34) *
1. Наоборот, берем клавиатуру USB и через переходник включаем ее в разъем PS/2.

Сомневаюсь, что таковой существует. Ибо называться он будет: "USB-хост" wink.gif

Цитата(kovigor @ May 23 2014, 18:34) *
2. Не нужен вам сейчас этот документ. Вам до HID как до неба. Сначала надо хост поднять. Читайте спецификацию USB, спецификацию OHCI и описания на ваш контроллер ...

Не нужен ТСу хост. Как тут уже здраво посоветовали - ему нужно использовать PS/2.
Не уверен, но где-то мельком слышал, что клавы "USB"/"PS/2" при втыкании их в один из этих интерфейсов, определяют куда их воткнули и
начинают работать по соотв. интерфейсу. Хотя это надо проверить.
В любом случае - PS/2 много проще будет и, если автору надо решать практическую задачу, а не чтобы "наработаться",
то имеет смысл остановиться на PS/2.
undefined
Цитата(jcxz @ May 23 2014, 19:14) *
Не уверен, но где-то мельком слышал, что клавы "USB"/"PS/2" при втыкании их в один из этих интерфейсов, определяют куда их воткнули и начинают работать по соотв. интерфейсу.

Это про мышки. Они действительно так умеют. Клавиатур с такими переходниками в комплекте не встречал. PS отдельно, USB отдельно.
mantech
Цитата(undefined @ May 23 2014, 18:44) *
Это про мышки. Они действительно так умеют. Клавиатур с такими переходниками в комплекте не встречал. PS отдельно, USB отдельно.

Дак нет ничего проще - берете переходник от мышки, усб клаву и втыкаете в разъем ps2 на материнке (розовый). Работает - значит режим поддерживается.
Golikov A.
а у нас на фирме были переходники с рисуночком мышки зеленые и с рисуночком клавиатуры сереневые. Можно было местами менять, они внутри одинаковые, но чтобы вопросов не было были 2 цветов.

Кстати кто советует автору PS/2, а вы не думали что у него уже устройство с USB разъемом, и PS/2 разъема нет. И я не уверен что у него этот разъем может появится, ибо похоже курочат какую-то готовую систему...
kovigor
Цитата(Golikov A. @ May 23 2014, 21:49) *
а у нас на фирме были переходники с рисуночком мышки зеленые и с рисуночком клавиатуры сереневые. Можно было местами менять, они внутри одинаковые, но чтобы вопросов не было были 2 цветов.

Кстати кто советует автору PS/2, а вы не думали что у него уже устройство с USB разъемом, и PS/2 разъема нет. И я не уверен что у него этот разъем может появится, ибо похоже курочат какую-то готовую систему...

1. Правильно, эти переходники пассивные, поэтому их можно менять местами. А вот мышь и клавиатура интеллектуальны.

2. Разработка хоста с нуля потянет на полгода минимум. Не с нуля - месяца на 2-3. Если нет аппаратного сниффера, накиньте еще пару месяцев. А вот подпаять пару проводков на GPIO, вырезать в корпусе отверстие под разъем PS/2 и вмонтировать разъем в это отверстие можно за одну смену. ПО можно написать за неделю. Чувствуете разницу ?
Golikov A.
а если это телефонsm.gif? Ну решать конечно топикстартеру.
TrueCyrix
ничего не получается help.gif
kovigor
Цитата(TrueCyrix @ Jun 2 2014, 15:28) *
ничего не получается help.gif

С USB ? Так ведь это сложнейшая задача, а вы за неделю хотели сделать ? Что именно не получается ?
Golikov A.
Цитата
ничего не получается


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

Главное в этом деле не сдаваться, и переходите к конкретным вопросам.

Из такого на угад могу сказать что в УСБ чувствительно к времянке, так что если вы отладку между какими то процессами усб втыкаете, этим вы можете все разрушить. Если сейчас совет не подошел, пригодиться в будущем)
kovigor
Цитата(Golikov A. @ Jun 2 2014, 18:18) *
Главное в этом деле не сдаваться, и переходите к конкретным вопросам.

У человека ARM9, как и у меня. И OHCI. У меня тоже OHCI. Но МК у нас разные (у меня ATMEL). Я мог бы дать свой проект в качестве примера, но поможет ли это ? Все-таки, МК очень разные ...
Golikov A.
должно помочь, OHCI - стандарт, если там обращения в регистры через имена а не по адресам, то очень поможет, если по адресам на прямую, то надо будет по мануалу перевести все регистры. Ну и по описанию прерываний понять что куда...
esaulenka
Цитата(kovigor @ Jun 2 2014, 19:37) *
У человека ARM9, как и у меня. И OHCI. У меня тоже OHCI. Но МК у нас разные (у меня ATMEL).


К слову сказать, на 2410 у меня криво-косо, но задышал хост от LPC23-что-то-там (это тоже OHCI). Чуть лучше заработал какой-то непонятный китайский стек (был подобран на каком-то варезнике с иероглифами).
Разве что скурить нормально работу MMU и USB у меня не получилось. Глючило, что интересно, каждый раз по-новому.
Пришлось на время работы стека (у меня это всего несколько секунд, просто проверить наличие воткнутых usb-устройств) отрубать нафиг кэши.

Поскольку никакого функционала не требовалось (это был загрузчик с всевозможными "фишечками", основную работу выполняла wince), так оно и осталось.


Давно только это было...

А по делу - при текущем уровне вопросов про USB лучше не вспоминать. Если что-то пойдёт не так, поможет только многотомная спецификация. Разбираться в этом - то ещё удовольствие...
TrueCyrix
я вот даже не пойму с чего начать, в каких-то книжках пишется, что надо провести инициализацию устройства, но как конкретно - не написано, в других пишут надо сразу обращаться командами по адресам и ожидать ответа от устройства... wacko.gif

Ладно... если объяснять на пальцах - вот как например зажечь или погасить скажем NumLock ? Это какая то определённая команда? А как и где посмотреть список возможных команд - у производителя клавиатуры или эти команды универсальны для всех клавиатур? А до этой команды надо провести какую-то инициализацию? Что-то у меня уже мозг закипает.
jcxz
Цитата(TrueCyrix @ Jun 3 2014, 11:26) *
Ладно... если объяснять на пальцах - вот как например зажечь или погасить скажем NumLock ? Это какая то определённая команда? А как и где посмотреть список возможных команд - у производителя клавиатуры или эти команды универсальны для всех клавиатур? А до этой команды надо провести какую-то инициализацию? Что-то у меня уже мозг закипает.

И что толку тут спрашивать, как будто тут народ только и делает что с клавой по USB работает?
В сети должно быть навалом описаний интерфейса клавиатуры если хорошо поискать.
Помнится я в своё время умудрялся из ДОСа работать с клавой напрямую (без БИОСа), посылать её команды через порты, зажигать светодиоды,
даже эмулировать нажатия клавиш через регистры ввода/вывода клавиатуры.
И это во времена когда инета не было и этого форума. И как-то справлялся.
DmitryM
Цитата(TrueCyrix @ Jun 3 2014, 08:26) *
я вот даже не пойму с чего начать, в каких-то книжках пишется, что надо провести инициализацию устройства, но как конкретно - не написано, в других пишут надо сразу обращаться командами по адресам и ожидать ответа от устройства... wacko.gif

Ладно... если объяснять на пальцах - вот как например зажечь или погасить скажем NumLock ? Это какая то определённая команда? А как и где посмотреть список возможных команд - у производителя клавиатуры или эти команды универсальны для всех клавиатур? А до этой команды надо провести какую-то инициализацию? Что-то у меня уже мозг закипает.

Сначала нужно чтобы hid-устройство у Вас зарегестрировалось, провести энумерацию и проч., а уж потом речь пойдет о командах зажечь лампочку или получить скан-код клавиши.
P.S. Чем WinCE не устраивала на устройстве? Там-то этот вопрос уже решен.
TrueCyrix
Цитата(DmitryM @ Jun 3 2014, 10:02) *
Сначала нужно чтобы hid-устройство у Вас зарегестрировалось, провести энумерацию и проч., а уж потом речь пойдет о камандах зажечь лампочку или получить скан-код клавиши.
P.S. Чем WinCE не устраивала на устройстве? Там-то этот вопрос уже решен.


WinCE не устраивает тем, что он собирается и не работает, при копировании из flash зависает без причин, а родной (который был в устройстве) работет нормально, но там всяческие логотипы и прочие гадости связанные с фирмой-производителем. При попытке расковырять имидж, после редактирования и сжатия - не работает. Стоял WinCE 4.2 net - пробовал собирать свой в Platform Builder-е - не работает, ошибка при распаковке имиджа. Пробовал 5.0 поставить - тоже не работает, такое впечатление, что есть какая-то защита на аппаратном уровне, чтобы свою систему никто не поставил.
DmitryM
Цитата(TrueCyrix @ Jun 3 2014, 09:17) *
WinCE не устраивает тем, что он собирается и не работает, при копировании из flash зависает без причин, а родной (который был в устройстве) работет нормально, но там всяческие логотипы и прочие гадости связанные с фирмой-производителем. При попытке расковырять имидж, после редактирования и сжатия - не работает. Стоял WinCE 4.2 net - пробовал собирать свой в Platform Builder-е - не работает, ошибка при распаковке имиджа. Пробовал 5.0 поставить - тоже не работает, такое впечатление, что есть какая-то защита на аппаратном уровне, чтобы свою систему никто не поставил.


IMHO, Вам проще побороть WinCE или Linux (предпочтительнее, по-моему) поставить. Благо в сети есть готовые bsp, чем ваять свой USB-стэк или действительно взять PS/2 и ногодрыг.
Golikov A.
на пальцах это выглядит так.

1. вы втыкаете устройство, оно начинает потреблять и тянуть ножки данных в свою сторону.
2. Хост по этом определяет что в него что-то воткнулось и примерно тип полноскоростное, высокоскоростное, низкоскоростное.
3. Хост посылает запрос что за устройство (причем тут есть хитрость что сначала идет запрос 8 байт, в них лежит полная длинна описания, и запрос повторяют с правильной длинной)
4. устройство сообщает кто оно, VID, PID, тип, строки с названием проихводителя и так далее..
5. Хост определяет класс устройства, в случае клавиатуры должен быть HID
6. Хост запрашивает описание репортов HID, там будет сообщено что за поля, сколько их, какого типа за что отвечают. В случае клавиатуры входной отчет будет кодом кнопки нажатой. А отчет фича - будет наверняка лампочками.
7. Хост конфигурит устройство на работу (в случае если в нем несколько сущностей) задает периоды отчетов если разрешается и ждет

Все дальше с каждым нажатием кнопочки будет формироваться отчет, который хост будет забирать. А если хост хочет что-то изменить, он будет посылать фича репорты и менять состояние лампочек и так далее...

В случае OHCI практически все пункты и их последовательность железо берет на себя. Оно будет принимать данные и ставить флаги об изменении, и дергать вас прерыванием что появились данные, вам надо будет формировать правильные запросы (отчетов, описаний, и прочее,) отдавать их хосту на посылку и обрабатывать прерывания.
TrueCyrix
По моему у меня уже начинается сдвиг...

Объясните мне, что такое виртуальные адреса? Что такое ассоциативная память? Что ещё за буфер ассоциативной трансляции? Как из физического адреса 0х30000000 получается виртуальный 0х80000000 ? А зачем???

Я писал программы для MCS-51 и никогда не встречал подобного ужаса. sad.gif
Golikov A.
вы сейчас с кем говоритеsm.gif?

У меня возникает устойчивое подозрение что не один USB виноват в ваших бедахsm.gif... вы куда и зачем в виртуальные адреса то полезли? Это все из раздела операционных систем вроде как, где приложениям выделяется своя память (страничка), внутри приложения обращаются по внутренним адресам, а операционка уже эти страницы памяти раскладывает по реальной памяти.


ассоциативная память - это ваще крутая штука, как бы память с адресацией по содержимому, в ней очень быстро, фактически в 1 такт можно найти данные, если они там сохранены...


Только каким это все боком к USB?
TrueCyrix
Цитата(Golikov A. @ Jun 3 2014, 15:12) *
Только каким это все боком к USB?


Ну тут были советы поставить WinCE, потому как там уже реализована поддержка USB клавиатур и прочего, ну вот я и написал свой загрузчик, который копирует содержимое из flash в ОЗУ, а потом звонит по адресу в ОЗУ и запускает программу. Примитивную программу, выводящую картинку из nand в экран я написал, впринципе работает, только медленно - видно как прорисовываются пиксели. Так вот пробовал я загрузить таким образом eboot для последующей загрузки самого ядра nk.bin и получил сбой, посмотрел дебаггером и увидел, что eboot работает совсем в другой области адресов в озу 0x8c200000... и иже с ними, как я понял - это виртуальные адреса. Вот теперь я окончательно запутался. Даже не знаю, толи проще копать дальше и добиваться загрузки wince, а потом писать своё приложение на базе этой CE или же пойти в другую сторону и написать свою программу обработки hid устройства по USB.
Golikov A.
win CE - это операционка, кроме поддержки стэков USB и прочих, вы получаете и контроль приложений (чтобы они друг другу память не гадили) и многопоточность, и библиотеки программные и так далее... Если бы я был в этой ситуации я бы оценил выгоды которые дает мне операционка, и только если бы их очень много пошел по пути ковыряния ее. Но это только потому что для меня USB не магическая книга, а операционка - магия....

Было бы наоборот или равнозначно точно бы операционку делал, я что-то заочно начинаю их уже любить...
DmitryM
Цитата(TrueCyrix @ Jun 3 2014, 15:22) *
Даже не знаю, толи проще копать дальше и добиваться загрузки wince, а потом писать своё приложение на базе этой CE или же пойти в другую сторону и написать свою программу обработки hid устройства по USB.


IMHO, с linux или WinCe Вы получите еще и ethernet и другие плюшки. Там где ось не нужна, она не нужна, но здесь думаю, подняв ось, далее будет проще общаться с дисплеем, клавиатурой, мышой и пр. здесь смотрели? http://www.mt-system.ru/catalog/samsung-semiconductors Там и u-boot и загрузчик из NOR/NAND приводятся.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.