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

 
 
 
Reply to this topicStart new topic
> Обмен данными по USB, Как открыть USB порт программно и производить обмен данными по нему?
Politeh
сообщение Jun 17 2009, 20:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 467
Регистрация: 7-06-06
Пользователь №: 17 829



Добрый день!

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

SetupDiGetClassDevs
SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail
CreateFile
WriteFile/ReadFile

То все работает за исключением WriteFile/ReadFile.

У Microsoft сказано, что надо делать еще WinUsb_Initialize, чтобы получит WinUSB handle и далее обмениваться данными посредством WinUsb_WritePipe/WinUsb_ReadPipe. Но не ясно, что надо сделать, чтобы данная функция (WinUsb_Initialize) выполнилась успешно.

Спасибо.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jun 18 2009, 07:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



USB-порт еще ни о чем не говорит. Какой класс USB-устройства? Если один из стандартных, поддерживаемых виндюками, то обращение должно быть согласовано с классом. Не исключено, что даже при поддержке класса потребуется свой inf-файл, чтобы стандартный драйвер установился (как, например, для CDC, чтобы получился COM-port). Если устройство нестандартное, то пока свой драйвер не напишите, ничего работать не будет.
Go to the top of the page
 
+Quote Post
Politeh
сообщение Jun 19 2009, 11:49
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 467
Регистрация: 7-06-06
Пользователь №: 17 829



Используется устройство с USB CDC.
Да, описанные мною выше функции работы с USB устройством, работать не будут, т.к. они работают с драйвером winusb.sys. В данном же случае, для работы с CDC потребуется использовать свой inf c установкой usbser.sys драйвера. И далее можно будет работать с подключаемым девайсом, как с виртуальным COM портом, обычными COM-овскими функциями CreateFile/WriteFile/ReadFile.
Однако возникла проблема при установке usbser.sys драйвера.
USB CDC на устройстве реализовано на микрочипе Atmel at91sam7s256. Подключаю девайс к компу, оно увиделось и Windows просит установить нужный драйвер, в диалоге установки выбираю «Установить с диска» и указываю нужный inf файл, жму OK, но появляется сообщение «В указанном месте отсутствуют сведения об оборудовании».
Inf файл взят стандартный, из документации с сайта Atmel
//**************************************************************************//
[Version] ; Version section
Signature="$Chicago$" ; All Windows versions
Class=Ports ; This is a serial port driver
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ; Associated GUID
Provider=%ATMEL% ; Driver is provided by ATMEL
DriverVer=09/12/2006,1.1.1.5 ; Driver version 1.1.1.5 published on 23 February 2007
[DestinationDirs] ; DestinationDirs section
DefaultDestDir=12 ; Default install directory is \drivers or \IOSubSys
[Manufacturer] ; Manufacturer section
%ATMEL%=AtmelMfg ; Only one manufacturer (ATMEL), models section is named
; AtmelMfg
[AtmelMfg] ; Models section corresponding to ATMEL
%USBtoSerialConverter%=USBtoSer.Install, USB\VID_03EB&PID_6119
; Identifies a device with ATMEL Vendor ID (03EBh) and
; Product ID equal to 6119h. Corresponding Install section
; is named USBtoSer.Install
[USBtoSer.Install]; Install section
include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=USBtoSer.AddReg ; Registry keys to add are listed in USBtoSer.AddReg
[USBtoSer.AddReg] ; AddReg section
HKR,,DevLoader,,*ntkern ;
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[USBtoSer.Install.Services] ; Services section
AddService=usbser,0x00000002,USBtoSer.AddService
; Assign usbser as the PnP driver for the device
[USBtoSer.AddService] ; Service install section
DisplayName=%USBSer% ; Name of the serial driver
ServiceType=1 ; Service kernel driver
StartType=3 ; Driver is started by the PnP manager
ErrorControl=1 ; Warn about errors
ServiceBinary=%12%\usbser.sys ; Driver filename
[Strings] ; Strings section
ATMEL="ATMEL Corp." ; String value for the ATMEL symbol
USBtoSerialConverter="AT91 USB to Serial Converter" ; String value for the USBtoSerialConverter symbol
USBSer="USB Serial Driver" ; String value for the USBSer symbol
//***********************************************************************//
Прошивка для микрочипа взята также с сайта Atmel.
Для интереса попробовал установить этот inf на обычную флэшку (Mass Storage), драйвер usbser.sys под нее встал, в inf файле потребовалось лишь изменить vendor и product id на номера, которые у флэши (USB\VID_VVVV&PID_PPPP). В диспетчере устройств название флэшки переместилось из раздела «… USB» в раздел «Порты (COM и LPT)», как новый COM порт, на названии, конечно, желтый значок (- драйвер с оборудованием работает некорректно), но факт установки был.
В чем может быть проблема, где еще смотреть:
- использую некорректные VID и PID
- неправильно сконфигурирован код прошивки
- нестандартное оборудование, нужно писать свой драйвер

(
вот Device Description:
const USBDeviceDescriptor usbDeviceDescriptor = {

sizeof(USBDeviceDescriptor),
USBGenericDescriptor_DEVICE,
USBDeviceDescriptor_USB2_00,
0, // No device class code
0, // No device subclass code
0, // No device protocol code
BOARD_USB_ENDPOINTS_MAXPACKETSIZE(0),
0x03EB, // Atmel vendor ID
0x6119, //0001;// Product ID
0x0001, // Product release 0.01
0, // No manufacturer string descriptor
0, // No product string descriptor
0, // No serial number string descriptor
1 // One possible configuration
};
)

Спасибо.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jun 19 2009, 16:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



А класс CDC где? Или он в интерфейсе указан?
Go to the top of the page
 
+Quote Post
Politeh
сообщение Jun 22 2009, 13:00
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 467
Регистрация: 7-06-06
Пользователь №: 17 829



Цитата(Alex11 @ Jun 19 2009, 20:28) *
А класс CDC где? Или он в интерфейсе указан?


Изменил значения под CDC класс и в DeviceDescription и в Interface согласно указанным значениям в msdn
(
- http://msdn.microsoft.com/en-us/library/aa919760.aspx
- http://msdn.microsoft.com/en-us/library/aa930780.aspx
)

/// Device descriptor.
const USBDeviceDescriptor usbDeviceDescriptor = {

sizeof(USBDeviceDescriptor),
USBGenericDescriptor_DEVICE,
USBDeviceDescriptor_USB2_00,
0x2, // No device class code
0, // No device subclass code
0, // No device protocol code
BOARD_USB_ENDPOINTS_MAXPACKETSIZE(0),
0x03EB, // Atmel vendor ID
0x6119, //0001;// Product ID
0x0001, // Product release 0.01
0, // No manufacturer string descriptor
0, // No product string descriptor
0, // No serial number string descriptor
1 // One possible configuration
};

/// Configuration descriptors.
const struct SimpleConfigurationDescriptors configurationDescriptors = {

// Configuration descriptor
{
sizeof(USBConfigurationDescriptor),
USBGenericDescriptor_CONFIGURATION,
sizeof(struct SimpleConfigurationDescriptors),
0, // No interface in this configuration
1, // This is configuration #1
0, // No string descriptor for this configuration
BOARD_USB_BMATTRIBUTES,
USBConfigurationDescriptor_POWER(100)
},
// Interface descriptor
{
sizeof(USBInterfaceDescriptor),
USBGenericDescriptor_INTERFACE,
0, // This is interface #0
0, // This is setting #0 for interface
0, // Interface has no endpoint
0x02, // No interface class code
0x02, // No interface subclass code
0xFF, // No interface protocol code
0, // No string descriptor
}
};

Однако эффект нулевой!
Может еще каки поля не определены?

Спасибо.
Go to the top of the page
 
+Quote Post

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

 


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


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