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

 
 
> Обмануть USB, выдать 1ый ендпоинт за 5ый, лоханулся, нид хелп!
InsolentS
сообщение May 16 2008, 09:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Здравствуйте мастера АРМа, надеюсь на вашу помощь.
История такая: отлаживал проект на AT91SAM7X, а на готовую плату распаял SAM7S, предпологая что они отличаются только количеством ног и наличием MAC. Но неожиданно выяснилось, что USB модуль в SAM7S кастрированный и поддерживает только 3 ендпоинта 07.gif ,а по иронии судьбы мне нужено использовать именно 4ый и 5ый, т.к. этого требует драйвер, написанный сторонним производителем.
Можно ли как то обмануть USB и сделать чтобы все запросы идущие, например, к 5му ендпоинту приходили на физический 1ый ендпоинт? help.gif


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение May 16 2008, 12:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(InsolentS @ May 16 2008, 17:58) *
Можно ли как то обмануть USB и сделать чтобы все запросы идущие, например, к 5му ендпоинту приходили на физический 1ый ендпоинт? help.gif
Почему нет? Главное знать структуру драйвера со стороны хоста и иметь представление о работе всей системы (ПО на хосте <--> драйвер на хосте <--> драйвер на МК <--> ПО МК)


--------------------
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 16 2008, 12:28
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(prottoss @ May 16 2008, 18:22) *
Почему нет? Главное знать структуру драйвера со стороны хоста и иметь представление о работе всей системы (ПО на хосте <--> драйвер на хосте <--> драйвер на МК <--> ПО МК)

Как работает ПО и драйвер на компе(хосте) я не могу знать, они от стороннего производителя. Если только дизассемблирование, но это крайний случай.


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 16 2008, 13:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(InsolentS @ May 16 2008, 20:28) *
Как работает ПО и драйвер на компе(хосте) я не могу знать, они от стороннего производителя. Если только дизассемблирование, но это крайний случай.
Извиняюсь, уработался. smile.gif Я в первом своем посте вам сказал ерунду - нельзя обмануть девайс. И если у вас нет точек №4,5,6 то и пакеты к ним Вы не получите. Потому как функция USB аппаратная и она просто не пропустит токен для не существующих точек


--------------------
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 16 2008, 14:30
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Спасибо. Печально это sad.gif


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 17 2008, 09:12
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(InsolentS @ May 16 2008, 17:30) *
Спасибо. Печально это sad.gif


Не все так печально вообщето драйвер может быть написан таким образом, и скорее всего так оно и есть, что не привязан к конкретным номерам эндпоинтов. По идее нужно только заменить номер эндпоинта в дескрипторе эндпоинта и все должно работать. Главное чтоб эндпоиты были одного типа т.е. ендпоинт interrupt нельзя заменить на bulk итд ну и out естественно нельзя менять на in.

Сообщение отредактировал =F8= - May 17 2008, 09:14
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 17 2008, 11:39
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(=F8= @ May 17 2008, 15:12) *
Не все так печально вообщето драйвер может быть написан таким образом, и скорее всего так оно и есть, что не привязан к конкретным номерам эндпоинтов. По идее нужно только заменить номер эндпоинта в дескрипторе эндпоинта и все должно работать. Главное чтоб эндпоиты были одного типа т.е. ендпоинт interrupt нельзя заменить на bulk итд ну и out естественно нельзя менять на in.

При неправильных номерах ендпоинтов получаю в винде BSOD.


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 17 2008, 12:48
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(InsolentS @ May 17 2008, 14:39) *
При неправильных номерах ендпоинтов получаю в винде BSOD.

Значит драйвер криво написан, причем очень криво. Для того и нужна вся эта куча дескрипторов чтоб не привязываться к конкретным эндпоинтам итд.
А что за драйвер то? Может лучше стандартны виндовый какой-небудь использовать
PS а типы эндпоинтов точно совпадают?

Сообщение отредактировал =F8= - May 17 2008, 12:58
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 17 2008, 13:13
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=F8= @ May 17 2008, 20:48) *
Значит драйвер криво написан, причем очень криво. Для того и нужна вся эта куча дескрипторов чтоб не привязываться к конкретным эндпоинтам итд.
А что за драйвер то? Может лучше стандартны виндовый какой-небудь использовать
PS а типы эндпоинтов точно совпадают?
smile.gif Думаете, что драйвера windows самые прямые? biggrin.gif

Цитата(=F8= @ May 17 2008, 20:48) *
Для того и нужна вся эта куча дескрипторов чтоб не привязываться к конкретным эндпоинтам итд.
Вообще то "...вся эта куча дескрипторов ..." как раз и нужна, чтобы сообщить хосту конкретные номера точек, их типы и привязать точки к конкретным каналам данных. Драйвер же конкретного устройства, знает, что в конкретном устройстве есть конкретные точки с совершенно конкретными типами... smile.gif Если же устройсво хочет использовать сторонний драйвер, оно обязанно обеспечить конкретные точки с конкретными типами, в противном случае драйвер нге обязан работать с данным устройством. То что возникает BSOD, соглашусь, скорее всего вина драйвера


--------------------
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 17 2008, 13:48
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(prottoss @ May 17 2008, 16:13) *
smile.gif Думаете, что драйвера windows самые прямые? biggrin.gif

Не самые, но работют.

Вообще то "...вся эта куча дескрипторов ..." как раз и нужна, чтобы сообщить хосту конкретные номера точек, их типы и привязать точки к конкретным каналам данных. Драйвер же конкретного устройства, знает, что в конкретном устройстве есть конкретные точки с совершенно конкретными типами... smile.gif Если же устройсво хочет использовать сторонний драйвер, оно обязанно обеспечить конкретные точки с конкретными типами, в противном случае драйвер нге обязан работать с данным устройством. То что возникает BSOD, соглашусь, скорее всего вина драйвера


Вы, мягко говоря, неправы, дескрипторы служат в том числе и для того чтоб сообшить драйверу с какими эндпоинтами ему надо работать. Посмотрите для примера любой драйвер USB у-ва. Драйвер знает лиш какой набор эндпоинтов должен быть у у-ва, если просто знать набор недостаточно например если имеется несколько однотипных эндпоинтов, то можно ввести дополнительный дескриптор в котором будет расписано что и куда. Но делать жесткую привязку к номеру... за такое руки отбивать надо.
PS Вы не поверите но у меня один и тотже драйвер может обслуживает девайс с произвольным количеством(на сколько эндпоинтов хватит) виртуальных сом портов да еще и с аудио юсб до кучи, причем какие именно будут номера эндпоиннов я ессно не знаю.
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 17 2008, 14:12
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=F8= @ May 17 2008, 21:48) *
PS Вы не поверите но у меня один и тотже драйвер может обслуживает девайс с произвольным количеством(на сколько эндпоинтов хватит) виртуальных сом портов да еще и с аудио юсб до кучи, причем какие именно будут номера эндпоиннов я ессно не знаю.
Я верюsmile.gif Но такую проблему решил по другому - есть один канал. Драйвер создает в системе несколько виртуальных портов и мкльтплексирует их в один канал данных. При этом, упрощенно, в начале пакета передается номер канала. На стороне устройсва пакеты демультплексируются. Итого - всего две конкретныеsmile.gif точки. = 0 + 1(in/out)



PS:По поводу дескрипторов и правильного драйверописания дискутировать в данной ветеке желания нет никакого.


--------------------
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 17 2008, 15:03
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(prottoss @ May 17 2008, 17:12) *
Я верюsmile.gif Но такую проблему решил по другому - есть один канал. Драйвер создает в системе несколько виртуальных портов и мкльтплексирует их в один канал данных. При этом, упрощенно, в начале пакета передается номер канала. На стороне устройсва пакеты демультплексируются. Итого - всего две конкретныеsmile.gif точки. = 0 + 1(in/out)

А у меня 4 на канал - 2 bulk для передачи данных и 2 interrupt для DTR, RTS итд. Но для LPC это не критично на 32 эндпоинтах можно развернутся. smile.gif

Цитата
PS:По поводу дескрипторов и правильного драйверописания дискутировать в данной ветеке желания нет никакого.

Ну нет так нет
Go to the top of the page
 
+Quote Post
Axel
сообщение May 18 2008, 11:43
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Решусь предположить, что, если код приложения, которое с этим "странным" драйвером работает, доступен и если достижение максимальной скорости обмена не критично, то можно не заморачиваться на этом драйвере, а использовать, например, opensource драйвер libusb0. За ним вроде особых проблем не замечалось...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:31
Рейтинг@Mail.ru


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