dead_cell 0 7 февраля, 2008 Опубликовано 7 февраля, 2008 · Жалоба добрый день. собрал я устройство с bulk обменом. когда устройство одно сидит на шине, то все хорошо. как только два устройства сажаю, то работает все арвно только одно устройство через драйвер. проверял так: прошил два устройства с разными идентификаторами. сделал две программы под разные идентификаторы. подключаю устройства, тут все хорошо, винда видит оба. запускаю две проги, работает только одно устройство. что можно сделать? надо чтобы работали несколько устройств через драйвер. я в драйверах нуб. просто взял стандартный usbbulk.sys и подправил *.inf файл вот... спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a_electronic 0 7 февраля, 2008 Опубликовано 7 февраля, 2008 · Жалоба Вообще то странно, поскольку Винда создает разные экземпляры драйверов для каждого устройства с разными идентификаторами и даже с разными серийными номерами. Возможно какой то дурацкий баг в программе, либо что - то с дровами, хотя это вряд ли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dead_cell 0 7 февраля, 2008 Опубликовано 7 февраля, 2008 (изменено) · Жалоба вот и мне казалось, что по идее для каждого устройства должна быть своя копия драйвера, он же прописывается в реестр и так далее. моежт быть действительно тчо то с прогой. а может быть надо что то прописать дополнительное в инф файл? Изменено 7 февраля, 2008 пользователем lazarev andrey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a_electronic 0 7 февраля, 2008 Опубликовано 7 февраля, 2008 · Жалоба Дополнительное не надо. Винда ищет драйвер по идентификатору устройства - PID & VID, и потом проверяет серийник - если новый, то она создает новый экземпляр драйвера. Это легко проверить, делает ли она это, если сменить серийник ыв девайсе и воткнуть в ЮСБ. Тогда Винда как бы поставит новые дрова. Вопрос в том, как прога - находит ли она требуемый девайс на шине и потом - получает ли она на него дескриптор. То есть - если есть сбой, то в каком он месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dead_cell 0 8 февраля, 2008 Опубликовано 8 февраля, 2008 · Жалоба серийного номера в дескрипторе не предусмотрено, предусмотрены разные PID. в inf - файле прописаны несколько PID. может быть в этом дело? может надо делать для каждого отдельного устройства свой inf - файл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a_electronic 0 8 февраля, 2008 Опубликовано 8 февраля, 2008 · Жалоба Серийник входит в дескриптор - вот пример свойств устройства в системе. USB\VID_1С37&PID_00A4\A0000001 А вот насчет инфа - не знаю, я пользовал разные инфы для разных устройств. все таки непонятно. как прога получает дескриптор на устройство?. На чем сделан девайс и что за драйвер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexkok 0 11 февраля, 2008 Опубликовано 11 февраля, 2008 · Жалоба серийного номера в дескрипторе не предусмотрено, предусмотрены разные 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dead_cell 0 21 марта, 2008 Опубликовано 21 марта, 2008 (изменено) · Жалоба снова стало актуально. устройтсво сделано на 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 ;========================================================================= ну это я взял готовый инф и подправил немного. драйвер я прикрепил. может что надо подправить в инф-файле? Изменено 21 марта, 2008 пользователем lazarev andrey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 21 марта, 2008 Опубликовано 21 марта, 2008 (изменено) · Жалоба Попытаюсь оказать вам посильную помощь, но сначаля вопросы: 1. "Стандартный USBBulk.sys" - драйвер из DDK bulkusb.sys или из DriverStudio usbbulk.sys ? 2. Какой программой для тестирования пользуетесь? 3. В секции [DrivertFiles.Inf] указан atmel.inf? Откуда и для чего этот файл? Изменено 21 марта, 2008 пользователем Седой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dead_cell 0 24 марта, 2008 Опубликовано 24 марта, 2008 · Жалоба 1. драйвер взяли с диска, который был с платой евалборда at89c5131 (разработчики не выходят на связь). 2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд. 3. atmel.inf - текст файла приведен выше. это он. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 24 марта, 2008 Опубликовано 24 марта, 2008 · Жалоба 2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд. Как в программе тестирования определяется экземпляр устройства, с которым она должна работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dead_cell 0 24 марта, 2008 Опубликовано 24 марта, 2008 · Жалоба по моему через 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dead_cell 0 24 марта, 2008 Опубликовано 24 марта, 2008 · Жалоба похоже, что нашли причину, при ближайшем рассмотрении кода приложения. мдас...надо осваивать более высокий уровень программирования :( Тему можно закрыть, Всем спасибо, огромное за содействие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artvorec 0 17 мая, 2011 Опубликовано 17 мая, 2011 · Жалоба Народ, а вот у меня имеются отладочные платы AVR32 с usb (2 шт). Назначаю им уникальные VID PID, инф файл по аналогии сделал, что был выше. Драйвер беру из NTDDK - bulkusb.sys. Пытаюсь подрубить два устройства на один драйвер. В системе установка проходит, висят оба устройства в диспетчере, дебагвью показывает отладку для каждого из устройств при подключении. Вроде все хорошо, пока не вытащишь одно из устройств из порта - тут же синий экран и перезагруз. При работе только с одним устройствам - и подцепляется, и отцепляется корректно. В чем особенность драйвера для работы на два (или более) устройств, кто подскажет? Полагаю, что обработка surprise_remove или просто remove такова, что выгружает полностью драйвер из системы (это мои догадки). Повторяю, инф файл идентичен тому, что выше в теме. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artvorec 0 18 мая, 2011 Опубликовано 18 мая, 2011 · Жалоба Вот наткнулся на IRP_MN_QUERY_DEVICE_RELATIONS и обработка REMOVAL_RELATIONS. В bulkusb от NTDDK этих обработчиков нету. Возможно это есть решение моего вопроса. Кто знает, как это работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться