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

 
 
> Проблема с искажением данных на USB
Sevens
сообщение Oct 6 2006, 12:22
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 5-08-06
Пользователь №: 19 337



Возникла такая проблема: есть устройство на AT89C5131, написана прошивка и как казалось драйвер. Передаю данные устройству - массив 32 байта, заполненный "1" в аски коде (т.е. цифрами 49)

Шлю штук 20 таких массивов, смотрю что принимается. Почему-то иногда искажаются принимаемы данные, причем на одни и те же цифры 188,69. И в разных местах. Драйвер написан с помощью Driver Studio, вот процедура записи в устройство:

NTSTATUS CandDV2Device::CANDDV2_IOCTL_804_Handler(KIrp I)
{

DbgPrint("CandDDriverDevice::Write START");

NTSTATUS status = STATUS_SUCCESS;


PUCHAR pBuffer = (PUCHAR)I.IoctlBuffer();

ULONG dwTotalSize = I.IoctlInputBufferSize(CURRENT);
ULONG dwBytesSent = 0;


ULONG dwMaxSize = m_Endpoint4OUT.MaximumTransferSize();
DbgPrint("CandDV2Device::CANDDV2_IOCTL_804_Handler (write to EP4) START");

DbgPrint(" Write: Requested=%d, MaxSize=%d", dwTotalSize, dwMaxSize);

if(dwTotalSize==0)
{
return status;
}

if (dwTotalSize > dwMaxSize)
{
dwTotalSize = dwMaxSize;
}


DbgPrint("Endpoint 4");

for (int i=0; i<(int)dwTotalSize; i++)
DbgPrint("write buffer: %d", ((PCHAR)(pBuffer))[i] );

PURB pUrb = m_Endpoint4OUT.BuildBulkTransfer(
pBuffer, // Where is data coming from?
dwTotalSize, // How much data to write?
FALSE // Short OK
);

if (pUrb == NULL)
{
I.Information() = 0;
DbgPrint("ERROR: BuildInterrupt");
return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES);
}

// Submit the URB to our USB device, synchronously - say less is OK
pUrb->UrbBulkOrInterruptTransfer.TransferFlags =
(USBD_TRANSFER_DIRECTION_OUT);

if (!m_Endpoint4OUT.IsOpen())
{
I.Information() = 0;
DbgPrint("ERROR: m_Endpoint4OUT is not open!");
return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES);
}

status = m_Endpoint4OUT.SubmitUrb(pUrb);

dwBytesSent = pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;


delete pUrb;

I.Information() = dwBytesSent;

DbgPrint("CandDV2Device::CANDDV2_IOCTL_804_Handler END");
return status;

}

В чём может быть проблема?

Сообщение отредактировал Sevens - Oct 6 2006, 13:08
Go to the top of the page
 
+Quote Post



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

 


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


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