Здравствуйте !
Потребовалось организовать передачу массивов данных размером в 1КБ с девайса в хост.
Подсмотрел на easyelectronics-e у
Ezhik.
Посидел, подрихтовал под свою плату.
Избавился от ненужных двух ендпоинтов.
В общем - завелось и поехало. USBTrace прекрасно видит это устройство, видит два (не считая нулевой) ендпоинта.
Написал простенькую программульку в VisualStudio на C# с использованием
LibUsbDotNet.
Всё-равно что отправить девайсу - он должен вернуть массив в 1КБ.
Поэтому на девайсе не проверяю, что пришло...
Всё ничего... только не могу отловить передачу этого массива.
USBTrace не видит фрагментов по 1КБ.
Но в прикладной программке иногда пробегает что-то похожее на правду в перемешку с ерундой.
Кто использовал bulk - поскажите - где грабли ?
PS: По CDC передавал - проблем нет. Но хотелось уйти от COM-порта.
Код:
|
// process the request
int usb_handle_command() {
GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); //LED On
USB_SIL_Write(EP1_IN, &fr[ptr], 1024);
SetEPTxValid(ENDP1);
ptr++;
if ( ptr › FRAMESIZE-1 ) ptr = 0;
GPIO_ResetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); // LED Off
} |
Код:
|
// Callback for endpoint 2.
void EP2_OUT_Callback(void)
{
SetEPRxStatus(ENDP2, EP_RX_VALID);
// process the request
usb_handle_command();
} |
C#
Код:
|
private void timer1_Tick(object sender, EventArgs e)
{
int n;
byte[] buf = null;
buf = new byte[1024];
// Если порт доступен - запрашиваем data frame с внешнего устройства
if (MyUsbDevice.IsOpen)
{
reader.ReadFlush();
writer.Write("r",0,1,10, out n);
ErrorCode ec = reader.Read(buf, 0, 1024, 100, out n);
if ( true /* n == 1024 */)
{
label4.Text = ec.ToString();
Series plot = chart1.Series[0];
// Отчищаем график
plot.Points.Clear();
// Рисуем график
for (int i = 0; i ‹ 1024; i++)
{
plot.Points.AddXY(i, buf[i]);
}
}
else
{
dropframes++;
label4.Text = dropframes.ToString();
}
}
} |
В C#-ом коде по выходу из reader.Read(buf, 0, 1024, 100, out n), n = 0 и статус = Succes.
Но изредка в массиве данные, похожие на правду. Но кусочно.
Прикладываю проект в CoCox
тут
и проект в VS
тут