下位机里的程序是修改的keil下的HID的例子。
首先,我将0端点的最大包改成了64,从bus hound读取到的还是8,好像没有起作用。
然后修改了,设备类等描述符为0xFF表示为自定义设备。
将1端点,设置为IN,bulk模式,缓冲区大小64.
在1端点的处理函数中,不进行数据复制,仅对数据长度赋值64后使能端点。
然后使用libusb的inf软件安装驱动,可以识别到设备。
但是从bus hound 看,直接接台式机机箱,没有被挂接到2.0总线下,速度只有33kB。我通过一个外接2.0集线器,然后就被挂接到2.0总线速度达到300kB。
IN端点1的处理函数如下,去掉了数据复制过程。
void USB_EndPoint1 (U32 event) {
switch (event) {
case USB_EVT_IN:
//GetInReport();
//USB_WriteEP(HID_EP_IN, InReport,64);
(pBUF_DSCR + (HID_EP_IN&0x0F))->COUNT_TX = 64;
EP_Status(HID_EP_IN, EP_TX_VALID);
break;
}
}
上位机是qt的一个程序,就是循环不停读取。
void MainWindow::button(void)
{
char data[64];
int k = 100;
while(1)
{
data[1] = usb_bulk_read(this->open,0x81,data,64,0);
qDebug("error setting config #: %s\n",usb_strerror());
}
}
工程文件和截图在这里,其中还有一个较为稳定的iic,大家也可以一起讨论。
没权限发链接额
http:去掉这里//url.cn/fPITkE
我的问题主要有:
怎样提高传输速度呢?
怎样才能确保被挂接到2.0总线呢?
对端点0分配64字节,为什么bus hound 还是显示8字节呢?
|