gdrc 发表于 2023-4-6 22:37:51

请教USB批量传输模式端点3做为输入无法接收数据如何配置

有个产品通讯要求用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发送到设备端的内容能收到,设备返回给电脑的数据,电脑收不到。
请问还有哪些地方要做修改?请专家指教,谢谢!

gdrc 发表于 2023-4-6 22:40:01

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, 3);   //这个传输出函数,第3个参数改成3测试也是收不到
      
      nSize -= cnt;
      pData += cnt;
    }
}

gdrc 发表于 2023-4-6 22:42:48

USB官方例程,改成用端点2接收和端点2发送,下载到官方试验箱中测试,U盘能正常工作
但改成端点3接收和端点3发送,下载到官方试验箱中测试,U盘无法被电脑打开,请问端点3是否有收发的使用例程

zhp 发表于 2023-4-7 10:01:34

gdrc 发表于 2023-4-6 22:42
USB官方例程,改成用端点2接收和端点2发送,下载到官方试验箱中测试,U盘能正常工作
但改成端点3接收和端点 ...

下面是使用端点3的范例,请参考
注意:原范例下面这句有笔误




gdrc 发表于 2023-4-7 21:07:42

谢谢楼上的超级版主批指教,经过修改后能用端点3实现U盘功能,在实验箱上验证过了,功能与用端点0和端点1是一样的。

gdrc 发表于 2023-4-7 21:10:23

输入与输出端点不是同一端点时,收到电脑发送的数据,需要返回结果前一定要切换到新的端点,然后将数据写入对应的FIFO中,然后电脑就收到设备发来的数据了。问题已经基本上找到了。

神农鼎 发表于 2023-4-7 21:35:01

{:smile:}
页: [1]
查看完整版本: 请教USB批量传输模式端点3做为输入无法接收数据如何配置