|
|
|
проблема USB cy7c68013a, инициализация устройства |
|
|
|
Sep 10 2007, 15:46
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Здавствуйте люди! Подскажите кто может, в чем проблема при выделении пямяти под структуру СyUSBdevice уже месяц бьюсь, не пойму в чем дело. СТУДИЯ видит устройство (су7с68013а) данные передаються и принимаються, я подключил библиотеку СYUsb.Lib , СYUsb.h к проекту, компилируеться нормально, но на строке s_usb_device = new CCyUSBDevice();------ сообщение "Access vilation at address 004048e1 in module "Project1" write address 0017f62c" Заранее благодарен, Алексей. Код c++ Bulder
void* usb_init(void) { int i = 2; CCyUSBDevice*s_usb_device = new CCyUSBDevice();
// open my device if (s_usb_device->DeviceCount()) { // search for all connected devices, and add the one that has the right name for (i = 0; i < s_usb_device->DeviceCount(); i++) { s_usb_device->Open(i); if(strcmp (USB_DEVICE_NAME, s_usb_device->DeviceName) == 0) break; s_usb_device->Close(); } } else { // Cannot find my device return NULL; }
if (!s_usb_device->IsOpen()) { // Could not open my device return NULL; }
delete s_usb_device;
}
|
|
|
|
|
Sep 11 2007, 06:18
|
Частый гость
Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874
|
Звезду убери Код CCyUSBDevice s_usb_device = new CCyUSBDevice();
|
|
|
|
|
Sep 11 2007, 15:00
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(Warlord @ Sep 11 2007, 09:18) Звезду убери Код CCyUSBDevice s_usb_device = new CCyUSBDevice(); Не помогает, все также, вот только при пошаговом исполнении, если просмотреть debug inspect переменную s_usb_device, до исполнения строки Код CCyUSBDevice s_usb_device = new CCyUSBDevice() поля настроек стали заполнеными, а раньше были не определены, может я что не определил перед выделением памяти под CYUsbdevice???
|
|
|
|
|
Sep 12 2007, 07:59
|
Частый гость
Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874
|
Да, со звездой я погорячился. Попробуй вынести переменную в глобальные. А потом вызвать конструктор. Код CCyUSBDevice *USBDevice;
main() { ... USBDevice = new CCyUSBDevice(); .... }
|
|
|
|
|
Sep 12 2007, 10:01
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(Warlord @ Sep 12 2007, 10:59) Да, со звездой я погорячился. Попробуй вынести переменную в глобальные. А потом вызвать конструктор. Код CCyUSBDevice *USBDevice;
main() { ... USBDevice = new CCyUSBDevice(); .... } Вот пример того что я пытался запустить Код #include <vcl.h> #pragma hdrstop #include "CyAPI.h"
//---------------------------------------------------------------------------
#pragma argsused CCyUSBDevice *USBDevice;
int main(int argc, char* argv[]) {
USBDevice = new CCyUSBDevice();
int devices = USBDevice->DeviceCount(); int vID, pID; int d = 0; do { USBDevice->Open(d); // Open automatically calls Close() if necessary vID = USBDevice->VendorID; pID = USBDevice->ProductID; d++; } while ((d < devices ) && (vID != 0x04b4) && (pID != 0x8613));
return 0; } пример взят из документации по CYUSB На строке USBDevice = new CCyUSBDevice(); машина начинает сильно тормозить, но сообщений никаких нет? раньше я использовал с FT245 -- ot FTDI а сейчас понадобился поток 8 Мбайт/сек Мне кажеться что чего-то не хватает для связи с драйвером CYUSB Я пробовал найти устройство через QueryDosDevice(NULL, path, PATH_SIZE); Устройсво есть но почему то 2 шт, с разными GUID??? А для чего эта функция "DeviceIoControl("??? Спасибо за ответ!!
|
|
|
|
|
Sep 12 2007, 10:57
|
Частый гость
Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874
|
Цитата(леха_настойчивый @ Sep 12 2007, 14:01) На строке USBDevice = new CCyUSBDevice(); машина начинает сильно тормозить, но сообщений никаких нет? Странно, а строка в конечном итоге проходит или нет?? Цитата(леха_настойчивый @ Sep 12 2007, 14:01) Мне кажеться что чего-то не хватает для связи с драйвером CYUSB Я пробовал найти устройство через QueryDosDevice(NULL, path, PATH_SIZE); Устройсво есть но почему то 2 шт, с разными GUID??? Ты глянь в системе, железо нормально встало?? драйвер подключился?? Драйвер CyUSB.sys?? Ты GUID часом не менял в инф файле при установке драйвера?? по QueryDosDevice нчего не скажу, не пользовался. Цитата(леха_настойчивый @ Sep 12 2007, 14:01) А для чего эта функция "DeviceIoControl("??? Посылает пакет драйверу устройства.
|
|
|
|
|
Sep 12 2007, 11:23
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(Warlord @ Sep 12 2007, 13:57) Странно, а строка в конечном итоге проходит или нет?? Ты глянь в системе, железо нормально встало?? драйвер подключился?? Драйвер CyUSB.sys?? Ты GUID часом не менял в инф файле при установке драйвера?? по QueryDosDevice нчего не скажу, не пользовался. Посылает пакет драйверу устройства. Нет срока не проходит. Builder застрявает на ней, я подождал минутку, потом сбросил. Нет, GUID я не менял, драйвер СyUSB.sus стал нормально. USB studio купреса видит устойство, я взял за основу HEX из какогото примера у немцев ADC2USB там был HEX и прошивка для ПЗУ, все залилось, устройство появляеться сразу как CYPRESS2USB vid и pid 04в4 и 8613--- две точки Bulk -64 и isohronous 1020 все передаеться принимаеться (через USB студию cypress) есть еще одна особенность : при подключении к материнским платам ASrosk c чипом VIA 6202 контроллер сy7c68013 вообще не видиться системой, только если поставить на D- сопротивление 1,5 ком, тогда все видиться, и работает. А ВОТ к плате ASUS отлично, все как по книжке. Может в кофигурации самого контроллера чото не так??
|
|
|
|
|
Sep 12 2007, 12:19
|
Частый гость
Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874
|
Цитата(леха_настойчивый @ Sep 12 2007, 15:23) Может в кофигурации самого контроллера чото не так?? Это вряд ли, если, говоришь USB studio работает, то и твоя прога тоже будет. Ты войди в режим отладки(в самом билдере(CPU window) или лучше в стороннем) глянь, на какой функции конструктора класса прога начинает глючить. Глянь в отладчике как исполняется конструктор в USB studio. Все д.б. один в один. Сразу найдешь ошибку.
|
|
|
|
|
Sep 12 2007, 12:40
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(Warlord @ Sep 12 2007, 15:19) Это вряд ли, если, говоришь USB studio работает, то и твоя прога тоже будет. Ты войди в режим отладки(в самом билдере(CPU window) или лучше в стороннем) глянь, на какой функции конструктора класса прога начинает глючить. Глянь в отладчике как исполняется конструктор в USB studio. Все д.б. один в один. Сразу найдешь ошибку. Да это идея, спасибо большое за совет, сейчас буду пробовать!!!
|
|
|
|
|
Sep 13 2007, 06:18
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(леха_настойчивый @ Sep 12 2007, 15:40) Да это идея, спасибо большое за совет, сейчас буду пробовать!!! Привет всем! Попробовал отладчиком, так вот мой проект очень похоже обращаеться к какой-то области памяти и система выдает ошибку. До конструктора помоему дело и не доходит ??? Очень похоже на ошибку, корая возникает при нарушении границ массивов(я имею ввиду сообщение WINDOWS) вот конфигурация USB и участок CPU viem ----переменной USBDevice. Код это конфигурация USB 1.1 (fullspeed) через USBviem
Endpoint Descriptor: bEndpointAddress: 0x82 Transfer Type: Isochronous wMaxPacketSize: 0x03FC (1020) bInterval: 0x01
Configuration Descriptor: wTotalLength: 0x0029 bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x03 0x0407: "Busversorgt, kein Aufwecken" bmAttributes: 0x80 (Bus Powered ) MaxPower: 0x4B (150 Ma)
Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x01 bInterfaceClass: 0xFF bInterfaceSubClass: 0xFF bInterfaceProtocol: 0xFF iInterface: 0x04 0x0407: "Interface ohne Bandbreite, nur Bulk"
Endpoint Descriptor: bEndpointAddress: 0x82 Transfer Type: Bulk wMaxPacketSize: 0x0040 (64) bInterval: 0x00
Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x01 bNumEndpoints: 0x01 bInterfaceClass: 0xFF bInterfaceSubClass: 0xFF bInterfaceProtocol: 0xFF iInterface: 0x05
Endpoint Descriptor: bEndpointAddress: 0x82 Transfer Type: Isochronous wMaxPacketSize: 0x03FC (1020) bInterval: 0x01
===================================================================== Вот окно CPU viem
naemec_cosole.cpp.15: USBDevice = new CCyUSBDevice();///--break point 0040139C 689C090000 push $0000099c 004013A1 E866280000 call $00403c0c 004013A6 59 pop ecx 004013A7 8945FC mov [ebp-$04],eax 004013AA 85C0 test eax,eax 004013AC 7438 jz $004013e6 004013AE 66C745E81800 mov word ptr [ebp-$18],$0018 004013B4 6A01 push $01 004013B6 FF35D0404000 push dword ptr [$004040d0] 004013BC FF35CC404000 push dword ptr [$004040cc] 004013C2 FF35C8404000 push dword ptr [$004040c8] 004013C8 FF35C4404000 push dword ptr [$004040c4] 004013CE 6A00 push $00 004013D0 FF75FC push dword ptr [ebp-$04] 004013D3 E86C030000 call $00401744 /// вот на этой строке происходит сбой это значение 00401744 было в сообщении.
004013D8 83C41C add esp,$1c Не знаю, может что-то в конфигурации USB в самой системе, кстати пробовал и WIn2000, WINXP на разных машинах???
|
|
|
|
|
Sep 13 2007, 10:32
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(Warlord @ Sep 13 2007, 12:01) Собери это проект, отключив на закладке Linker галку Use dynamic RTL и выложи здесь exeшник. У меня щас есть плата с сайпресом, попробую у себя твой exeшник. А вообще надо идти по коду глубже и смотреть какая именно простейшая команда вызвала Exception. вот архив, в нем ADC2USB там HEX и т.д. и проэкт С++ Builder
Proj.rar ( 406.97 килобайт )
Кол-во скачиваний: 247
|
|
|
|
|
Sep 13 2007, 13:02
|
Местный
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894
|
С этим Cypress API есть довольно неприятная хреновина (или фича?), библиотека работает ТОЛЬКО при компиляции с Data Alignment = 8 (Quad Word), в противном случае вываливается в точности как у Вас. Чтобы не трогать проект, необходимо в CyAPI.h добавить тройку строчек с #pragma pack: Код //______________________________________________________________________________ // // Copyright (c) Cypress Semiconductor, 2003 // All rights reserved. // //______________________________________________________________________________
#ifndef CyUSBH #define CyUSBH
#pragma pack(push) #pragma pack(8)
.....
#pragma pack(pop)
#endif У меня после этого все завелось и работает без проблем независимо от data alignment
|
|
|
|
|
Sep 13 2007, 13:46
|
Участник
Группа: Новичок
Сообщений: 15
Регистрация: 27-04-07
Пользователь №: 27 348
|
Цитата(Warlord @ Sep 13 2007, 15:07) У тебя какой Билдер?? Явно не шестой. EXe-шник не запускается - при сборке галку не убрал. Проект Билдера пустой =\ Сдается мне, что библиотека не подходит под твою версию Билдера. У меня не шестой, у меня Borland Developer Studio Borland® C++Builder® Preview for Microsoft® Windows™ Version 10.0.2151.25345 Copyright © 2005 Borland® Software Corporation. All Rights Reserved. НЕУЖЕЛИ ИЗ-ЗА ЭТОГО ????????, у меня есть шестой, может поробовать, мне казалось этот лучше? тут все борландовские примочки есть? я тоже заметил что если взять библиотеку VC++ и подсунуть ему то реакция без изменений. ПРОШУ ПРОЩЕНИЯ я не заметил что путь срр изменен. Вот опять архив, галка убрана. Цитата(Warlord @ Sep 13 2007, 15:07) У тебя какой Билдер?? Явно не шестой. EXe-шник не запускается - при сборке галку не убрал. Проект Билдера пустой =\ Сдается мне, что библиотека не подходит под твою версию Билдера. У меня не шестой, у меня Borland Developer Studio Borland® C++Builder® Preview for Microsoft® Windows™ Version 10.0.2151.25345 Copyright © 2005 Borland® Software Corporation. All Rights Reserved. НЕУЖЕЛИ ИЗ-ЗА ЭТОГО ????????, у меня есть шестой, может поробовать, мне казалось этот лучше? тут все борландовские примочки есть? я тоже заметил что если взять библиотеку VC++ и подсунуть ему то реакция без изменений. ПРОШУ ПРОЩЕНИЯ я не заметил что путь срр изменен. Вот опять архив, галка убрана. Цитата(-Al- @ Sep 13 2007, 16:02) С этим Cypress API есть довольно неприятная хреновина (или фича?), библиотека работает ТОЛЬКО при компиляции с Data Alignment = 8 (Quad Word), в противном случае вываливается в точности как у Вас. Чтобы не трогать проект, необходимо в CyAPI.h добавить тройку строчек с #pragma pack: Код //______________________________________________________________________________ // // Copyright (c) Cypress Semiconductor, 2003 // All rights reserved. // //______________________________________________________________________________
#ifndef CyUSBH #define CyUSBH
#pragma pack(push) #pragma pack(8)
.....
#pragma pack(pop)
#endif У меня после этого все завелось и работает без проблем независимо от data alignment я посмотрел в настройках у меня стоит Data Alignment = 8 (Quad Word) ???
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|