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

 
 
 
Reply to this topicStart new topic
> Cypress(C7C86013A), Программа для C7C86013A
Игорь_M
сообщение Nov 27 2008, 18:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632



Подскажите, пожалуйста, как написать программу для связи с этим контроллером через ПК с использованием CyAPI. Конечные точки типа Bulk.
Устройство успешно находится, правильно определяются VID и PID.А при попвтке запустить обмен dev->BulkOutEndPoint->BeginDataXfer() возникает ошибка обращения по неправильному адресу.

Сообщение отредактировал Игорь_M - Nov 27 2008, 18:35
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Nov 28 2008, 18:22
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Похоже, что речь идет о CY7C68013A (FX2LP) - контроллере USB фирмы Cypress. smile.gif
Программирование для FX2LP подробно обсуждается в подфоруме "RS232/LPT/USB/PCMCIA/FireWire" "Форума по интерфейсам"
Go to the top of the page
 
+Quote Post
Игорь_M
сообщение Nov 29 2008, 07:40
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632



Спасибо!Что-то сразу не заметил!
Go to the top of the page
 
+Quote Post
Игорь_M
сообщение Dec 16 2008, 14:21
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632



Тем не менее не получается решить проблему(Не идет передача данных, даже если пользоваться примером:
CCyUSBDevice *USBDevice = new CCyUSBDevice(Handle);
OVERLAPPED outOvLap, inOvLap;
outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT");
inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
char inBuf[128];
ZeroMemory(inBuf, 128);
char buffer[128];
LONG length = 128;
// Just to be cute, request the return data before initiating the loopback
UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length,
&inOvLap);
UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(buffer, length,
&outOvLap);
USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);
USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);
USBDevice->BulkOutEndPt->FinishDataXfer(buffer, length, &outOvLap,outContext);
USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext);
CloseHandle(outOvLap.hEvent);
CloseHandle(inOvLap.hEvent);Может все же как-то надо предварительно настроить устройство перед тем как его открыть?Может надо добавить какие-то строки в код этого примера?Как выбрать конечную точку и ее свойства, с которой необходимо работать?
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Dec 16 2008, 20:47
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Если не принципиально использование C++, попробуйте рассмотреть примеры из USB Development tools for Visual Studio 2005 and .NET 2.0/3.0 для C#.
Go to the top of the page
 
+Quote Post
Игорь_M
сообщение Dec 17 2008, 14:39
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632



//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <cyapi.h>
#include "Unit1.h"
#include <iError.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
CCyUSBDevice* dev;
GUID CypGuid = {0xae18aa60, 0x7f6a, 0x11d4, 0x97, 0xdd, 0x0, 0x1, 0x2, 0x29, 0xb9, 0x59};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
dev = new CCyUSBDevice(0,CypGuid,1);
int MaxDevCount = dev->DeviceCount();
for(int DevCount=1;DevCount<=MaxDevCount;DevCount++)
{
dev->Open(DevCount);
dev->Reset();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
dev->Close();
dev->~CCyUSBDevice();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define BUFFER_SIZE 62
#define TIMEOUT 1000
long len = BUFFER_SIZE;
unsigned char* OutBuf = new unsigned char[BUFFER_SIZE];
memset(OutBuf,0xAA,BUFFER_SIZE);
unsigned char* InBuf = new unsigned char[BUFFER_SIZE];
memset(InBuf,0x00,BUFFER_SIZE);
CCyIsoPktInfo* inf = new CCyIsoPktInfo;
CCyBulkEndPoint* OutEP = new CCyBulkEndPoint;
CCyBulkEndPoint* InEP = new CCyBulkEndPoint;
OutEP = (CCyBulkEndPoint*)dev->EndPointOf(0x02);
InEP = (CCyBulkEndPoint*)dev->EndPointOf(0x86);
OutEP->TimeOut = 1000;
InEP->TimeOut = 1000;
OutEP->XferData(OutBuf,len,inf);
InEP->XferData(InBuf,len,inf);
for(int i=0;i<BUFFER_SIZE;i++)
{
Form1->Memo1->Lines->Add(IntToStr(i)+"-"+IntToStr(InBuf[i]));
}
}
//---------------------------------------------------------------------------


В общих чертах вот он код. Где тут ошибка или Что надо добавить?
Посмотрел примеры на C#.Реализовал (на C++, так как C# не знаю) вроде как там (с точки зрения сути). Вобщем опять устройство обнаруживается, но обмена нет(
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Dec 17 2008, 19:54
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Игорь_M @ Dec 17 2008, 18:39) *
...
В общих чертах вот он код. Где тут ошибка или Что надо добавить?
Посмотрел примеры на C#.Реализовал (на C++, так как C# не знаю) вроде как там (с точки зрения сути). Вобщем опять устройство обнаруживается, но обмена нет(

Выложите RAR-архивом проекты для Visual Studio и FX2LP. Не обещаю, что это будет быстро, но, в свободное время - посмотрю.
Go to the top of the page
 
+Quote Post
Игорь_M
сообщение Dec 17 2008, 19:57
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632



Да я вобще в Билдере работаю...потараюсь перевести....там вроде есть что-то такое в меню.Спасибо!Вот только сдам зачет и выложу обязательно....
Go to the top of the page
 
+Quote Post
Игорь_M
сообщение Dec 22 2008, 21:15
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632



Необходимость в помощи отпала.Проблема решилась следующим образом: При вызове конструктора класса CCyUSBDevice вызывается и метод ->Open(0), а в моей программе этот Open(0) вызывался в цикле еще раз, что приводило к страшным последствиям(все свойства объекта класса CCyUSBDevice сбивались).После внесения соответствующих корректив, обмен данными был налажен.
Спасибо за помощь!
Go to the top of the page
 
+Quote Post

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

 


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


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