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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Есть желание сделать TCP/IP over USB, Порекомендуйте стартовую точку для реализации RNDIS
Concorde
сообщение Feb 25 2009, 23:37
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 5-07-05
Пользователь №: 6 553



Цитата(AlexandrY @ Feb 26 2009, 00:29) *
А вы уверены что делали RNDIS и что вы сами его делали? wink.gif
Endpoint 0 вообще-то нужен всегда и для любых USB дивайсов к RNDIS-у это имеет малое отношение.
А вот конечная точка типа interrupt там не нужна. Не те скорости. Обмен interrupt в USB слишком медленный.
И рабочий канал и контрольный настроены как bulk.
Ну и отладочный интерфейс не забыть через тот же USB.
Вообщем точек 5-6 обрабатывать нужно.

Мне не понятны ваши сомнения.
Писал я, года 3 назад.
Для чего 5-6 точек ?
Отлаживать там нечего (при условии, что остальной код нормально работает).
Естественно, что EP0(bulk) нужен всегда и везде.
Поддержка RNDIS как такого занимает строк 200 крайне простого кода, т.к. делать там особо нечего.
Самое сложное - обеспечить статистику (подсчет байтов/пакетов) - т.к. Винда (по крайней мере, XP) показывает статистику
интерфейса, запрашивая его через RNDIS (а не считает сама).
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 6 2010, 18:45
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



У меня вопрос конкретно по Remote NDIS.

Ваяю обработку запросов по спецификации Remote NDIS. Чип юзаю от кипариса FX2LP.
По ходу дела столкнулся с таким траблом.
В спецификации изложено, что
1)хост передает в запросе Send Encapsulated Command сообщение
REMOTE_NDIS_INITIALIZE_MSG (Size 24 bytes):
02 00 00 00
18 00 00 00
02 00 00 00
01 00 00 00
00 00 00 00
00 40 00 00
2)девайс подтверждает его получение передачей RESPONSE_AVAILABLE по Endpoint INTERRUPT
3)на что хост, выставив запрос GET_ENCAPSULATED_COMMAND, забирает данные от девайса в сообщении
REMOTE_NDIS_INITIALIZE_CMPLT(Size 52 bytes):
80 00 00 02
00 00 00 34
02 00 00 00
00 00 00 00
00 00 00 01
00 00 00 01
00 00 00 01
00 00 00 00
00 00 00 01
00 00 05 3A
00 00 00 03
00 00 00 00
00 00 00 00

А дальше одни непонятки...

Вопрос №1. После GET_ENCAPSULATED_COMMAND нужно ли передавать RESPONSE_AVAILABLE?
Вопрос №2. Если я отвечаю RESPONSE_AVAILABLE на запрос GET_ENCAPSULATED_COMMAND, то хост снова выставляет запрос GET_ENCAPSULATED_COMMAND. А т.к. данные я уже передал, и передавать нечего, хост на этом прекращает инициализацию. Потом решил ему постоянно передавать REMOTE_NDIS_INITIALIZE_CMPLT. И тут хост как начал метелить GET_ENCAPSULATED_COMMAND в цикле, что я испугался и впал в ступорsmile.gif

Вопрос №3. Что я делаю неправильно?


По документу вроде хост должен вычитать пакет данных из Bulk IN. Но таких запросов что-то не наблюдается... sad.gif((

Сообщение отредактировал DiMonstr - Feb 6 2010, 18:49
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 6 2010, 21:51
Сообщение #18


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(DiMonstr @ Feb 6 2010, 20:45) *
REMOTE_NDIS_INITIALIZE_MSG (Size 24 bytes):
02 00 00 00
...
REMOTE_NDIS_INITIALIZE_CMPLT(Size 52 bytes):
80 00 00 02
...

Э-э-э-э, а с порядком байтов у Вас ничего не напутано случайно?

Цитата(DiMonstr @ Feb 6 2010, 20:45) *
Вопрос №1. После GET_ENCAPSULATED_COMMAND нужно ли передавать RESPONSE_AVAILABLE?

Нет, не нужно. RESPONSE_AVAILABLE следует высылать тогда, когда Вы готовы что-то передать хосту - результат выполнения предыдущих посланных rоманд или какую-либо асинхронную нотификацию. Поскольку RA посылается в interrupt endpoint, то хост увидит это сообщение достаточно быстро и выдаст запрос GET_ENCAPSULATED_COMMAND, на который и следует выдать имеющиеся данные (результат выполнения команды присланной в SEND, например).

Цитата(DiMonstr @ Feb 6 2010, 20:45) *
Вопрос №2. Если я отвечаю RESPONSE_AVAILABLE на запрос GET_ENCAPSULATED_COMMAND, то хост снова выставляет запрос

Правильно, высылая новый RA Вы говорите хосту что у Вас еще что-то есть, вот он и спрашивает новым GET-ом.

Цитата(DiMonstr @ Feb 6 2010, 20:45) *
По документу вроде хост должен вычитать пакет данных из Bulk IN. Но таких запросов что-то не наблюдается...

До запуска хостом чтения по Bulk IN еще достаточно далеко - нужно перейти в состояние data-inited, а для этого маска фильтров устанавливается хостом при помощи SEND/RA/GET, поскольку у Вас этот механизм еще не запустился - то до чтения Вы и не дошли пока.
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 8 2010, 09:18
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(VslavX @ Feb 7 2010, 00:51) *
Э-э-э-э, а с порядком байтов у Вас ничего не напутано случайно?


Точно! Здесь и порылась собака. Получается, я отправляю каждый DWORD в прямом порядке, а нужно в обратном.

Объясню на примере.
Короче получается, что значение всех полей по документации
#define REMOTE_NDIS_INITIALIZE_CMPLT 0X80000002
на самом деле нужно переворачивать вот так
#define REMOTE_NDIS_INITIALIZE_CMPLT 0X02000080
и передавать.
Получаю также в перевернутом виде.

Не могу понять почему так?
И нужно ли менять последовательность байт в DWORD в остальных полях???

Пример.
1) Хост передает:
REMOTE_NDIS_INITIALIZE_MSG (Size 24 bytes):
00000000 02 00 00 00 ....
00000004 18 00 00 00 ....
00000008 02 00 00 00 ....
0000000C 01 00 00 00 ....
00000010 00 00 00 00 ....
00000014 00 40 00 00 .@..

2) Хост принимает:
REMOTE_NDIS_INITIALIZE_CMPLT(Size 52 bytes):
а) так не верно
00000000 80 00 00 02 €...
00000004 00 00 00 34 ...4
00000008 02 00 00 00 ....
0000000C 00 00 00 00 ....
00000010 00 00 00 01 ....
00000014 00 00 00 01 ....
00000018 00 00 00 01 ....
0000001C 00 00 00 00 ....
00000020 00 00 00 01 ....
00000024 00 00 05 3A ...:
00000028 00 00 00 03 ....
0000002C 00 00 00 00 ....
00000030 00 00 00 00 ....

б) так операция success
00000000 02 00 00 80 ...€
00000004 00 00 00 34 ...4
00000008 02 00 00 00 ....
0000000C 00 00 00 00 ....
00000010 00 00 00 01 ....
00000014 00 00 00 01 ....
00000018 01 00 00 00 ....
0000001C 00 00 00 00 ....
00000020 00 00 00 01 ....
00000024 00 00 05 3A ...:
00000028 00 00 00 03 ....
0000002C 00 00 00 00 ....
00000030 00 00 00 00 ....

Но как будет верно?


Также хост передал REMOTE_NDIS_QUERY_MSG.
Таким образом дело дошло до сообщения REMOTE_NDIS_HALT_MSG.
И на это всё. На REMOTE_NDIS_HALT_MSG я никак не реагирую и ничего не делаю.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 8 2010, 12:56
Сообщение #20


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Шина USB работает в формате little-endian, это значит что все многобайтовые поля - 16-ти и 32-х битовые слова передаются начиная с младшего байта.
Цитата(DiMonstr @ Feb 8 2010, 11:18) *
#define REMOTE_NDIS_INITIALIZE_CMPLT 0X80000002

Нужно передавать как последовательность байт: 02 00 00 80

Цитата(DiMonstr @ Feb 8 2010, 11:18) *
И нужно ли менять последовательность байт в DWORD в остальных полях???

Не знаю, я с Кипарисом FX2LP не работал, если он little-endian, то - не нужно. В некоторых процессорах еще и выравнивание по адресу для обращения к HWORD/DWORD требуется.

Цитата(DiMonstr @ Feb 8 2010, 11:18) *
И нужно ли менять последовательность байт в DWORD в остальных Таким образом дело дошло до сообщения REMOTE_NDIS_HALT_MSG.

Вероятно у Вас еще где-то ошибки. Я советую Вам взять программный анализатор шины USB - например, USBlyzer версии старше 1.2, и промониторить подключение любого устройства с Windows Mobile 6.0 - КПК или смартфона - они именно по RNDIS подключаются и весь обмен прекрасно видно.
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 8 2010, 17:26
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(VslavX @ Feb 8 2010, 15:56) *
Шина USB работает в формате little-endian, это значит что все многобайтовые поля - 16-ти и 32-х битовые слова передаются начиная с младшего байта.

Теперь понятно. Почитаю документацию на компилятор...

Цитата(VslavX @ Feb 8 2010, 15:56) *
Вероятно у Вас еще где-то ошибки. Я советую Вам взять программный анализатор шины USB - например, USBlyzer версии старше 1.2, и промониторить подключение любого устройства с Windows Mobile 6.0 - КПК или смартфона - они именно по RNDIS подключаются и весь обмен прекрасно видно.

Я сейчас как раз и юзаю USBlyzer. Удобная весчицаsmile.gif

Спасибо за ответы и советы. Буду ковырять дальше.
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 24 2010, 08:55
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Вопрос.
FX2LP настроен на режим Slave FIFO.
Внешний master - FPGA.
В EP8IN приходит первый пакет данных.
Перед передачей его хосту необходимо в начало пакета добавить заголовок.
Затем в хост передать заголовок+данные.
Как реализовать такой алгоритм в режиме ручного управления fifo?
Или лучше данный заголовок формировать в FPGA и передавать хосту в автоматическом режиме?
Go to the top of the page
 
+Quote Post
knk
сообщение Sep 23 2012, 14:05
Сообщение #23





Группа: Участник
Сообщений: 13
Регистрация: 28-03-11
Пользователь №: 63 931



Добрый день!
Сейчас занимаюсь такой-же задачей RNDIS на Cypress FX2. Остановился на отправке REMOTE_NDIS_INITIALIZE_CMPLT.
Получаю REMOTE_NDIS_INITIALIZE_MSG
Высылаю RESPONSE_AVAILABLE через INTERRUPT EP
Получаю GET_ENCAPSULATED_RESPONSE
Отвечаю REMOTE_NDIS_INITIALIZE_CMPLT (не уверен что код отправки правильный)
На этом всё...

DiMonstr,
Можно-ли увидеть код под FX2 для отправки REMOTE_NDIS_INITIALIZE_CMPLT?
Помогите, ато застрял...
Go to the top of the page
 
+Quote Post
knk
сообщение Sep 25 2012, 14:04
Сообщение #24





Группа: Участник
Сообщений: 13
Регистрация: 28-03-11
Пользователь №: 63 931



Добрый день!
С REMOTE_NDIS_INITIALIZE_CMPLT вроде разобрался. Теперь возник вопрос с отправкой OID_GEN_SUPPORTED_LIST. Размер пакета получается больше EP0BUF. Как правильно разделить пакет или как заставить работать Setup Data Pointer для этого случая ?
Go to the top of the page
 
+Quote Post

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

 


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


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