Перейти к содержанию
    

два устройства один драйвер

добрый день.

собрал я устройство с bulk обменом.

когда устройство одно сидит на шине, то все хорошо.

как только два устройства сажаю, то работает все арвно только одно устройство через драйвер.

 

проверял так:

прошил два устройства с разными идентификаторами.

сделал две программы под разные идентификаторы.

подключаю устройства, тут все хорошо, винда видит оба.

 

запускаю две проги, работает только одно устройство.

 

что можно сделать?

 

надо чтобы работали несколько устройств через драйвер.

 

я в драйверах нуб.

просто взял стандартный usbbulk.sys и подправил *.inf файл

вот...

спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

а может быть надо что то прописать дополнительное в инф файл?

Изменено пользователем lazarev andrey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дополнительное не надо. Винда ищет драйвер по идентификатору устройства - PID & VID, и потом проверяет серийник - если новый, то она создает новый экземпляр драйвера. Это легко проверить, делает ли она это, если сменить серийник ыв девайсе и воткнуть в ЮСБ. Тогда Винда как бы поставит новые дрова.

Вопрос в том, как прога - находит ли она требуемый девайс на шине и потом - получает ли она на него дескриптор. То есть - если есть сбой, то в каком он месте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

серийного номера в дескрипторе не предусмотрено, предусмотрены разные PID.

в inf - файле прописаны несколько PID. может быть в этом дело?

может надо делать для каждого отдельного устройства свой inf - файл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Серийник входит в дескриптор - вот пример свойств устройства в системе.

 

USB\VID_1С37&PID_00A4\A0000001

 

А вот насчет инфа - не знаю, я пользовал разные инфы для разных устройств. все таки непонятно. как прога получает дескриптор на устройство?. На чем сделан девайс и что за драйвер?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

серийного номера в дескрипторе не предусмотрено, предусмотрены разные PID.

в inf - файле прописаны несколько PID. может быть в этом дело?

может надо делать для каждого отдельного устройства свой inf - файл?

Как же не предусмотрено?

(http://proyectosfie.com/html/usb/libro/ стр.97)

 

 

The device descriptor has 14 fields in 18 bytes.

 

0 bLength 1 Descriptor size in bytes

1 bDescriptorType 1 The constant DEVICE (01h)

2 bcdUSB 2 USB specification release number (BCD)

4 bDeviceClass 1 Class code

5 bDeviceSubclass 1 Subclass code

6 bDeviceProtocol 1 Protocol Code

7 bMaxPacketSize0 1 Maximum packet size for Endpoint 0

8 idVendor 2 Vendor ID

10 idProduct 2 Product ID

12 bcdDevice 2 Device release number (BCD)

14 iManufacturer 1 Index of string descriptor for the manufacturer

15 iProduct 1 Index of string descriptor for the product

16 iSerialNumber 1 Index of string descriptor containing the serial

number

17 bNumConfigurations 1 Number of possible configurations

 

iSerialNumber. An index that points to a string containing the device’s

serial number. This value is zero if there is no serial number. Some device

classes (such as mass storage) require serial numbers. Serial numbers are useful

if users may have more than one identical device on the bus and the host

needs to keep track of which is which even after rebooting. Serial numbers

also enable a host to determine whether a peripheral is the same one used

previously or a new installation of a peripheral with the same Vendor ID and

Product ID. No devices with the same Vendor ID, Product ID, and device

release number should have the same serial number.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

снова стало актуально.

устройтсво сделано на at89c5131.

 

вот такой текст инф файла:

 

/*---------------------------

[Version]

Signature = $CHICAGO$

Provider = "Company"

Class = USB

DriverVer = 10/12/2007, 1.0.0.0

 

;-------------------------------------------------------------------------

; Driver information

;-------------------------------------------------------------------------

 

[Manufacturer]

"Co" = Tech.Mfg

 

[Tech.Mfg]

 

"Device1" = DDInstall_USB_C001, USB\VID_03EB&PID_C001

"Device2" = DDInstall_USB_C002, USB\VID_03EB&PID_C002

 

 

;-------------------------------------------------------------------------

; Windows 2000 installation section

;-------------------------------------------------------------------------

 

[DDInstall_USB_C001.NT]

AddReg = AddRegistry_C001

CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf

 

[DDInstall_USB_C001.NT.Services]

AddService = USBBulk, 0x00000002, Service_Inst, EventLog_Inst

 

 

[DDInstall_USB_C002.NT]

AddReg = AddRegistry_C002

CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf

 

[DDInstall_USB_C002.NT.Services]

AddService = USBBulk, 0x00000002, Service_Inst, EventLog_Inst

 

 

[service_Inst]

DisplayName = "USB 2 Endpoints universal driver"

ServiceType = 1 ; SERVICE_KERNEL_DRIVER

StartType = 3 ; 2 - SERVICE_AUTO_START, 3 - SERVICE_DEMAND_START

ErrorControl = 1 ; SERVICE_ERROR_NORMAL

ServiceBinary = %10%\System32\Drivers\USBBulk.sys

LoadOrderGroup = Base

 

;-------------------------------------------------------------------------

; Windows 9X installation section

;-------------------------------------------------------------------------

 

[DDInstall_USB_C001]

AddReg = AddRegistry_9X, AddRegistry_C001

CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf

 

 

[DDInstall_USB_C002]

AddReg = AddRegistry_9X, AddRegistry_C002

CopyFiles = DrivertFiles.Ext, DrivertFiles.Inf

 

;-------------------------------------------------------------------------

; Registry section

;-------------------------------------------------------------------------

 

[AddRegistry_9X]

HKR,,DevLoader,,*ntkern

HKR,,NTMPDriver,,USBBulk.sys

 

[AddRegistry_C001]

HKR, "Parameters", "MaxInXfer", 0x00010001, 1048576

HKR, "Parameters", "EPInAddress", 0x00010001, 5

HKR, "Parameters", "MaxOutXfer", 0x00010001, 32

HKR, "Parameters", "EPOutAddress", 0x00010001, 2

 

[AddRegistry_C002]

HKR, "Parameters", "MaxInXfer", 0x00010001, 1048576

HKR, "Parameters", "EPInAddress", 0x00010001, 5

HKR, "Parameters", "MaxOutXfer", 0x00010001, 32

HKR, "Parameters", "EPOutAddress", 0x00010001, 2

 

 

;-------------------------------------------------------------------------

; Event log registry entries

;-------------------------------------------------------------------------

 

[EventLog_Inst]

AddReg = EventLog_AddReg

 

[EventLog_AddReg]

HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\Drivers\USBBulk.sys"

HKR,,TypesSupported,0x00010001,7

 

;-------------------------------------------------------------------------

; Source file information

;-------------------------------------------------------------------------

 

[PreCopySection]

HKR,,NoSetupUI,,1

 

[DestinationDirs]

DrivertFiles.Ext = 10, System32\Drivers

DrivertFiles.Inf = 10, Inf

 

[DrivertFiles.Ext]

USBBulk.sys

 

[DrivertFiles.Inf]

Atmel.inf

 

;=========================================================================

 

 

ну это я взял готовый инф и подправил немного.

 

драйвер я прикрепил.

может что надо подправить в инф-файле?

Изменено пользователем lazarev andrey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попытаюсь оказать вам посильную помощь, но сначаля вопросы:

 

1. "Стандартный USBBulk.sys" - драйвер из DDK bulkusb.sys или из DriverStudio usbbulk.sys ?

2. Какой программой для тестирования пользуетесь?

3. В секции [DrivertFiles.Inf] указан atmel.inf? Откуда и для чего этот файл?

Изменено пользователем Седой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. драйвер взяли с диска, который был с платой евалборда at89c5131 (разработчики не выходят на связь).

2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд.

3. atmel.inf - текст файла приведен выше. это он.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд.

 

Как в программе тестирования определяется экземпляр устройства, с которым она должна работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по моему через VID и PID

int BulkDevice::TestDevice()

{

if(!OK())

return 0;

 

SendPacketGETID rq;

if(Dio(IOCTL_GET_CONFIG, &rq, sizeof(rq), &rq, sizeof(rq)) <= 0)

return 0;

 

if((rq.m_nVID != VENDOR_ID && rq.m_nVID != VENDOR_ID1) ||

(rq.m_nPID != BULK1_PID && rq.m_nPID != BULK2_PID))

return 0;

 

return rq.m_nPID & 0xFFFF;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

похоже, что нашли причину, при ближайшем рассмотрении кода приложения.

 

мдас...надо осваивать более высокий уровень программирования :(

 

Тему можно закрыть, Всем спасибо, огромное за содействие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ, а вот у меня имеются отладочные платы AVR32 с usb (2 шт). Назначаю им уникальные VID PID, инф файл по аналогии сделал, что был выше. Драйвер беру из NTDDK - bulkusb.sys. Пытаюсь подрубить два устройства на один драйвер. В системе установка проходит, висят оба устройства в диспетчере, дебагвью показывает отладку для каждого из устройств при подключении. Вроде все хорошо, пока не вытащишь одно из устройств из порта - тут же синий экран и перезагруз. При работе только с одним устройствам - и подцепляется, и отцепляется корректно. В чем особенность драйвера для работы на два (или более) устройств, кто подскажет? Полагаю, что обработка surprise_remove или просто remove такова, что выгружает полностью драйвер из системы (это мои догадки). Повторяю, инф файл идентичен тому, что выше в теме. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот наткнулся на IRP_MN_QUERY_DEVICE_RELATIONS и обработка REMOVAL_RELATIONS. В bulkusb от NTDDK этих обработчиков нету. Возможно это есть решение моего вопроса. Кто знает, как это работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...