Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
USB gadget (VBUS detect)
alexey123 (Guest)
Добавлено 30.11.1999 00:00 Редактировалось 16.04.2009 22:51
0
Сообщение: 1
alexey123 (Guest)

Оригинал темы находится здесь http://www.starterkit.ru/new/index.php?name=Forums&op=showtopic&id=243
Спуститься к концу Подняться к началу
alexey123 (Guest)
Добавлено 04.02.2009 00:26 Редактировалось 04.02.2009 00:26 Сообщение: 2
alexey123 (Guest)

В процессе игр с at91_udc наткнулся на то, что UDC не ловит отключение хост-контроллера. судя по схеме платы PC5 болтается в воздухе (на разъеме X1), а не на VBUS разъема X4 (как прописано в board-sam9260ek.c)
других способов определить отключение хоста нет..

все-ли я верно понял, или дальше RTFMить ?
Спуститься к концу Подняться к началу
starterkit (Guest)
Добавлено 04.02.2009 08:21 Редактировалось 04.02.2009 08:21 Сообщение: 3
starterkit (Guest)

Этот сигнал (только по схеме он называется UB_5V) подключен к PC8 (61 пин) процессора.
Спуститься к концу Подняться к началу
nicsi (Guest)
Добавлено 06.02.2009 03:06 Редактировалось 06.02.2009 03:06 Сообщение: 4
nicsi (Guest)

Огромная просьба к alexey123, когда освоите USB-гаджеты, помогите плз подсказкой/примером. По апям внятной доки нету, примеров толковых нету... А то игрался с парой гаджетов, не могу понять, где там собственно хэндлеры запросов от хоста. Даже как модули ядра с доп.принтами пересобрать не могу .
Или, может, кто-либо уже писал USB slave driver ?
Спуститься к концу Подняться к началу
alexey123 (Guest)
Добавлено 06.02.2009 11:18 Редактировалось 06.02.2009 11:18 Сообщение: 5
alexey123 (Guest)

я занимаюсь сейчас парой простых драйверов - Host(Win32)/Gadget(Linux). Планирую выложить сюда все исходники, патчи, тестовые программы и комментарии.
Работа идет не быстро - много тыканий и исследований (особенно - в Win32-части). ждите.
Спуститься к концу Подняться к началу
nicsi (Guest)
Добавлено 06.02.2009 22:36 Редактировалось 06.02.2009 22:36 Сообщение: 6
nicsi (Guest)

А я делаю Host-часть в Линуксе с графическим окном на Qt - мне такой вариант проще, там почти все доделано. Тем более, что по хосту нашел интересные статьи П. Курочкина.
Будем ждать .
Спуститься к концу Подняться к началу
alexey123 (Guest)
Добавлено 06.03.2009 16:13 Редактировалось 06.03.2009 16:13 Сообщение: 7
alexey123 (Guest)

Ну вот и мой вклад в наше общее дело.

Готова пара драйверов USB (Win/Linux) для SK-MAT91SAM9XE512. Позволяет
организовать прозрачный канал между платой Win32(host) и платой(device)
посредством USB. При старте драйвера на плате монтируется устройство
/dev/bulkusb, и Windows появляется соотв. интерфейс.
Пишем на плате в /dev/bulkusb - читаем на компе из интерфейса (ReadFile)
Пишем в интерфейс (WriteFile) - читаем на плате из /dev/bulkusb.
(Используются два endpoint'а с типом передачи BULK - в один пишем, из другого читаем)


Что в архиве:
Файлы для Win32 и Linux лежат в соотв. каталогах.

Драйвер для Linux.
Лежит в готовом виде в bin/linux
Для запуска необходимо собрать ядро с опциями USB_SUPPORT,CONFIG_USB_GADGET,CONFIG_USB_GADGET_AT91.
Сам драйвер собирается (модулем или статически) с включением опции USB_BULKSB (после замены Makefile и KConfig)
Больше тут описывать нечего.

Драйвер для Win32
Лежит в готовом виде (bulkusb.sys для Windows Vista) в каталоге win/vista.
Для установки необходимо положить его рядом с bulkusb.inf и соединить USB-кабелем
плату и комп. Выскочит Wizard, новое оборудование, далее все стандартно.
Для самостоятельной сборки придется повозиться.
Идем сюда, регистрируемся
и качаем "WDK for Windows Server 2008 - Build 6001_18002" (iso). Устанавливаем, разбираемся.
Создаем свой подкаталог (в ($WDKROOT/src/usb), переписываем в него src/win/sys.
Запускаем необходимы build environment (в зависимости от версии Windows), из него заходим
в каталог с драйвером и запускам build.exe. В результате получится bulkusb.sys, для запуска
необходимо переписать его в system/32drivers и передернуть кабель к плате.

Библиотека для Win32 (bulkusb.dll + bulkusb.lib)
Лежит в готовом виде в bin/win.
Одна единственная функция (GetBulkUsbDevices) возвращает список подключенных в данный момент устройств (плат).
Собирается из WDK аналогично драйверу.

Тестовое приложение для Win32 (test_app.exe)
Пример использования драйвера и библиотеки. Писал и собирал в VS2008 (необходимо подключить bulkusb.lib)
Собирал в VS2008 (прилагаю весь application).

Теперь детали:
0) Если планируете самостоятельно дорабатывать все это хозяйство, то необходимы базовые знания
об устройстве шины USB (спецификация лежит тут
)
1) Драйвер под Linux сделан на основе Gadget Zero из ядра 2.6.24. Вырезал лишнее, дописал своего, скомпилял,
отладил. достаточно просто.
2) Драйвер под Win32 сделан из BULKUSB (входит в состав WDK). Основные изменения:
- Отправка ZeroLengthPacket после транзакций, размер которых кратен 64b.
- Принцип чтения данных из устройства (использование буффера)
- Убрал ограничения на макс. размер транзакций
3) Разработка драйверов под Windows - отдельная тема. Прежде чем лезть туда с головой
советую почитать документацию по Windows Driver Model. Тема емкая и сложная.
Microsoft простых путей не ищет, потому будьте готовы лопатить хелп, исходники и гугл.
Для отладки советую взять отдельный компьютер с голой операционкой - быстрее будете
перегружаться после синих экранов. Отладчиками ядра не пользовался, хватило DebugView.exe,
который можно бесплатно скачать отсюда
На драйвер для Windows ушло 80% всего времени.
4) Каждое USB-устройство идентифицируется парой VendorID/ProductID. В настоящее время задействованы
идентификаторы от Intel 82930 Test Board (BULKUSB из WDK как раз для нее). По этой теме
читать тут

Если что вспомню - допишу.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно alexey123 06.03.2009 г. в 16:16:56
Спуститься к концу Подняться к началу
starterkit (Guest)
Добавлено 06.03.2009 17:22 Редактировалось 06.03.2009 17:22 Сообщение: 8
starterkit (Guest)

Кулл!!!
Спасибо за участие!
Спуститься к концу Подняться к началу
nicsi (Guest)
Добавлено 13.04.2009 01:28 Редактировалось 13.04.2009 01:28 Сообщение: 9
nicsi (Guest)

Ух ты. Что-то давненько я сюда не заходил. Спасибо! Разберусь с датчиками - попробую заюзать.
Таки правильно ли я понял, что надо ARMовское ядро пересобирать? Ведь поддержка USB в плане mass storage там уже работает?
Спуститься к концу Подняться к началу
alexey123 (Guest)
Добавлено 13.04.2009 10:49 Редактировалось 13.04.2009 10:49 Сообщение: 10
alexey123 (Guest)

Не совсем понял вопрос.
Ядро надо собирать с поддержкой USB-gadget (USB_GADGET=y), AT91 USB Device port (USB_GADGET_AT91=y), и моим BULKUSB (USB_BULKUSB=y). В этом случае ядро при старте запустит драйвер Device-порта на AT91, а тот будет знать кого вызывать (BULKUSB), когда из этого порта полезут данные.
Какой mass-storage вы имеете в виду? Хостовый? ну так он вообще не при чем. Собирайте ядро и суйте в плату флешки - должны работать.
Если Device'овый - то тут либо то(mass storge), либо другое(bulkusb). Иначе необходимо писать новый драйвер (composite), которые будет включать в себя функции от обоих составляющих. В эту сторону я глубоко не копал, так как не было в том необходимости.
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Embedded Linux