Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: (R)NDIS и CY7C68013A USB c FPGA, создание сетевого интерфейса  (Прочитано 15408 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sfx
Гость
« : 23-04-2009 08:06 » 

Назрел вопрос следующего рода:

Имеется FPGA c подключенной к ней CY7C68013A, на эту FPGA приходят MII пакеты (Ethernet). С CY7C68013A реализован двухсторонний обмен данными. Могу записать в USB пакетик и считать могу данные из него. работает в CyConsole. режим bulk и slave fifo и два Endpoint'а под это выделены.

Хотелось бы реализовать по сути сетевой интерфейс USB (с IP адресом, шлюзом, ну вообще, как обычная сетевая USB карточка) и пакеты Ethernet принимать и отправлять из FPGA в комп.

Сам я в программировании не особо разбираюсь, т.к. по железу инженер.

Прочитал, что есть такая штука - RNDIS. И она как раз позволяет реализовывать Сетевые интерфейсы на USB.

Сам попробовал Jungo WinDriver 9.0. там есть примеры работы с моим USB, можно читать и писать в Endpoint'ы. Сгенерировался inf файл с VID&PID.
Собственно интересует вопрос, как мне к этому всему прикрутить NDIS так чтобы в Windows видела Сетевой интерфейс (LAN) и драйвер передавал сами пакеты в заданные мною Endpoint'ы, ну и возможно, какие то еще служебные данные.

В переспективе, нужно будет еще сделать драйвер, аналогичной TV тюнеру - прием траспортного потока (MPEG-TS), работующий одновременно с Сетевым интерфейсом.

Кто может что сказать по реализации драйвера сетевого устройства (R)NDIS ?
Может есть у кого какие Examples ?
Существует ли способ обьединения драйверов в единую "Пачку?"
Или книгу посоветуйте, которая может прояснить эти моменты...

Спасибо.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 26-04-2009 08:20 » 

http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx
и
http://www.microsoft.com/whdc/device/network/NDIS/rndis.mspx
в скаченном документ "RNDIS USB kit 2005\Documents\*.doc"
читайте.
« Последнее редактирование: 26-04-2009 08:27 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sfx
Гость
« Ответ #2 : 27-04-2009 05:48 » 

Спасибо за ссылки, я их прочитал.
и возник конкретный вопрос, с чего начать работу?
написать inf файл с RNDIS ? и если мое устройство будет понимать те транзакции которые описаны в документе все будет жить?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-04-2009 09:13 » 

угу.
список аппаратного протокола описан в документах. его надо поддержать.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sfx
Гость
« Ответ #4 : 27-04-2009 09:33 » 

хорошо, вот еще один момент:
на странице http://www.microsoft.com/whdc/device/network/NDIS/usbrndis.mspx указаны некоторые дискрипторы (USB Communication Class Interface Descriptor), к примеру описывающие Endpont'ы USB устройства.
Эти дискрипторы где должны быть ? тоже в inf файле? (если да - то как их туда засунуть и в какую секцию ?)
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 27-04-2009 10:28 » 

RNIDS (в данном случае готового драйвера) - описывает функциональность оборудования которую вы должны поддержать чтобы использовать СТАНДАРТНЫЙ виндовый драйвер от майкрософта. драйвер работает в предположении, что вы аппаратно поддержали в точности такой интерфейс который разработал майкрософт.

в инфе - задается только ваш вендор. VID и PID - это ваш код как производителя устройства. винде этот код(и инф-файл) нужен только для того, чтобы при подключении устройства сопоставить обнаруженному устройству - готовый драйвер. эта информация содержится в inf.
именно для этого вы должны изменить inf файл. и это по большому счету все что вы там должны изменить:
Код:
%AcmeDevice%    = RNDIS, USB\VID_vvvv&PID_pppp

а вот все описанные в документации "Messages" и реакцию на них - вы должны запрограммировать в вашей железке. это в документации и описано на 44 страницах.

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

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sfx
Гость
« Ответ #6 : 27-04-2009 10:43 » 

Спасибо ,что очень подробно все описали. Практически Все, что связано с документом по интерфейсу и о том как прикрутить VID\PID я разабрался.

Цитата
дескрипторы о которых вы спрашиваете, насколько я мельком понял - это описание интерфейса драйвера по которому винда с ним будет общатся.
вот этот вопрос меня как раз в большей степени интересует. дело в том что у меня несколько Endpoint'ов в устройстве, и я думаю, что мне нужно об этом как-то сообщить драйверу, указав какие in/out Endpoint'ы использовать. Винда будет с ними общаться из пользовательских приложений, а мне нужно сделать такой драйвер, чтобы он сам знал в какой Endpoint читать и писать, чтобы реализовать сетевой интерфейс (по типу Ethernet). 
Еще в описании этих дискрипторов, написаны и их значения (по всей видимости Default'ные - изменяемы ли они программно ? ), меня наводит на мысль о том, что я еще в USB-контроллере должен сделать идентичные этим характеристиками Endpoint'ы и конфигурации?
Записан
sfx
Гость
« Ответ #7 : 27-04-2009 10:49 » 

еще такой момент:

Data Out Endpoint Descriptor содержит:
Код:
bEndpointAddress 1 0x03 Endpoint 3 OUT
мой чип USB поддерживает только Endpoint'ы = 2 , 4, 6, 8.
Это еще острее ставит вопрос об программном измеении этих Descriptor'ов...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 27-04-2009 11:11 » 

посмотрите http://www.belcarra.com/rndis/Belcarra_RNDIS_Whitepaper_1.0.PDF
там говорят что это не единственный стандарт.

кроме того драйвера RNDIS делал не только микрософт. посмотрите  драйвер Jungo
http://www.jungo.com/st/embedded_usb_rndis.html (правда оно не под Win)

насчет нумерации... что-то такое написано в приложении B.... честно говоря вчитываться надо) и интернет полистать...)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sfx
Гость
« Ответ #9 : 28-04-2009 07:16 » 

выяснил, что для работы RNDIS нужно два Endpoint'а - одно в режиме bulk, другое в режиме interupt...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 28-04-2009 08:36 » 

странно, мне при беглом просмотре показалось что четыре. два builk один на вход второй на выход. interrupt и control.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines