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.

[参考译文] CC2340R5:CC2340R5器件、用于在连接后发送连续数据

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1388377/cc2340r5-cc2340r5-device-used-for-sending-continuous-data-after-connection

器件型号:CC2340R5

工具与软件:

您好!

我在一些操作中使用了3块 cc2340r5板 、我将一个器件用作中央+外设、一个用作中央器件、另一个用作外设。

因此、当 c+p 器件同时连接到不同的中央和外设时、数据不会传入或传出、但当 c+p 单独与中央或外设连接时、数据要传入、但连接2个器件时、数据不会传入。

您能否指导如何解决此问题、以及如何在连接时将数据发送到多个器件。

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

    您好!

    感谢您在 E2E 论坛上发帖。 我有几个问题可以帮助我们解决这个问题。

    1.您要为该项目使用什么 SDK?

    2.如何在设备之间传输数据? 要发送多少字节?

    2.5.哪个设备正在启动数据传输?

    3.设备是否已绑定/配对?

    4.为了确保我已经理解了当前的问题:当所有三个设备都连接时,没有数据被传输。 然而、当 C+P 连接到中央设备或外设(但不是两者都连接)时、数据正在正确传输。

    此致!

    Nima Behmanesh

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

    Nima 您好!

    感谢您的答复、

    IC - CC2340R5

    SDK 版本-simplelink_lowpower_f3_sdk_7_40_00_64

    CCS 版本- 12.6

    对于这种通信、我们将使用 CC2340R5 (器件充当中央器件和外设)、C+P 当前我们将使用 CC2340R5器件。

    1.对于中央+外围器件、我们使用 SDK simplelink_lowpower_f3_sdk_7_40_00_64、CCS 版本为12.6

    对于中央器件和外设、分别使用 CC2340R5器件、SDK 为 simplelink_lowpower_f3_sdk_7_40_00_64

    2.我们是从 C++ P 设备向中央设备发送数据(我们在建立连接后持续发送这些数据),数据大小是1字节。

    2.5 C+P 将启动数据到中央设备的传输(但在我们的案例中、中央设备和外设2个与 C+P 连接的设备、C+P 将连续向中央设备发送数据、但我们不会从 C+P 设备连续向中央设备获取数据、而是 C+P 设备连续向中央设备 char UUID 发送数据)。

    3.是的  

    4.是的,当 C+P 与当时的中央或外围设备连接时,它连续发送数据,但当所有三个设备相互连接时, C+P 正在向中央设备发送数据(而调试数据不是进入中央设备)。

    请尽可能早地做出响应。

    谢谢。此致

    Balaji Wankhede

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

    尊敬的 Balaji:

    2. 我们正在将数据从 C++ P 设备发送到中央设备(我们将在建立连接后连续发送此数据)、数据大小为1字节。

    这是通过 GATT 服务完成的吗?

    我将尝试在我这边重现此情况、但需要关于如何发送1字节的更多信息。

    此致!

    Nima Behmanesh

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

    您好、先生、

    感谢您的答复

    我们尝试发送的是仅使用 GATT 的情形。

    当 C+P 设备与中央设备或外设连接时运行正常、但当它与中央设备和外设连接时、我们面临问题(C+P 设备将数据发送到第一个连接的设备、而不是第二个设备)。

    您还需要什么信息?

    我们正在尝试在连接后将数据从 C+P 器件发送到中央和外围设备(C+P 器件是我们的主 ECU、中央器件是移动应用、外设是与我们的主 ECU 连接的另一个器件)。

    谢谢、此致

    Balaji Wankhede

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

    尊敬的 Balaji:

    感谢您提供的信息、我想我现在已经有足够的时间尝试重现。 一旦有了、我就会给您回复、看看是否遗漏了任何内容

    此致!

    Nima Behmanesh

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

    尊敬的 Balaji:

    器件从哪个处理程序发送数据?

    我假设正在编译和使用 app_central.c 和 app_peripheral.c 并在处理程序中发送数据的逻辑。

    处理程序使用什么事件来发送数据?  

    我认为有一个碰撞,并且只有一个事件被触发为其中一个处理程序。

    此致!

    Nima Behmanesh

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

    你好 Nima ,

    感谢您的答复。

    我们使用 GATT 处理程序将数据从一个器件发送到另一个连接的器件、其中我们根据连接的器件的特定字符发送数据。

    静态空 GATT_eventhandler (uint32事件、BLEAppUtil_msgHdr_t * pMsgData);

    //事件处理程序结构、包含处理程序和事件掩码
    //应用程序数据模块
    BLE4.4510_t Util_Event dataGATTHandler =

    .handlerType = BLEAPPUTIL_GATT_TYPE、
    .pEventHandler = GATT_eventhandler、
    .EventMask = BLEAPPUTIL_ATT_FLOW_CTRL_COVERSED_EVENT |
    BLEAPPUTIL_ATT_MTU_UPDATD_EVENT
    };

    用于从创建的 GATT_WRITE ()函数发送数据当我们调用 GATT_WRITE ()时,它将通过连接设备的特定字符从另一个连接的设备发送数据。

    在这种情况下、C+P 器件发送数据、但数据仅在一个器件上接收。

    我们尝试将数据从 C+P 器件发送到两个连接的器件的两个不同字符、在这种情况下也会发生相同的问题。

    我们已尝试过所有可能的方法、但我们能够解决此问题、请咨询您的 BLE 专家。

    谢谢您的问候

    Balaji Wankhede  

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

    尊敬的 Balaji:

    我能否看看在 C+P 端处理发送和接收的代码实现情况?

    只是为了澄清、数据是在链路建立事件正确后发送的? 它是基于一个能够发送 N 毫秒等的计时器吗? 嗯 已连接设备的连接句柄列表

    我仍在尝试重现此示例、但了解有关应用程序处理方式的更多信息将有所帮助。

    最新动态:

    在进一步研究后、我相信连接句柄可能是您看到这种行为的原因。

    当 C+P 设备与中央设备或外设连接时运行正常、但当 C+P 设备同时与中央设备和外设连接时、我们面临问题(C+P 设备将数据发送给第一个连接的设备、而不是第二个设备)

    1.如何管理第二台设备的连接句柄?  

    void Peripheral_GAPConnEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
    {
        switch(event)
        {
            case BLEAPPUTIL_LINK_ESTABLISHED_EVENT:
            {
                /** CODE TO BE ADDED **/
                BLEAppUtil_gapConnData_t *msg = (BLEAppUtil_gapConnData_t *)pMsgData;
                /** CODE TO BE ADDED END **/
                
                /* Check if we reach the maximum allowed number of connections */
                if(linkDB_NumActive() < linkDB_NumConns())
                {
                    /* Start advertising since there is room for more connections */
                    BLEAppUtil_advStart(peripheralAdvHandle_1, &advSetStartParamsSet_1);
                }
                else
                {
                    /* Stop advertising since there is no room for more connections */
                    BLEAppUtil_advStop(peripheralAdvHandle_1);
                }
    
                display_index++;
                /** CODE TO BE ADDED **/
                MenuModule_printf(APP_MENU_ADV_EVENT + 5 + display_index, 0, "Link Established: %d role: %d",
                                  (msg->estLinkReqEvent).connectionHandle,
                                  (msg->estLinkReqEvent).connRole);
                /** CODE TO BE ADDED END **/
                break;
            }
    
            case BLEAPPUTIL_LINK_TERMINATED_EVENT:
            {
                BLEAppUtil_advStart(peripheralAdvHandle_1, &advSetStartParamsSet_1);
                break;
            }
    
            default:
            {
                break;
            }
        }
    }

    上面的代码指示已连接器件的连接句柄及其连接角色。 请在 GATT_WRITE 之前添加代码来验证连接句柄、从而验证发送信息时使用的连接句柄是否正确。 请参见/**要添加的代码**/注释。

    此致!

    Nima Behmanesh