Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cypress(C7C86013A)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Игорь_M
Подскажите, пожалуйста, как написать программу для связи с этим контроллером через ПК с использованием CyAPI. Конечные точки типа Bulk.
Устройство успешно находится, правильно определяются VID и PID.А при попвтке запустить обмен dev->BulkOutEndPoint->BeginDataXfer() возникает ошибка обращения по неправильному адресу.
Konst_777
Похоже, что речь идет о CY7C68013A (FX2LP) - контроллере USB фирмы Cypress. smile.gif
Программирование для FX2LP подробно обсуждается в подфоруме "RS232/LPT/USB/PCMCIA/FireWire" "Форума по интерфейсам"
Игорь_M
Спасибо!Что-то сразу не заметил!
Игорь_M
Тем не менее не получается решить проблему(Не идет передача данных, даже если пользоваться примером:
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);Может все же как-то надо предварительно настроить устройство перед тем как его открыть?Может надо добавить какие-то строки в код этого примера?Как выбрать конечную точку и ее свойства, с которой необходимо работать?
Konst_777
Если не принципиально использование C++, попробуйте рассмотреть примеры из USB Development tools for Visual Studio 2005 and .NET 2.0/3.0 для C#.
Игорь_M
//---------------------------------------------------------------------------
#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# не знаю) вроде как там (с точки зрения сути). Вобщем опять устройство обнаруживается, но обмена нет(
Konst_777
Цитата(Игорь_M @ Dec 17 2008, 18:39) *
...
В общих чертах вот он код. Где тут ошибка или Что надо добавить?
Посмотрел примеры на C#.Реализовал (на C++, так как C# не знаю) вроде как там (с точки зрения сути). Вобщем опять устройство обнаруживается, но обмена нет(

Выложите RAR-архивом проекты для Visual Studio и FX2LP. Не обещаю, что это будет быстро, но, в свободное время - посмотрю.
Игорь_M
Да я вобще в Билдере работаю...потараюсь перевести....там вроде есть что-то такое в меню.Спасибо!Вот только сдам зачет и выложу обязательно....
Игорь_M
Необходимость в помощи отпала.Проблема решилась следующим образом: При вызове конструктора класса CCyUSBDevice вызывается и метод ->Open(0), а в моей программе этот Open(0) вызывался в цикле еще раз, что приводило к страшным последствиям(все свойства объекта класса CCyUSBDevice сбивались).После внесения соответствующих корректив, обмен данными был налажен.
Спасибо за помощь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.