This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2540:CC2540 BLE 断开连接问题

Guru**** 2529560 points
Other Parts Discussed in Thread: CC2540

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/698329/cc2540-cc2540-ble-disconnection-problem

器件型号:CC2540

大家好!

我正在使用 TI CC2540开发器件、并且希望使用 CC2540作为中央设备、 我想以这种方式实现类似桥接器的功能、CC2540将首先订阅通知字符、然后它将从该通知字符接收到的每个数据包转发到 USB 端口、 我实施的器件处理此工作、但 CC2540有时会面临断开连接、我想知道是否可能会写入 USB 队列导致断开连接??

我的连接间隔为50ms。

传出的 USB 端点是中断类型。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alireza、

    当您提出这样的假设问题时、请提供有关您的应用的更多详细信息。 是的、我认为从技术上讲、USB 传输可能会阻止堆栈并导致断开连接、但这不太可能、尤其是当您使用 HostTestApp 使用的 UART-USB 库时、但如果没有更多信息、我无法肯定。

    您基于哪种示例应用?
    哪个 USB 库? 仿真 UART 的那个?
    您收到多少数据、如何处理?
    断开原因是什么?
    它发生的频率如何?
    断开连接是否有某种模式?
    您的应用还在做什么?
    它连接到什么?

    此致、
    Aslak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    问:"您基于哪个示例应用程序?"
    R:实际上、我在项目启动后加入了项目、我不知道它是基于 Wwitch 示例、但在我的项目中、我具有由 osal 轮询的 void usbHidProcessEvents (void)函数、在此函数中、我们检查事件掩码以查看端点是否发生任何事件、 如果发生任何事件、我们将对其进行处理。

    问:"您收到多少数据、如何处理?"
    R:当我从 BLE 外设(nrf5122)发送到中央(CC2540) 20KB 数据时、有时我发送500字节数据、但有时发生在500字节上、断开连接在20KB 上、我认为断开连接与正在传输的数据的大小无关。 实际上、我希望仅在 BLE 和 USB 之间实现一个数据桥、 我只想将从通知特性中获取的数据发送到 USB,因此当 ble_process_gatt_msg 调用我打开 pMsg->method 并且如果它是 ATT_handle_value_noti 时,我将 pMsg->msg.handleValueNotti.pmsg 复制到内部数组,然后设置一个事件以在我的任务事件处理例程中处理它, 然后、当 OSAL 调用任务处理事件例程时、我将尝试在 USB 上转发接收到的数据包、在下面的代码中、您可以看到用于在 USB 端点写入数据的函数:

    uint8 usbfwFOBWrite (uint8 * data)

    uint32 stopPoint = 100;
    uint8 oldEndpoint;
    //保存旧的索引设置,然后选择端点0并获取控制寄存器
    oldEndpoint = USBFW_GET_SELECed_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);

    //发送数据包
    while (((USBCSIL 和 USBCSIL_INPKT_RDY)&& stopPoint>0)
    秒点--;
    if (stopPoint!=0)/*检查超时事件*/

    usbfwWriteFifo (&USBF2、64、数据);
    USBCSIL = USBCSIL_INPKT_RDY;
    USBCSIL = USBCSIL_SEND_STALL;
    while (((USBCSIL 和 USBCSIL_SENT_STALL)&& stopPoint>0)
    秒点--;

    USBCSIL = 0;
    USBFW_SELECT_终结 点(oldEndpoint);

    if (stopPoint=0)
    返回0;/*超时事件*/
    其他
    返回1;//成功发送*/


    问:"什么是断开原因"
    R:LL_STATUS_ERROR_CONN_SYSRING_FAILURE 是 osal 报告的断开连接原因。

    问:"这种情况发生的频率如何?"
    R:它没有任何特定的例程、它主要发生在我传输大数据时。

    问:"它连接到什么?"
    R:我使用 CC2540作为中央设备、并对应于具有 nrf5122 IC 的外设。

    感谢您的关注。