找回密码
 立即注册
楼主: 众哲之师

USB HID 收发数据包长度不同应如何设置

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:456
  • 最近打卡:2025-05-02 08:26:53
已绑定手机

27

主题

341

回帖

1691

积分

金牌会员

机长

积分
1691
发表于 2024-7-17 17:15:49 | 显示全部楼层
鼎银*** 发表于 2024-7-17 16:57
老师,这个描述符我在 STC8H8K64U样例上修改,没有起作用

https://www.usbzh.com/article/detail-525.html
https://www.usbzh.com/article/detail-527.html
给你两个USB HID描述符较详细的说明,你对照着看看
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-05 14:39:04

1

主题

12

回帖

59

积分

注册会员

积分
59
发表于 2024-7-18 08:07:08 | 显示全部楼层
hsr*** 发表于 2024-7-17 17:05
什么叫不起作用?这个描述符修改了之后,对应的收发程序也需要需要改,包括PC端的和MCU端的。 ...

老师,我做了相应的修改
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-05 14:39:04

1

主题

12

回帖

59

积分

注册会员

积分
59
发表于 2024-7-18 08:09:26 | 显示全部楼层
hsr*** 发表于 2024-7-17 17:05
什么叫不起作用?这个描述符修改了之后,对应的收发程序也需要需要改,包括PC端的和MCU端的。 ...

老师,我做了相应修改,
BYTE usb_bulk_intr_out(BYTE *pData, BYTE ep)
{
    BYTE cnt;

#if 01
    BYTE cnt1;
    cnt1 = cnt = usb_read_reg(COUNT0);
    while (cnt1--)
    {
                //*pData++ =
            pData[WrUsbBuf1++] = usb_read_reg((BYTE)(FIFO0 + ep));
                WrUsbBuf1 %= USBBUFLEN;
    }
#else
    cnt = usb_read_fifo((BYTE)(FIFO0 + ep), pData);
#endif
    usb_write_reg(OUTCSR1, 0);

    return cnt;
}
void pcRunMain(void)
{
#ifdef USBINF
#if 0
        while(WrUsbBuf1 != RdUsbBuf1)
        {
                pcAnalyse2(*(UsbBuffer+RdUsbBuf1++));
                RdUsbBuf1 %= USBBUFLEN;
        }
        #else
        {
                while(WrUsbBuf1 != RdUsbBuf1){
                        UsbSendBuf[ocnt1++] = UsbBuffer[RdUsbBuf1++];
                        RdUsbBuf1 %= USBBUFLEN;
                }
                if(ocnt1){
                        usb_bulk_intr_in(UsbSendBuf, ocnt1, 1);
                        ocnt1 = 0;       
                }
        }
        #endif
#else
        while(PcWriteCount != PcReadCount)
        {
                pcAnalyse2(*(pPcReadDat+PcReadCount));
                PcReadCount = (PcReadCount+1)%PCRXDNUM;
        }
#endif

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-05 14:39:04

1

主题

12

回帖

59

积分

注册会员

积分
59
发表于 2024-7-18 08:33:57 | 显示全部楼层
hsr*** 发表于 2024-7-17 17:05
什么叫不起作用?这个描述符修改了之后,对应的收发程序也需要需要改,包括PC端的和MCU端的。 ...

老师谢谢,PC端我不会,需要同事改
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-05 14:39:04

1

主题

12

回帖

59

积分

注册会员

积分
59
发表于 2024-7-21 09:05:34 | 显示全部楼层
hsr*** 发表于 2024-7-17 17:15
https://www.usbzh.com/article/detail-525.html
https://www.usbzh.com/article/detail-527.html
给你两 ...

感恩老师,STC8H8K64u样例(第60个样例)HID代码中,描述符没有report id的定义,代码也没有相应的处理,请问老师,是STC8H8K64u不支持吗?我在芯片资料里也还没有找到相应的介绍
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:456
  • 最近打卡:2025-05-02 08:26:53
已绑定手机

27

主题

341

回帖

1691

积分

金牌会员

机长

积分
1691
发表于 2024-7-21 11:35:27 | 显示全部楼层
鼎银*** 发表于 2024-7-21 09:05
感恩老师,STC8H8K64u样例(第60个样例)HID代码中,描述符没有report id的定义,代码也没有相应的处理, ...

1. ReportID属于USB应用层的HID协议下的内容,是个纯纯软件层面的东西,与芯片无关
2. 默认ReportID是0,但不能直接在描述符中使用值为0的ReportID,相当于必须省略了
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-05 14:39:04

1

主题

12

回帖

59

积分

注册会员

积分
59
发表于 2024-7-21 19:54:30 | 显示全部楼层
hsr*** 发表于 2024-7-21 11:35
1. ReportID属于USB应用层的HID协议下的内容,是个纯纯软件层面的东西,与芯片无关
2. 默认ReportID是0, ...

感恩老师的回复,明白了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-7-21 21:50:12 | 显示全部楼层
看来USB不简单啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:456
  • 最近打卡:2025-05-02 08:26:53
已绑定手机

27

主题

341

回帖

1691

积分

金牌会员

机长

积分
1691
发表于 2024-7-21 22:46:40 | 显示全部楼层
so*** 发表于 2024-7-21 21:50
看来USB不简单啊

这种软件层面的东西好搞,就是要查的资料多一点而已。
硬件设计才是真的难啊,一个LED点电路都能玩死人……
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-05 14:39:04

1

主题

12

回帖

59

积分

注册会员

积分
59
发表于 2024-8-5 15:14:20 | 显示全部楼层
hsr*** 发表于 2024-7-21 11:35
1. ReportID属于USB应用层的HID协议下的内容,是个纯纯软件层面的东西,与芯片无关
2. 默认ReportID是0, ...

老师好,请问USB中断问题,代码如下,在没有接收HID数据,或者没有向USB口发送数据,USB就不产生中断(P24不会翻转状态),理论上应该1ms产生一次中断呢,是不是某些寄存器为没有清除呢?
目的是想在USB中断里,使用usb_in_ep4()函数完成串口数据的转发,而不是在主程序里查询方式发送(uart_polling())
void usb_isr() interrupt 25
{
static BYTE cdc1cnt=0;
    BYTE intrusb;
    BYTE intrin;
    BYTE introut;
    BYTE adrTemp;

    adrTemp = USBADR;     //USBADR 现场保存,避免主循环里写完 USBADR 后产生中断,在中断里修改了 USBADR 内容

    intrusb = usb_read_reg(INTRUSB);
    intrin = usb_read_reg(INTRIN1);
    introut = usb_read_reg(INTROUT1);

    if (intrusb & RSUIF) usb_resume();
    if (intrusb & RSTIF) usb_reset();

    if (intrin & EP0IF) usb_setup();

#ifdef EN_EP1IN
    if (intrin & EP1INIF) usb_in_ep1();
#endif
#ifdef EN_EP2IN
    if (intrin & EP2INIF) usb_in_ep2();
#endif
#ifdef EN_EP3IN
    if (intrin & EP3INIF) usb_in_ep3();
#endif
#ifdef EN_EP4IN
    if (intrin & EP4INIF) usb_in_ep4();
#endif
#ifdef EN_EP5IN
    if (intrin & EP5INIF) usb_in_ep5();
#endif

#ifdef EN_EP1OUT
    if (introut & EP1OUTIF) usb_out_ep1();
#endif
#ifdef EN_EP2OUT
    if (introut & EP2OUTIF) usb_out_ep2();
#endif
#ifdef EN_EP3OUT
    if (introut & EP3OUTIF) usb_out_ep3();
#endif
#ifdef EN_EP4OUT
    if (introut & EP4OUTIF) usb_out_ep4();
#endif
#ifdef EN_EP5OUT
    if (introut & EP5OUTIF) usb_out_ep5();
#endif

    if (intrusb & SUSIF) usb_suspend();
    USBADR = adrTemp;    //USBADR 现场恢复
++cdc1cnt;
        if(!cdc1cnt)P24^=1;
}
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:44 , Processed in 0.149163 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表