[技术问答]

NUC 120 HID 协议困惑~

[复制链接]
1010|10
手机看帖
扫描二维码
随时随地手机跟帖
qaz123zz00|  楼主 | 2017-9-23 21:18 | 显示全部楼层 |阅读模式
最近在搞NUC120HID的通信;
USBD_SET_PAYLOAD_LEN(EP2,2);
这句话到底是什么含义,
我通过我研究例程我的理解是,将BUf传给上位机,并且进入中断服务函数;
但是好像并没有传过去。。。不知道怎么回事
qaz123zz00|  楼主 | 2017-9-23 21:33 | 显示全部楼层
      for(i = 0; i < 5; i++)
           PageBuff[i] = i;
                        ptr = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP2));
     USBD_MemCopy(ptr, (void *)PageBuff, EP2_MAX_PKT_SIZE);
                 USBD_SET_PAYLOAD_LEN(EP2,2);
                 

使用特权

评论回复
qaz123zz00|  楼主 | 2017-9-23 21:37 | 显示全部楼层
uint8_t *buf;
           uint8_t *ptr;

        uint8_t PageBuff[64];
        int i;
    /* Interrupt OUT */
    buf = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP3));  
    USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE);
        for(i=0;i<USBD_GET_PAYLOAD_LEN(EP3);i++)
{
        printf("buf[%d]=%d\n\t",i,buf[i]);
}       
for(i = 0; i < 5; i++)
           PageBuff[i] = i;
                        ptr = (uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP2));
     USBD_MemCopy(ptr, (void *)PageBuff, EP2_MAX_PKT_SIZE);
                 USBD_SET_PAYLOAD_LEN(EP2,2);
上位机传出指令,下位机会打印收到的数据,并返回值,但就是返回值这一步就想不明白了~之前吧 USBD_SET_PAYLOAD_LEN(EP2,2);放到in中断服务函数中,他开始一直传(就是停不下来的那种),这个我明白,为什么,我想只传一句话,就写成了这个样子

使用特权

评论回复
qaz123zz00|  楼主 | 2017-9-24 15:29 | 显示全部楼层
请大神们看一下,解决一下我的困惑,还是逻辑错了?

使用特权

评论回复
mintspring| | 2017-9-25 15:00 | 显示全部楼层
payload就是协议报文中的有效载荷所占报文的百分比

使用特权

评论回复
mintspring| | 2017-9-25 15:01 | 显示全部楼层
这个你要定位到所在的头文件,那个头文件的原型前面会给出说明。具体是哪个文件我不清楚,你自己找找看。

使用特权

评论回复
jiekou001| | 2017-9-25 21:02 | 显示全部楼层

使用特权

评论回复
jiekou001| | 2017-9-25 21:05 | 显示全部楼层
本帖最后由 jiekou001 于 2017-9-25 21:06 编辑

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]      Set USB payload size (IN data)
  *
  * @param[in]  ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
  *
  * @param[in]  size The transfer length.
  *
  * [url=home.php?mod=space&uid=266161]@return[/url]     None
  *
  * [url=home.php?mod=space&uid=1543424]@Details[/url]    This macro will write the transfer length to USB_MXPLDx register for IN data transaction.
  *
  */
#define USBD_SET_PAYLOAD_LEN(ep, size)  (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))) = (size))


使用特权

评论回复
jiekou001| | 2017-9-25 21:07 | 显示全部楼层
这个应该可以看明白了。这个官方写的。

使用特权

评论回复
yiyigirl2014| | 2017-9-28 16:18 | 显示全部楼层
这个要了解这个协议怎么工作了,只看代码不行。

使用特权

评论回复
捉虫天师| | 2017-9-30 20:43 | 显示全部楼层
如果对这个协议不先了解一下,只看代码,有点难懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝