|
有个产品通讯要求用USB设备的3号端子做为输入,2号端点做为输出,相应的端点描述符如下:
0x07, //bLength(7);
0x05, //bDescriptorType(Endpoint);
0x83, //端点3 as IN);
0x02, //bmAttributes(Bulk);
0x40,0x00, //wMaxPacketSize(64);
0x0A, //bInterval(Ignored);
0x07, //bLength(7);
0x05, //bDescriptorType(Endpoint);
0x02, //端点2 as OUT);
0x02, //bmAttributes(Bulk);
0x40,0x00, //wMaxPacketSize(64);
0x0A, //bInterval(Ignored);
我用的工程是在U盘工程上进行更改完成的,相应的接收和发送关键部分如下所示:
//#define EN_EP1IN
//#define EN_EP2IN
#define EN_EP3IN
//#define EN_EP4IN
//#define EN_EP5IN
//#define EN_EP1OUT
#define EN_EP2OUT
//#define EN_EP3OUT
//#define EN_EP4OUT
//#define EN_EP5OUT
void usb_bulk_intr_in(BYTE *pData, BYTE bSize, BYTE ep)
{
//usb_write_fifo((BYTE)(FIFO1 + ep), pData, bSize);
printf("write Fifo3=%d\r\n",(uint16_t)bSize);
usb_write_fifo((BYTE)(FIFO0 + ep), pData, bSize);
usb_write_reg(INCSR1, INIPRDY);
}
void scsi_in(BYTE *pData, int nSize)
{
BYTE cnt;
while (nSize)
{
cnt = EP3IN_SIZE;
if (nSize < EP3IN_SIZE) cnt = nSize;
while (usb_bulk_intr_in_busy());
//usb_bulk_intr_in(pData, cnt, 1);
usb_bulk_intr_in(pData, cnt, 2);
nSize -= cnt;
pData += cnt;
}
}
所有要发送到电脑的数据是用scsi_in()这个函数完成。
现在的问题是电脑通过端点2发送到设备端的内容能收到,设备返回给电脑的数据,电脑收不到。
请问还有哪些地方要做修改?请专家指教,谢谢!
|
|