微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 官方CC2540USB AdvRemoteDongle 改为自定义HID设备后只能接收一次数据问题

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

时间:10-02 整理:3721RD 点击:

官方的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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top