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.

[参考译文] CC1352R:DMM:请求对讲机时,BLE取消sub-GHz命令

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1099031/cc1352r-dmm-the-ble-cancels-sub-ghz-command-when-the-radio-is-requested

Thread:sysconfigBLE-stack中讨论的其它部件

您好,专家,

设置:

  • SDK:          simplelink_cc13x2_26x2_SDK_5_30_01_01
  • sysconfig:     sysconfig_1_10_0
  • 设备:       LAUNCCHXL-CC1352R1F3

我们正在开发一种sub-GHz协议。 在Rx事件期间,我们需要在 非常特定的时间(对讲机Rx设置后的几毫秒)开始侦听。

因此,Rx过程如下所示:

  1. 设置频率合成器设置
  2. 使用 triggerType == trig_never发布Rx命令
  3. 使用RF_requestAccess为 XMS保留对讲机
  4. 正在等待 Rx事件
  5. 在Rx事件中,我们运行RF_runDirectCmd以执行挂起命令

A)在单 协议模式下一切正常(禁用BLE)。 但是,当启用BLE时,我注意到系统仅在BLE在 3)和5之间调用RF_scheduleCmd时挂起

事实上:

/*
 *  ==================== RF_scheduleCmd ============================
 *  Process request to schedule new command from a particular client
 */
RF_CmdHandle RF_scheduleCmd(RF_Handle h, RF_Op* pOp, RF_ScheduleCmdParams *pSchParams, RF_Callback pCb, RF_EventMask bmEvent)
{
...

    /* If client h2 already has, reject any new commands from h. */
    if (h2 && (ClockP_isActive(&h2->state.clkReqAccess)))
    {
        /* Set the status value to schedule_error if we could not allocate space. */
        cmdHandle = (RF_CmdHandle) RF_ScheduleStatusError;

        /* Store the reason and the handle why the callback is being invoked. */
        RF_Sch.issueRadioFreeCbFlags |= RF_RADIOFREECB_CMDREJECT_FLAG;
        RF_Sch.clientHndRadioFreeCb   = h;
        
        /* ISSUE:  1) The radio is reserved by our sub-GHz protocol with RF_requestAccess
         *         2) But as soon as RF_scheduleCmd returns 'RF_ScheduleStatusError',
         *            the BLE tries again by calling RF_ratDisableChannel following by RF_scheduleCmd 
         */
    }
    else
    {

    ...     
    }
    
    ...
}

b)此外,如果保留对讲机,BLE将呼叫 RF_ratDisableChannel 以放弃 我们的待处理命令:

/*
 *  ======== RF_ratDisableChannel ========
 *  Disable RAT channel
 */
RF_Stat RF_ratDisableChannel(RF_Handle h, RF_RatHandle ratHandle)
{

...

    /* If the provided handler is valid. */
    if (ratCh && ratCh->status && (ratCh->pClient == h))
    {
        /* If the RF core is active, abort the RAT event. */
        if (RF_core.status == RF_CoreStatusActive)
        {
            /* Calculate the configuration field of command (the channel we disable). */
            uint16_t config = (uint16_t)(RF_RAT_CH_LOWEST + ratCh->handle) << RF_SHIFT_8_BITS;

            /* Disable the channel within the RF core.
               It has been checked that RAT channel to be disabled is owned by the input handle h.
               Call the function that executes the disabling with RF_currClient as input argument in
               instead of h in order to force the function to accept the disable request. This is
               required in the case where the client that will disable a RAT channel is not the same
               client as currently controlling the radio.
            */
            
            /*
             * ISSUE: If the previous BLE command was graceffuly rejected, our pending command is disabled here! 
             */
            status = RF_runDirectImmediateCmd(RF_currClient, ((uint32_t)CMDR_DIR_CMD_2BYTE(CMD_DISABLE_RAT_CH, config)), NULL);
            ...
            }
        }
    }
}

因此,当发生以下特定序列时,系统会崩溃:

  1. 设置频率合成器设置
  2. 使用 triggerType = trig_never发布Rx命令
  3. 使用 RF_requestAccess将对讲机保留 X毫秒
  4. 等待接收Rx事件~(X-1) ms后
  5. BLE 尝试使用 RF_scheduleCmd计划其命令,但这在逻辑上被拒绝(请求对讲机访问)
  6. BLE调用 RF_ratDisableChannel ,以在 不通知命令所有者的情况下放弃挂起命令
  7. 在Rx事件中,我们使用无效的命令句柄运行RF_runDirectCmd (因为该命令不再存在)

问题

1)能否通过特别检查 RF_scheduleCmd错误代码的处理方式来确认BLE堆栈行为?

2)由于即使在使用DMMSch_setBlockModeOn (DMMPolicy_StackRole_BlePeripheral)暂停BLE时也会发生此行为;  在短时间内或在执行trig_never命令之前阻止任何BLE无线电访问的最佳方法是什么?

3)  为何在正确拒绝BLE命令时,BLE会调用RF_ratDisableChannel? 是否有办法避免这种情况发生,最终使用DMM/BLE堆栈配置?

4)我们如何知道我们的命令已被 RF_ratDisableChannel丢弃?

谢谢!

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

    您好,

    你有什么建议吗?

    提前感谢

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

    您好,Jo:

    1)您是否使用SDK DMM示例作为开发的基础? 哪一个?

    2)发生这种情况时,BLE堆栈处于什么堆栈状态? 广告?

    3)发生 这种情况时,BLE和专有RF堆栈角色与DMM的优先级是什么?

    如果我对您的理解正确,问题就会出现,因为BLE命令和Prop RF命令都希望同时使用对讲机,这两个堆栈角色同时计划"定时关键"命令?

    谢谢,

    Marie H

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

    您好,Marie,

    显然,函数 DMMSch_rfRequestAccess不能在DMM模式中使用:

    /**
     *  @brief Request access RF API that should not be used in DMM <br>
    */
    extern RF_Stat DMMSch_rfRequestAccess(RF_Handle h, RF_AccessParams *pParams);

    因此,启用DMM时,此RF API始终返回错误。

    a)

    [quote userid="27.7653万" url="~/support/wireless-connectivity /sub-1-GHz/sub-1-GHz/f/sub-1-GHz-forum/109.9031万/Cc1352r-DMM-he-ble-cancers-sub-GHz-command-where-radio-is requested/4075429#4075429#4075rf/1352 requested/4075429#4075429#4075rf/正确407.5429万正确地407.5429万地使用4075使用同一个无线电命令,因为两个命令堆栈的时间是相同的,我想正确地使用同一个命令吗?

    否,当BLE广告在PostCmd (trig_never)之后,但在命令执行之前安排命令时,会出现问题。

    因此,如果不使用DMMSch_rfRequestAccess,是否有一种在 短时间内保留对讲机时隙的方法?

    换言之, 当trig_never命令成功计划时,如何保留对讲机直至其执行?

    b)

    [quote userid="27.7653万" url="~/support/wireless-connectivity /sub-1-GHz/sub-1-GHz/f/sub-1-GHz-forum/109.9031万/cc1352r-DMM-he-ble-canccancers-sub-GHz-command-where-radio-is requested/4075429#4075M1352 requested/4075429#4075M  (407.5429万 (引用4075引用DM/DM3)当这一堆栈发生这种优先级时,会发生什么?

     如果已 安排命令trig_never (队列头)但未执行...   优先级较低的新命令是否仍在后面?  

    C)另外, 如果BLE 仍然可以访问对讲机调度程序,DMMSch_setBlockModeOn(DMMPolicy_StackRole_BlePeripheral)的用途是什么?  我们到底要阻止什么?

    注:我的项目基于 DMM_wsnode_ble_sp_oad_app_CC1352R1_LAUNCHXL_tirtos_CCS

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

    您好,Jo:

    A)我不确定我是否完全了解您的情况,也不知道您希望将来保留对讲机的原因。 相反,我会将prop RF应用程序任务置于具有高优先级或紧急优先级的专用堆栈状态,并将命令安排为常规状态。 如果BLE堆栈安排了通告,则DMM调度程序将在prop RF命令完成后运行通告。

    (b)除非存在冲突,否则不考虑优先事项。 因此,只有在命令有触发时间并且该时间接近时,冲突才会得到解决。  

    有关计划的详细信息,请参阅用户指南: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_6_10_00_29/docs/dmm/dmm_user_guide/html/dmm/scheduling.html 

    c)如果BLE堆栈角色被阻止,它仍可以计划命令。 当运行命令时,DMM调度程序将检查堆栈角色是否被阻止。 如果确实被阻止,该命令将不会运行,DMM将向堆栈角色传递一个错误。 因此,决定命令是否运行的是执行命令时的块状态。

    块模式用户指南: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_6_10_00_29/docs/dmm/dmm_user_guide/html/dmm/states-and-policies.html#block-mode 

    谢谢,

    Marie H