hustc 发表于 2024-4-16 12:12:11

STC的usb设备怎么向主机回数据

就像uart一样,把数据放SBUF里,等完成标志就行了。usb设备回数据怎么回

QQ624353765 发表于 2024-4-16 13:31:05

USB从设备是无法给主设备主动发送数据的

乘风飞扬 发表于 2024-4-16 13:32:34

USB发送没这么简单,不过通过开源例子可以逐步反推发送过程。

像“HID(Human Interface Device)协议范例”,在"usb_out_ep1"函数里面使用"usb_bulk_intr_in"进行发送:
void usb_out_ep1()
{
    BYTE csr;

    usb_write_reg(INDEX, 1);
    csr = usb_read_reg(OUTCSR1);
    if (csr & OUTSTSTL)
    {
      usb_write_reg(OUTCSR1, OUTCLRDT);
    }
    if (csr & OUTOPRDY)
    {
      usb_bulk_intr_in(UsbBuffer, usb_bulk_intr_out(UsbBuffer, 1), 1);    //功能测试,原路返回
    }
}"usb_bulk_intr_in"函数调用"usb_write_fifo":
void usb_bulk_intr_in(BYTE *pData, BYTE bSize, BYTE ep)
{
    usb_write_fifo((BYTE)(FIFO0 + ep), pData, bSize);
    usb_write_reg(INCSR1, INIPRDY);
}"usb_write_fifo"函数调用"usb_write_reg":
void usb_write_fifo(BYTE fifo, BYTE *pdat, BYTE cnt)
{
    while (cnt--)
    {
      usb_write_reg(fifo, *pdat++);
    }
}"usb_write_reg"函数原型如下:
void usb_write_reg(BYTE addr, BYTE dat)
{
      while (USBADR & 0x80);
      USBADR = addr & 0x7f;
      USBDAT = dat;
}

hustc 发表于 2024-4-16 16:52:46

QQ624353765 发表于 2024-4-16 13:31
USB从设备是无法给主设备主动发送数据的

我说的是被动发送数据
页: [1]
查看完整版本: STC的usb设备怎么向主机回数据