官方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向设备发送第一次数据包是成功的,再次发送时,则失败,求解原因?
已解决以上问题!可正常与PC通信。有碰到同样的问题可以一起交流~~~
同样的问题,怎么解决呀?
太久了,都忘记了,关注一下USB缓冲方面的
找到以前开发时的笔记:
1、完成枚举自定义USB 11-3
2、PC 可发送一次数据至设备,但不能再次发送11-4
3、尝试更改为直接操作底层,问题依旧 11-4
4、没有更改为底层,对OUT编写了接口函数uint8 hidReceiveHidInReport(uint8 *pReport, uint8 endPoint, uint8 len)可实现收发11-5
-----------
希望对你有帮助。另外顺便交流下,你的有做配对绑定吗,目前我与手机配对绑定时,不是每次都很顺利,要不就是很久,要不就是一直等待。除非不做配对绑定功能。
大神,此问题已经解决,万分感谢,只是我是业余水平,刚接触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;
}