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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
lazarev andrey
сообщение Feb 7 2008, 16:17
Сообщение #1


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



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

проверял так:
прошил два устройства с разными идентификаторами.
сделал две программы под разные идентификаторы.
подключаю устройства, тут все хорошо, винда видит оба.

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

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

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

я в драйверах нуб.
просто взял стандартный usbbulk.sys и подправил *.inf файл
вот...
спасибо.
Go to the top of the page
 
+Quote Post
oran-be
сообщение Feb 7 2008, 16:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Вообще то странно, поскольку Винда создает разные экземпляры драйверов для каждого устройства с разными идентификаторами и даже с разными серийными номерами. Возможно какой то дурацкий баг в программе, либо что - то с дровами, хотя это вряд ли.
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Feb 7 2008, 16:42
Сообщение #3


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



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

Сообщение отредактировал lazarev andrey - Feb 7 2008, 16:43
Go to the top of the page
 
+Quote Post
oran-be
сообщение Feb 7 2008, 17:36
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Дополнительное не надо. Винда ищет драйвер по идентификатору устройства - PID & VID, и потом проверяет серийник - если новый, то она создает новый экземпляр драйвера. Это легко проверить, делает ли она это, если сменить серийник ыв девайсе и воткнуть в ЮСБ. Тогда Винда как бы поставит новые дрова.
Вопрос в том, как прога - находит ли она требуемый девайс на шине и потом - получает ли она на него дескриптор. То есть - если есть сбой, то в каком он месте.
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Feb 8 2008, 07:41
Сообщение #5


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



серийного номера в дескрипторе не предусмотрено, предусмотрены разные PID.
в inf - файле прописаны несколько PID. может быть в этом дело?
может надо делать для каждого отдельного устройства свой inf - файл?
Go to the top of the page
 
+Quote Post
oran-be
сообщение Feb 8 2008, 15:22
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



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

USB\VID_1С37&PID_00A4\A0000001

А вот насчет инфа - не знаю, я пользовал разные инфы для разных устройств. все таки непонятно. как прога получает дескриптор на устройство?. На чем сделан девайс и что за драйвер?
Go to the top of the page
 
+Quote Post
alexkok
сообщение Feb 11 2008, 01:11
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(lazarev andrey @ Feb 8 2008, 10:41) *
серийного номера в дескрипторе не предусмотрено, предусмотрены разные 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.


--------------------
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Mar 21 2008, 12:19
Сообщение #8


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



снова стало актуально.
устройтсво сделано на 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 - Mar 21 2008, 12:23
Go to the top of the page
 
+Quote Post
Седой
сообщение Mar 21 2008, 20:13
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



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

1. "Стандартный USBBulk.sys" - драйвер из DDK bulkusb.sys или из DriverStudio usbbulk.sys ?
2. Какой программой для тестирования пользуетесь?
3. В секции [DrivertFiles.Inf] указан atmel.inf? Откуда и для чего этот файл?

Сообщение отредактировал Седой - Mar 21 2008, 20:35
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Mar 24 2008, 07:14
Сообщение #10


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



1. драйвер взяли с диска, который был с платой евалборда at89c5131 (разработчики не выходят на связь).
2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд.
3. atmel.inf - текст файла приведен выше. это он.
Go to the top of the page
 
+Quote Post
Седой
сообщение Mar 24 2008, 09:22
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(lazarev andrey @ Mar 24 2008, 12:14) *
2. программа для тестирования опять же взята из исходника, но переправленная для наших нужд.


Как в программе тестирования определяется экземпляр устройства, с которым она должна работать?
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Mar 24 2008, 09:56
Сообщение #12


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



по моему через 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;
}
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Mar 24 2008, 15:00
Сообщение #13


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



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

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

Тему можно закрыть, Всем спасибо, огромное за содействие.
Go to the top of the page
 
+Quote Post
Тёмыч
сообщение May 17 2011, 15:36
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069



Народ, а вот у меня имеются отладочные платы AVR32 с usb (2 шт). Назначаю им уникальные VID PID, инф файл по аналогии сделал, что был выше. Драйвер беру из NTDDK - bulkusb.sys. Пытаюсь подрубить два устройства на один драйвер. В системе установка проходит, висят оба устройства в диспетчере, дебагвью показывает отладку для каждого из устройств при подключении. Вроде все хорошо, пока не вытащишь одно из устройств из порта - тут же синий экран и перезагруз. При работе только с одним устройствам - и подцепляется, и отцепляется корректно. В чем особенность драйвера для работы на два (или более) устройств, кто подскажет? Полагаю, что обработка surprise_remove или просто remove такова, что выгружает полностью драйвер из системы (это мои догадки). Повторяю, инф файл идентичен тому, что выше в теме. Спасибо.
Go to the top of the page
 
+Quote Post
Тёмыч
сообщение May 18 2011, 15:13
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 17-05-11
Пользователь №: 65 069



Вот наткнулся на IRP_MN_QUERY_DEVICE_RELATIONS и обработка REMOVAL_RELATIONS. В bulkusb от NTDDK этих обработчиков нету. Возможно это есть решение моего вопроса. Кто знает, как это работает?
Go to the top of the page
 
+Quote Post

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

 


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


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