TI中文支持网
TI专业的中文技术问题搜集分享网站

*****官方CC2540USB AdvRemoteDongle 改为自定义HID设备后只能接收一次数据问题*****

官方的AdvRemoteDongle工程已经成功更改为自定义的HID,通过PC上位机对设备发送数据。

设备程序中通过函数:usbfwReadFifo(uint8 volatile __xdata *pFifo, uint8 count, void __generic *pData)接收PC发过来的数据包,再串口打印该数据,可得到该数据是正确的,但PC再次发送数据时,则设备不能再次接收到数据,调试发现eventMask对应的中断没有再次被标记。跟踪变量,eventMask是在__interrupt void usbirqHandler(void)中断服务程序处理标记的。

总结一句话就是设备接到PC后,PC向设备发送第一次数据包是成功的,再次发送时,则失败,求解原因??

 

user4359466:

已解决以上问题!可正常与PC通信。有碰到同样的问题可以一起交流~~~

Hailong Wei:

回复 user4359466:

同样的问题,怎么解决呀? 

user4359466:

回复 Hailong Wei:

太久了,都忘记了,关注一下USB缓冲方面的

user4359466:

回复 Hailong Wei:

找到以前开发时的笔记:

1、完成枚举自定义USB 11-32、PC 可发送一次数据至设备,但不能再次发送11-43、尝试更改为直接操作底层,问题依旧 11-44、没有更改为底层,对OUT编写了接口函数uint8 hidReceiveHidInReport(uint8 *pReport, uint8 endPoint, uint8 len)可实现收发11-5

———–

希望对你有帮助。另外顺便交流下,你的有做配对绑定吗,目前我与手机配对绑定时,不是每次都很顺利,要不就是很久,要不就是一直等待。除非不做配对绑定功能。

Hailong Wei:

回复 user4359466:

大神,此问题已经解决,万分感谢,只是我是业余水平,刚接触CC2540 个把月,您的问题我可能后续会碰到,目前我还没搞过配对。

贴上函数代码供他人参考:

uint8 hidReceiveHidInReport(uint8 *pReport, uint8 endPoint, uint8 len){    uint8 result = FALSE;
  if (endPoint < 6)  {    uint8 ea = halIntLock();
    USBFW_SELECT_ENDPOINT(endPoint);    if ((USBCSOL & USBCSOL_OUTPKT_RDY))    {      usbfwReadFifo(((&USBF0) + (endPoint << 1)), len, pReport);      USBCSOL &= ~USBCSOL_OUTPKT_RDY;      result = TRUE;    }    halIntUnlock(ea);  }     return result;}

赞(0)
未经允许不得转载:TI中文支持网 » *****官方CC2540USB AdvRemoteDongle 改为自定义HID设备后只能接收一次数据问题*****
分享到: 更多 (0)