[技术问答] 请教NUC123的USB,如何在收到上位机的GET_REPORT请求后,在数据未准备好前先发送NAK?

[复制链接]
3260|9
 楼主| wjwfive 发表于 2014-10-17 17:29 | 显示全部楼层 |阅读模式
我不想在中断里面去处理GET_REPORT请求所要发送的数据,而是想在程序主循环处理完后(在上位机的超时判定范围内)再发送。

在别的论坛STM板块看到以下的描述(原贴地址:hxxp:/ /w ww.amobbs.com/forum.php?mod=viewthread&tid=3851636):

      /*** GET_REPORT ***/
      else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
            && RequestNo == GET_REPORT)
      {
        if (数据未准备好)
          return USB_NOT_READY;
        CopyRoutine = CustomHID_GetReport;
      }
    这样,STM32将以NAK回应PC端的IN请求。


那新唐的官方库要怎么操作,可以发送NAK呢?好像没有“USB_NOT_READY”这样的状态??
mintspring 发表于 2014-10-18 08:17 | 显示全部楼层
这个函数我也没用过,mark一下,等会的人来讲讲
 楼主| wjwfive 发表于 2014-10-20 09:33 | 显示全部楼层
估计这个坛子里没什么人用新唐MCU做USB啊……唉
niuyaliang 发表于 2014-10-23 21:31 | 显示全部楼层
wjwfive 发表于 2014-10-20 09:33
估计这个坛子里没什么人用新唐MCU做USB啊……唉

USB比较复杂,能玩转的人都是高手,他们都不怎么上论坛的
 楼主| wjwfive 发表于 2014-10-24 17:40 | 显示全部楼层
niuyaliang 发表于 2014-10-23 21:31
USB比较复杂,能玩转的人都是高手,他们都不怎么上论坛的

唉……
再多等一周,没人应就结贴了
le062 发表于 2014-10-24 21:19 | 显示全部楼层
nak是默认就发了,
GET_REPORT三个阶段,setup,data,status
当你收到setup时,硬件会答ack,然后置setup标志位。
紧接着主机会进入data阶段,开始发in包,如果此时程序还没有对setup包进行处理并准备数据的话,硬件需要自动应答nak,等程序介入准备好数据并写入data寄存器后,硬件再次收到in包时会把数据发过去,主机收到数据后答复ack。设备收到ack后,会产生tx完成标志,再次呼叫程序介入。(数据阶段的传输事务需要重复多次,直到出现短包为止(有些奇葩主机也有其他判定规则))
当设备和主机都认识到数据传输完成了,主机会发0长度out包,如果设备未准备好收status传输事务,会答nak,准备好了就答ack。
至此,GET_REPORT完成。

评分

参与人数 1威望 +5 收起 理由
niuyaliang + 5

查看全部评分

ilove7027 发表于 2014-10-31 10:45 | 显示全部楼层
le062 发表于 2014-10-24 21:19
nak是默认就发了,
GET_REPORT三个阶段,setup,data,status
当你收到setup时,硬件会答ack,然后置setup标 ...

回答太好了,完整明了,又一次学习,谢谢!
 楼主| wjwfive 发表于 2014-10-31 14:15 | 显示全部楼层
le062 发表于 2014-10-24 21:19
nak是默认就发了,
GET_REPORT三个阶段,setup,data,status
当你收到setup时,硬件会答ack,然后置setup标 ...

问题是我不清楚如何在收到GET_REPORT的请求时,跳出中断,在主循环处理数据,再发数据给上位机。
用新唐库如何实现?
在UsbClassReq()里只有return TRUE和return FALSE,如果我return false,这个get report请求就会出错,但return true,又不知要发什么东西过去
643757107 发表于 2015-10-14 19:03 | 显示全部楼层
我看有人问USB中断的,问题,就找进来了,也没找到例程。
稳稳の幸福 发表于 2015-10-14 19:27 | 显示全部楼层
学习USB操作,用处太多了,所以进来看看能否学点什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部