大家好!
我正在开发基于 CC2540的器件、我想创建一个类似的桥、将所有接收到的数据包从蓝牙转发到 USB、但我的 CC2540 USB 有问题。 在数据传输过程中,某些数据包丢失,当我监听 USB analeyzer 时,它会向我提供以下日志:
35.2 英寸 00 00 00 01 00 08 39 00 00 00 00 00 00 00 00 00 00 00 00 6… 4663.1.0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4663.1.16.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4663.1.32.
35.2 UST c0000004失速 pid 4664.1.0
35 复位 4665.1.0
34 复位 4666.1.0
34 正常 4666.2.0
35 还可以 4665.2.0
35.2 复位 4667.1.0
35.2 英寸 00 00 00 01 00 08 36 00 00 00 00 00 00 00 00 00 00 00 00 6… 4668.1.0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4668.1.16.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4668.1.32.
您可以在此日志中看到、在主机尝试重置端点之后、我从该返回数据包发送数据的端点、在这些过程中、我丢失了一些数据包。
下面是我将数据写入端点的代码的一部分:
uint8 usbfwVancFOBWrite (uint8 * data)
{
uint32 stopPoint = 100;
uint8 oldEndpoint;
//保存旧的索引设置,然后选择端点0并获取控制寄存
器 oldEndpoint = USBFW_GET_SELECTED_END终结 点();
USBFW_SELECT_终结 点(USB_HID_VFOB_EP);
IF (USBCSOL 和 USBCSOL_OUTPKT_RDY)//缓冲区已满
//读取 FIFO
if (usbReadLocked=0)
{
usbfwReadFifo (&USBF2、USBCNTL、_data);
USBCSOL &=~USBCSOL_OUTPKT_RDY;
}
USBFW_SELECT_终结 点(oldEndpoint);
//返回0;
}
USBFW_SELECT_端 点(USB_HID_VFOB_EP_WRITE);
//在
(((USBCSIL 和 USBCSIL_INPKT_RDY)&& stopPoint>0)期间发送数据包
stopPoint--;
if (stopPoint!=0)/*检查超时事件*/
{
usbfwWriteFifo (&USBF2、64、数据);
USBCSIL = USBCSIL_INPKT_RDY;
USBCSIL = USBCSIL_SEND_STALL;
while (((USBCSIL 和 USBCSIL_SENT_STALL)&& stopPoint>0)
stopPoint--;
}
USBCSIL = 0;
USBFW_SELECT_终结 点(oldEndpoint);
if (stopPoint=0)
返回0;/*超时事件*/
否则
返回1;/*成功发送*/
}
知道有人能给我一个解决这个问题的建议吗???
谢谢。